P2SH(pay to script hash)のアドレスフォーマットを定義した仕様BIP-13についてざっと意訳。
bips/bip-0013.mediawiki at master · bitcoin/bips · GitHub
概要
このBIPでは、任意の複雑なトランザクションをサポートするためのアドレスについて説明する。通常のBitcoinのトランザクションが単一の楕円曲線暗号の秘密鍵を必要とするのに対し、P2SHを使ったトランザクションでは受信者がコインを受け取るためにどんな情報が必要か定義する。
この仕様によってエンコードされたアドレスは、通常のBitcoinトランザクションで利用される楕円曲線暗号の公開鍵のハッシュをエンコードしたものと異なり、スクリプトのハッシュをエンコードしたものになる。
仕様
新しいBitcoinアドレスタイプ(P2SHアドレス)は、既存のBitcoinアドレスと同様(Base58エンコーディング)に構成される。
base58-encode: [one-byte version][20-byte hash][4-byte checksum]
MainNetのバージョンバイトは5、TestNetのバージョンバイトは196となる。(このためMainNetではP2SHアドレスは3から始まり、TestNetでは2から始まるアドレスになる。)
[20-byte hash]はコインを入手するために使われるスクリプトのハッシュ。
[4-byte checksum]はバージョンバイトとスクリプトのハッシュをSHA-256でダブルハッシュした最初の4バイト。
論拠
Bitcoinアドレスはよりユーザフレンドリーな支払いのため廃止されるべきだという批判がある。これは単に設計が不十分な仕組みを継続利用しているだけだと。
別の批判は、Bitcoinアドレスがなんらアイデンティティ情報と関連付けられていないので本質的に安全ではないというものだ。
更に、SHA-256を切り捨てるのは最適なチェックサムではないという批判もある。
これは、より安全なBitcoinのインフラストラクチャへの最も簡単な方法の1ピースだ。この仕様は、Bitcoinのユーザビリティとセキュリティの問題の全てをいっきに解決するためのものではない。将来のBIPによって、支払いを作成するためのよりユーザフレンドリーなメカニズムなどは提案されるべきだろう。
手動でBitcoinアドレスを入力することは稀になるだろうと考えると、Bitcoinアドレスのためのチェックサムは現状で充分な動作をしていると考えられ、チェックサムアルゴリズムの変更は必要ないと考えている。