本文へスキップ
buybitcoinsmart

用語集 / 開発者向けリファレンス

SSL署名

SSL署名とは?
SSL署名とは、BIP70が、Webサーバーの証明書の鍵でPaymentRequestに署名する際のバイト列に付けた名称であり、この呼び名は書かれた時点ですでに不適切でした。

BIP-70で規定されています。

SSL署名にはSSLプロトコルは一切関係しません。そのバイト列は、シリアライズされたメッセージに対する通常のX.509署名であり、TLSサーバー証明書の秘密鍵で作成されます。そしてSSLプロトコル3.0は2015年6月にRFC 7568によって正式に禁止されました。古いビットコインのドキュメントを読む人は、この語句を「証明書署名」の意味と捉えて先に進むべきです。

仕組み

状況:SSL署名は、それを定義したプロトコルであるBIP70とともに消滅しました。Bitcoin Coreは2014年3月からBIP70を搭載し、リリース0.20.0がそれを削除しました。現在、維持されているソフトウェアでこの署名を生成したり検証したりするものはありません。この語句はbitcoin.orgの開発者リファレンスに残っており、ほとんどの人がそこで見つけます。

アルゴリズムは署名自体が示すのではなく、兄弟フィールドによって選ばれていました。支払いリクエストはpki_typeをnone、x509+sha256、x509+sha1のいずれかとして宣言しました。その値は証明書の形式とハッシュ関数を示し、署名アルゴリズムは加盟店の証明書がたまたま持っていた鍵、実際にはRSAから決まりました。検証者は加盟店が署名した正確なバイト列を再構築し、指定されたハッシュ関数でハッシュ化し、その結果を添付された証明書チェーンの最初の証明書にある公開鍵と比較しました。

3つの選択肢のうち2つは時代とともに不適切になりました。x509+sha1の設定は、BIP70が公開される前からすでに弱いものでした。NISTは2013年12月31日以降、デジタル署名の生成にSHA-1を認めていなかったからです。2020年1月までに、研究者は貸し出されたGPU時間およそ$45,000でSHA-1に対する選択プレフィックス衝突を実証しました。これはまさに、署名済みの1つの文書を別の文書に差し替えられる攻撃です。NISTはその後、SHA-1が承認アルゴリズムから完全に外れる時点を2030年12月31日と定めました。

より本質的な点は、この署名とビットコインの署名が異なる問いに答えていることです。ビットコイン取引内の署名は、secp256k1曲線上で、ECDSA、または2021年11月14日にブロック709,632でTaprootが有効化されて以降はBIP340で規定されるSchnorrを用いて、すべてのノードがコンセンサスルールに照らして検証します。SSL署名は、ベンダーが維持する証明書ストアに対して1つのウォレットが検証するものでした。一方は資金の移動を承認し、誰にも覆すことはできません。もう一方は、誰がそれを求めているかについての主張でした。

どこで見かけるか

証明書署名は消滅しておらず、消えたのはBIP70というフィールド名だけです。ブラウザーは今も、TLSハンドシェイクの間にサーバーが証明書の鍵を保有していることを証明するのを見守っており、それがBIP70が借りようとしていたものの正直な姿です。

ビットコインを保有するときに気にすべき版は、コード署名です。ウォレットのソフトウェアとハードウェアウォレットのファームウェアは製造元が管理する鍵で署名されており、インストール前にその署名を確認することが、改ざんされたダウンロードを発見する手順です。TrezorとLedgerのデバイスはファームウェアの署名をデバイス自体で検証し、認証できないビルドを拒否するか、大きな警告を出して示します。これはBIP70フィールドとは異なり、実際に機能している署名です。決済ページに印刷された名前ではなく、ビットコインを保管する鍵を守るからです。

SSL署名vsデジタル署名

SSL署名はブロックチェーン上の何も承認しませんでした。ビットコイン取引内のデジタル署名は特定のアウトプットを解錠し、数千のノードが独立して検証します。BIP70フィールドは認証局の一覧に対して単一のクライアントソフトウェアが検証するものでした。鍵を失った場合の結果も同じくらい大きく異なります。侵害された証明書の鍵は、その日の午後に失効され再発行されます。侵害されたビットコインの鍵は、ビットコインがすでに失われていることを意味します。

混同しやすい用語

よくある質問

SSL署名はビットコインの署名と同じものですか?

いいえ。ビットコインの署名はsecp256k1曲線上で作成され、コインが移動する前にすべてのノードがコンセンサスルールに照らして検証します。SSL署名は支払いメッセージに対するX.509署名であり、1つのウォレットが認証局のリストに照らして検証するものでした。

SSL署名をいまも検証しているウォレットはありますか?

メンテナンスされているものはありません。Bitcoin Coreはリリース0.20.0でBIP70を削除し、エコシステムの残りもそれに続いたため、今日インストールするものは支払いリクエストを解析したり、その署名を検証したりしません。

関連用語

開発者向けリファレンスのその他の用語

このページを英語で読む