用語集 / アドレスと鍵
鍵ペア
- 鍵ペアとは?
- 鍵ペアとは、1つの秘密鍵と、それが生成する単一の公開鍵をまとめたものであり、ビットコインのあらゆる署名とマルチシグのあらゆる定足数が数えられる所有の単位です。
組み合わせが重要なのは、2つの半分が正反対の役割を担うからです。一方は署名を作成し、もう一方は第三者がそれを検証できるようにします。つながりは一方向にしか働かないため、公開側の半分を公開しても秘密側の半分が危険にさらされることはありません。ペアを数えることが構成の規模を見積もる方法なのは、2-of-3マルチシグの保管庫が3つの場所に保管された3つの鍵ペアで、そのうち任意の2つで使用できるからです。
仕組み
1つの秘密鍵からは正確に1つの公開鍵が得られ、その対応関係が変わることはありません。同じ32バイトの秘密を、どの機器でも、どのウォレットでも、10年の隔たりがあっても同じ曲線演算に入力すれば、同一の公開鍵が出てきます。この決定性があるからこそ、ウォレットはバックアップから復元できるのであり、公開鍵を保存する必要もないのです。公開鍵は必要に応じて再計算されます。
鍵ペアはあらゆる使用の作業を分担します。利用者の機器は秘密側の半分を使って、署名対象の取引そのものにコミットする署名を作成し、数千のノードが公開側の半分を使って、署名が鍵とその取引の両方に一致することを確認します。1つの出力を1サトシだけ変えれば、署名は検証を通らなくなります。署名のサイズは方式によって異なります。BIP-340のSchnorr署名はちょうど64バイトであるのに対し、古いDER符号化のECDSA署名は71バイトまたは72バイトに達し、これがTaprootの使用が安価になる理由の一部です。
階層的決定論的ウォレットは、1つの秘密を無制限のペアの在庫に変えます。BIP-32の導出は、ツリーの各階層で2,147,483,648個の通常の子インデックスを提供し、さらに同数の強化インデックスも提供し、そのすべてが1つのシードから再現できます。ウォレットはその在庫から支払いごとに新しいペアを発行し、これによってアドレスのローテーションが帳簿管理の悪夢ではなく実用的になります。
どこで見られるか
鍵ペアは、ウォレットが単に使用するのではなく何かを証明しなければならないときはいつでも見えてきます。メッセージ署名が最も分かりやすい例です。利用者がアドレスを選び、ウォレットが秘密側の半分でテキストのチャレンジに署名し、誰でも公開側の半分でそれを検証できます。暗号資産取引所はまさにこれを使って出金先アドレスの所有を確認しており、コインは一切動きません。
マルチシグでは、ペアを数えることが重要になり始めます。2-of-3の保管庫は3つの独立したペアから構築され、通常は3つの別々の機器で生成され、redeem scriptは3つの公開側の半分すべてを指定しますが、秘密側の半分は任意の2つがあれば使用に足ります。1台の機器を失っても損害はありませんが、2台を失えばすべてを失います。保管庫がどのように失敗するかを決めるのは、ハードウェアのブランドではなく、この算術です。
協調署名も同じ構造を示します。BIP-174で定義された部分的に署名されたビットコイン取引は、定足数に達するまでペアごとに1つの署名を集めながら機器間を移動します。各署名者は自分の秘密側の半分だけに触れ、他の全員の公開側の半分を見ます。これはまさに鍵ペアが想定する分離です。
鍵ペアvs拡張鍵
鍵ペアは葉であり、拡張鍵は枝です。xprvやxpubとして表される拡張鍵は、32バイトのチェーンコードと束ねられた鍵であり、この追加の素材があるからこそ子鍵を導出できます。裸の鍵ペアは何も導出しません。それにロックされたコインを管理し、そこで止まります。この区別にははっきりとした実務上の意味があります。1つの公開鍵が漏れれば1つのアドレスが露出しますが、xpubが漏れれば、その下の枝が将来生成するすべてのアドレスが露出します。