用語集 / アドレスと鍵
P2PKHアドレス
別名はPay-to-Public-Key-Hash、P2PKH出力です。
- P2PKHアドレスとは?
- P2PKHは、公開鍵の20バイトのハッシュにコインをロックする出力タイプであり、そのため鍵自体は使用する瞬間まで隠されたままになります。
Pay to public key hashは、1で始まるすべてのアドレスの背後にあるスクリプトパターンです。そのロックスクリプトは正確に25バイトで、コインが移動するときに5つの操作を実行します。出力が鍵そのものではなく指紋にコミットするため、未使用のP2PKH出力は、その背後の公開鍵について観察者に何も伝えません。
仕組み
P2PKH出力は1つのロックスクリプトを持ち、その形は常に同じです:OP_DUP OP_HASH160 <20バイトのハッシュ> OP_EQUALVERIFY OP_CHECKSIG。この20バイトのハッシュはHASH160であり、圧縮公開鍵のSHA-256にRIPEMD-160を適用したものですが、これが33バイトの鍵が20バイトのコミットメントになる仕組みです。
使用時には、入力のscriptSigに2つの項目を渡します:まず署名、次に公開鍵です。実行は順に進みます。OP_DUPが鍵をコピーし、OP_HASH160がそのコピーを20バイトに縮め、OP_EQUALVERIFYがそれをコミットされた値と比較して異なれば中止し、OP_CHECKSIGがトランザクションに対して署名を検証します。両方のチェックに合格する必要があり、どちらかが失敗すると、その入力だけでなくトランザクション全体が無効になります。
サイズはこのレイアウトから決まります。P2PKH出力はオンチェーンで34バイトを要し、8バイトの金額、1バイトの長さ、25バイトのスクリプトで構成されます。入力はおよそ148vバイトを要します。DER符号化されたECDSA署名が71~72バイトで、圧縮鍵がさらに33バイトを加え、そのすべてがウィットネスの外にあり、そこでは各バイトが4倍に重み付けされるからです。
どこで見られるか
1で始まるすべてのアドレスはP2PKHアドレスであり、これには2017年8月にブロック481,824でSegWitが有効になる前に移動したコインの大部分が含まれます。ブロックエクスプローラーは各出力にタイプを表示するので、何もデコードせずに自分が見ているものを確認できます。
覚えておく価値があるのは、公開鍵がいつ公開されるかという点です。使用するまでは、チェーン上にはハッシュしかありません。最初の使用で鍵がscriptSigに恒久的に公開されます。その後そのアドレスを再利用すると、以降の残高はすでにすべての人に見えている鍵の背後に置かれることになり、何のコストもかからなかった保護の層が1つ失われます。これは直ちにプライバシーの問題であり、楕円曲線暗号への将来的な攻撃に関する長年の議論が、新しいアドレスではなく、再利用されすでに使用済みのアドレスに焦点を当てている理由でもあります。
実際には:支払いごとにウォレットから新しい受取アドレスを渡してもらい、お釣りも新しいアドレスに送るようにしてください。現代のソフトウェアはどちらも既定で行います。
P2PKHアドレスvs P2WPKH
P2PKHとP2WPKHは同じものにコミットしますが、コストは大きく異なります。どちらもコインを単一の圧縮公開鍵の20バイトのHASH160にロックし、どちらもその鍵からの1つの署名でロックを解除します。両者を分けるのは、ロック解除データがどこに書かれるかです。P2PKHは署名と鍵をscriptSigに置き、1バイトあたり4つの重み単位で数えます。P2WPKHはそれらをウィットネスに移し、1つとして数えます。だからこそ同じ秘密から、見た目がまったく異なる1アドレスとbc1qアドレスが作られ、独立してコインを保持し、空にするコストで2倍以上異なるのです。