用語集 / アドレスと鍵
公開鍵
- 公開鍵とは?
- 公開鍵は、秘密鍵から導出されるsecp256k1曲線上の点であり、安全に公開でき、ビットコインを使用する際に署名が照合される値です。
秘密鍵を曲線上の固定点に掛けると公開鍵が生成され、この手順を逆転させる方法は現在知られていません。圧縮鍵は33バイトを占め、TaprootではBIP-340で定義された32バイトのx-only形式にさらに切り詰められました。利用者が目にすることはほとんどありません。ほとんどのアドレスは鍵のハッシュのみを公開し、コインが実際に動くときに初めて鍵自体が明らかになるからです。
仕組み
公開鍵は特定の曲線から導かれ、その演算がすべての役割を果たします。ビットコインはsecp256k1を使用しており、この曲線は大きな素体上の方程式yの二乗 = xの三乗 + 7と、ジェネレーターと呼ばれる合意された始点によって定義されます。このジェネレーターを秘密鍵が示す回数だけ自分自身に加算すると、曲線上の別の点が得られ、その点が公開鍵です。この演算は一方向には高速ですが、今日知られているあらゆる手法を用いても逆方向は実行不可能であり、これがビットコインの所有権の基盤全体となっています。
実際には3つのエンコーディングが存在します。元の非圧縮形式は、0x04プレフィックスの後ろに両方の座標を書き出すために65バイトを使用します。圧縮形式はx座標とパリティバイトのみを保持し、合計33バイトで、10年以上前からデフォルトとなっています。Taprootはさらに一歩進み、ちょうど32バイトのx-only鍵を使用します。パリティバイトを省略するのは、代わりにBIP-340がその規約を定めているためです。
鍵がオンチェーンのどこに現れるかは出力タイプによって異なります。レガシーまたはSegWitバージョン0の出力は公開鍵の20バイトのハッシュにコミットするため、チェーン上にはコインが使用されるまでハッシュのみが表示され、使用時には支払者がそのハッシュに対応する鍵を明らかにしなければなりません。Taproot出力は異なります。32バイトの出力鍵がアドレス自体に含まれ、資金が到着した瞬間から見えます。
ビットコインを購入する際にこれが重要な理由
一般の購入者が公開鍵に直面する実務的な状況は2つあり、どちらも間違えやすいものです。
一つ目は、アドレスが自分自身のものであることを証明する場合です。EUの資金移転規則の下では、取引所は1,000ユーロを超える金額をセルフホストアドレスに送る前に、そのアドレスが顧客自身のものであることを検証しなければならず、当サイトの国別ガイドで扱っている他のいくつかの法域でも同様の確認が適用されます。標準的な証明方法は署名付きメッセージです。ウォレットがアドレスの背後にある鍵でチャレンジに署名し、取引所がそれを公開鍵に対して検証します。秘密の情報がデバイスから出ることはないため、鍵自体の提供を求められた場合とは異なり、この要求には安全に応じられます。
二つ目は拡張公開鍵、つまりウォレットがエクスポートできるxpubです。xpubは支払いの資格情報ではなく、これを渡しても直接コインを失うことはありません。ただし、渡すことで財務履歴が明らかになります。xpubを保有する者は、そのウォレットが過去および将来に使用するすべてのアドレスを生成でき、それらに紐づく残高とすべての取引を読み取ることができます。ポートフォリオ管理ツール、税務ツール、会計士は日常的にxpubを求めます。生涯分の銀行取引明細書を渡しても構わない場合にのみ提供し、そうでない場合は別のアカウントやウォレットを使用してください。
鍵からブロックチェーンをたどる
標準的なネイティブSegWitのパスm/84'/0'/0'/0/0を使用するウォレットを考えます。そのパスの鍵は33バイトの圧縮形式です。ウォレットはまずSHA-256で、次にRIPEMD-160でその鍵をハッシュ化して20バイトを生成し、そのバイトをbc1qアドレスとしてエンコードします。そのアドレスに送られたものはすべてハッシュにロックされ、ネットワークは鍵を一度も見ていません。
使用する際、witnessフィールドには署名と33バイトの公開鍵の2つの項目が含まれます。各ノードは鍵をハッシュ化し、結果が出力が要求した20バイトと一致することを確認してから、その鍵に対して署名を検証します。両方が成立する場合にのみ、その支払いは有効となります。そのブロック以降、鍵は公開されるため、すでに使用したアドレスに残高を残しておかないほうがよい十分な理由になります。
公開鍵vs秘密鍵
秘密鍵はランダムに選ばれ、公開鍵はそこから計算されます。その逆はありません。この非対称性がそれぞれの扱い方を決めます。公開鍵を公開するのは日常的なことであり、何のコストもかかりませんが、秘密鍵を公開するとコインは即座に、かつ取り返しのつかない形で引き渡されます。公開鍵は常にマイクロ秒単位で再計算できるため、バックアップで保護すべきは秘密鍵の側です。検証には公開鍵の側を使用するため、見知らぬ相手やノードは何も信頼されることなくあなたの署名を確認できます。