信号プロトコル
Signal プロトコルは、Signal、WhatsApp、Facebook Messenger の暗号化スレッド、および Google の RCS メッセージングの背後にある暗号化エンジンです。これは、安全な非同期メッセージングの確立された標準に最も近いものであり、ピアレビューを受け、数十億ユーザー規模で展開され、前方機密性、将来機密性、認証の組み合わせにおいて比類のないものです。
記事全文は以下に英語で記載されています。
シグナル プロトコルは、2013 年に Open Whisper Systems (現 Signal Foundation) によって開発されました。これは、以前のセキュア メッセージング プロトコル (OTR、SCIMP) から進化し、彼らのアイデアを新しいラチェット構造と組み合わせました。核となる革新性: すべてのメッセージは新しい暗号化キーを使用するため、1 つのキーが侵害されても 1 つのメッセージのみが公開されます。また、プロトコルは侵害後、後続のメッセージに新しいキー素材を含めることで自動的に修復されます。 (Curve25519 Diffie-Hellman) キー合意用
X3DH 初期ハンドシェイク
アリスがボブ (オフラインの可能性がある) に最初にメッセージを送信するとき、Signal には対話型交換を行わずに共有キーを確立する方法が必要です。答えは、X3DH (拡張トリプル デフィー ヘルマン) です。ボブのアプリは 3 つのキーを Signal のサーバーにアップロードします:
- 彼の長期 ID キー
- A中期 署名済みプレキー (定期的に更新)
- A ワンタイムのプールprekeys (新しいセッションごとに 1 回消費)
Alice のアプリは 3 つすべてを取得します。彼女の一時キーと ID キーをボブの 3 つのプレキーと組み合わせて 4 つのディフィー ヘルマン計算を実行し、結果を共有秘密に HKDF ミックスします。最初のメッセージには、アリスの一時的な公開鍵と彼女が使用したプレキー ID が含まれています。ボブのアプリは、ボブ側から同じ共有秘密を再構築します。
計算は非対称です。アリスはボブをオンラインにする必要はありませんが、暗号強度は対話型ハンドシェイクと同等です。
ダブルラチェット
アリスとボブがルート秘密を共有すると、プロトコルは定常状態に入ります。すべてのメッセージに対して 2 つのキー ラチェットが進みます:
- 対称キー ラチェット: 同じ送信者からの行内のすべてのメッセージに対して、前のチェーン キーをハッシュして新しいチェーン キーを導出します。チェーン キーは HKDF と混合されて、一意のメッセージ キーを生成します。
- Diffie-Hellman ラチェット: 会話の方向が切り替わる (ボブがアリスに応答する) たびに、ボブは新しい一時キー ペアを生成し、アリスの最後の一時キーで DH を実行し、結果の共有秘密がルート キーに混合されます。その時点から、新しい対称ラチェットが実行されます。
この組み合わせにより、前方機密性(現在のキーが漏洩しても過去のメッセージは機密のまま)と将来の機密性/侵害後のセキュリティ(ラチェットを1ステップ超えて侵害された後、将来のメッセージは非公開になります)の両方が得られます。
Signal が得意とするもの
- メッセージ粒度での前方秘匿性。 ほとんどの暗号化プロトコルはセッション粒度で前方秘匿性を提供します。 Signal はメッセージごとに実行します。
- 順不同配信。 メッセージ 5、6、7 が 7、5、6 の順序で到着した場合でも、受信者はスキップされたメッセージ キーを一時的に保存することですべてを復号化できます。
- 非同期通信。 X3DH により、受信者が通信しなくても会話を開始できます。オンライン.
- マルチデバイスのサポート. 上部に階層化された Sesame プロトコルは、ユーザーごとに複数のデバイスを処理します。
- 最小限のメタデータ. Signal のサーバー設計 (送信者は封印され、プライベートな連絡先の検出) により、より多くのメタデータが隠蔽されます。競合他社.
難しいこと
プロトコルは 2 者間で行われます。 グループメッセージングには追加の機構が必要です。Signalのソリューションは、各送信者がグループごとの鍵を取得し、それを通常のプロトコルを介してペアごとに各メンバーに配布する「送信者鍵」です。グループにおける前方秘匿性の保証は、1 対 1 のチャットよりも弱くなります。新しいメンバーを追加することはできますが、暗号化操作のコストはグループのサイズに応じて増加します。 MLS (メッセージング層セキュリティ) IETF 標準はこれに大規模に対処しており、徐々に採用されています。
ID 検証 は依然として安全性数値の帯域外比較に依存しています。検証しない場合は、Signal サーバーがサイレントにキーを交換しないことを信頼していることになります。ほとんどのユーザーは検証をしません。プロトコルのセキュリティは、オペレータの誠実さに加えて、検出されないマス スワップの難しさが条件となります。
Signal プロトコルに遭遇する場所
- Signal 自体 (リファレンス実装)
- WhatsApp (25 億ユーザー - 史上最大のエンドツーエンド暗号化メッセージング サービス)
- Facebook Messenger (デフォルト) E2E ロールアウトは 2024 年に完了)
- Google メッセージ / RCS (デフォルトで 1:1 チャット、後でグループ チャットが追加)
- Skype のプライベート会話 (レガシー)
- その他さまざまなクライアント
プロトコルのライブラリlibsignalはオープンソースであり、監査されています。暗号設計は 10 年以上の精査にも耐えてきました。
よくある質問
- Signal は本当にエンドツーエンドで暗号化されていますか? それともサーバーを信頼する必要がありますか?
- 数学的にはエンドツーエンド — サーバーはキーを持っていないため、メッセージを復号化できません。 Signal のサーバーがアカウント設定中に ID キーをサイレントに交換しないことを信頼します。安全番号検証機能を使用すると、スワップが発生していないことを帯域外で確認できます。
- WhatsApp は本当に同じプロトコルを使用しているのでしょうか?
- はい、基礎となる信号プロトコルは同じです。違いはメタデータです。WhatsApp には電話番号と、(最近まで)誰がいつ誰にメッセージを送信したかに関するメタデータが保存されています。 Signal は設計上、より多くのメタデータを非表示にします。メッセージ内容の暗号化は同じです。
- シグナルプロトコルとMLSの違いは何ですか?
- Signal プロトコルは、グループ用の拡張機能を備えた 2 者間プロトコルです。 MLS (Messaging Layer Security、RFC 9420) は、グループ向けにネイティブに設計された新しい IETF 標準であり、グループ サイズの拡大に応じて効率的に動作します。 MLS は、数千のメンバー グループを効率的に処理するツリーベースのキー導出を使用します。一部の主要サービスはグループ チャットのために MLS に移行しています。 Signal Protocol は 1:1 のリーダーであり続けます。
- Signal Protocol は量子コンピューターによって破られる可能性がありますか?
- X25519 と Ed25519 は大規模量子コンピューターに対して脆弱です。 Signal は 2023 年に PQXDH (ポスト量子ハイブリッド) を追加し、将来の量子攻撃者に対する前方秘密保持のために CRYSTALS-Kyber を混ぜました。ダブルラチェット自体は古典的な安全性を維持しています。 PQXDH は「harvest-now-decrypt-later」に対応します。
- すべてのメッセージング アプリが Signal プロトコルを使用しないのはなぜですか?
- 主要なもののほとんどは現在切り替えている、または切り替え中です。ホールドアウトにはビジネス上の理由があります。Telegram はクラウド チャットに対してデフォルトで非 E2E を設定しているため、デバイス間でチャットを提供できます。 iMessage は Apple 独自のプロトコルを使用します。コンプライアンスで規制されている一部のサービスでは、法的審査のためにメッセージ コンテンツへのサーバー側のアクセスが必要です。このプロトコルは技術的には勝利を収めています。養子縁組は今や政治です。