136 / 736V2P2P

BIP324

ノード間の暗号化された接続

Bitcoin のノードは取引やブロックをやり取りします。BIP324 は、インターネット接続を監視する人が、そのメッセージを簡単に読めないようにします。ただし、ノードを匿名にするものでも、受信データの検証を不要にするものでもありません。

BIP324 は、Bitcoin のノード同士が交換するメッセージを暗号化する方法を定めています。ノードは、取引やブロックを検証し、ネットワークの他の参加者と通信するソフトウェアです。ネットワーク参加者間のこうした直接接続を P2P 接続と呼び、暗号化された方式を v2 transport と呼びます。接続をただ盗聴している人には、内容を簡単に読めないようにします。ただし、暗号化だけでは実際にどのノードと通信しているかは確認できません。公開ブロックチェーンや取引の有効性を決めるルールは変わりません。

ブロックは、ビットコインの共通の履歴に追加される取引のまとまりです。ブロックは公開されています。しかし、その伝播を観察することと、完成したチェーンを読むことは別です。暗号化されていない接続では、メッセージの順序、要求、ノードが取引を転送した時刻も見えます。これらは通信を特定の人と結び付ける手掛かりになります。BIP324 は、受動的な観察者が内容を簡単に読むことを防ぎます。 [1] [2] [7]

対応するノード同士が接続時に鍵を合意し、その後は暗号化して通信します。事前に相手の身元を知る必要も、中央機関の証明書を持つ必要もありません。だからこそ、暗号化されていることは信頼できることを意味しません。相手ノードは当然メッセージを読めますし、攻撃者のノードかもしれません。 [1]

接続開始時の handshake、つまり最初の取り決めで、両方のノードは一時的な鍵を生成します。秘密鍵は秘密にしておく数値で、対応する公開鍵は他の人と共有できます。ECDH を使うと、秘密鍵そのものを交換せずに、双方が同じ共有秘密を計算できます。そこから通信を保護する鍵を導きます。ElligatorSwift は公開鍵の表現方法で、この交換部分をランダムなデータに見せ、決まった特徴から見分けにくくします。これらはネットワーク接続専用の鍵です。ビットコインを使うための秘密鍵でも、ウォレットの鍵を導く秘密の初期値である seed でもありません。暗号化通信を有効にするために、ウォレットのバックアップを誰かに渡す必要はありません。 [1] [8]

途中で誰かがメッセージを横取りし、内容を書き換えたとします。BIP324 は ChaCha20Poly1305 を使い、暗号化に加えて、そのメッセージが接続の鍵に対応し、改ざんされていないかを確認します。鍵を持たない攻撃者は、単にデータを書き換えて有効なメッセージにすることはできません。ただし、この確認は、意図したノードと鍵を共有していることまでは証明しません。能動的に介入する中間者は、接続開始時に双方に対して相手のふりをできます。その場合、中間者は別々の暗号化接続を持ち、その間でメッセージを読んで転送します。メッセージの保護と接続相手の確認は、別の課題なのです。 [1]

通信中には鍵が更新されます。古い秘密情報を適切に消去すれば、後から現在の鍵を入手されても、過去の記録全体が自動的に解読されるわけではありません。これを forward secrecy と呼びます。 ただし、相手のノードがすでに読んだり保存したりしたメッセージは守れません。コンピューターを継続して支配する攻撃者にも対処できず、直近のメッセージ群は解読される可能性も残ります。 [1]

互換性のため、古い v1 transport も引き続き使えます。v2 接続に失敗すると、ソフトウェアは v1 を試す場合があります。能動的な攻撃者は暗号化接続を妨害し、暗号化なしへの後退を狙えます。BIP324 は受動的監視のコストを上げますが、一般的な downgrade 耐性や接続の可用性を保証しません。 [1] [4]

BIP324 は IP アドレスや、通信の時間・量のあらゆる特徴を隠すわけではありません。IP アドレスは、機器がインターネット上で通信するときに使うネットワーク上のアドレスです。Tor は別の部分を補えますが、併用しても匿名性が自動的に得られるわけではありません。届き方に関係なく、Full Node は取引、署名、ブロックを検証します。暗号化だけでは、攻撃者がノードを取り囲む Eclipse Attack は解決しません。 [1] [6]

Bitcoin Core 26.0 は 2023 年に v2 対応を追加し、当初は既定で無効でした。27.0 で既定で有効になりました。そのため本項の年は提案の誕生ではなく、Bitcoin Core での初対応を指します。通信方式は接続ごとに交渉するため、ソフトウェアが対応していても、すべての peers が v2 を使っているとは限りません。 [3] [4]

Bitcoin Core の運用者は bitcoin-cli getpeerinfo で接続状態を確認できます。これはノードの操作や情報取得に使うインターフェース、RPC への問い合わせです。このコマンドは Bitcoin ネットワークに取引を送信したり設定を変更したりしません。出力には接続ごとの情報が並びます。transport_protocol_type の v2 は暗号化通信、v1 は従来の暗号化されない通信、detecting はまだ方式が確定していない状態です。session_id には v2 接続の識別子が入り、それ以外では空になります。識別子があるだけでは相手を確認できません。運用者同士が相互の接続の識別子を別の信頼できる経路で照合すれば、中間者を検出できますが、通常の接続では自動で行われません。この結果が示すのはその接続であり、取引がネットワーク全体を伝わる経路ではありません。出力には公開する必要のないネットワーク情報も含まれます。 [5] [1]

BIP324 の著者は Dhruv Mehta、Tim Ruffing、Jonas Schnelli、Pieter Wuille です。番号は 2019 年に割り当てられ、2026 年 10 月 17 日の確認時点で状態は Deployed です。導入に Soft Fork やビットコイン供給量の変更は不要です。ノード間通信を段階的に改善するもので、効果は正しい実装と実際に使う接続に依存します。 [1]

理解を深めるには、この項目とあわせて次もお読みください Full Node, Eclipse Attack, Bitcoin のプライバシー, Bitcoin Core. 次の項目からも参照されています Mix Network.

DOC · 001BIP 324 — Version 2 P2P Encrypted Transport Protocol仕様 DOC · 002Bitcoin Optech — Version 2 P2P transport文書 DOC · 003Bitcoin Core 26.0 release一次資料 DOC · 004Bitcoin Core 27.0 release一次資料 DOC · 005Bitcoin Core — getpeerinfo RPC文書 DOC · 006Bitcoin Developer Reference — P2P network文書 DOC · 007Bitcoin Developer Guide — Block Chain文書 DOC · 008Bitcoin Developer Reference — Transactions文書
改訂日: 一次資料を優先 · 投資助言ではありません