セキュリティ
Trail of BitsはどのようにSignalチャットの整合性検証を支援しているか
How Trail of Bits helps verify the integrity of Signal chats (blog.trailofbits.com)
要約
Signalの自動キー検証機能は、サーバーが偽の公開鍵を提供した場合でも、ユーザーが安全な通信を行えるように支援します。Trail of Bitsは、このシステムの信頼性を支える3つの監査人のうちの1つとして、独立した監査システムを構築・運用しており、ユーザーと公開鍵のマッピングがグローバルに一貫しており、改ざんされていないことを継続的にチェックしています。
全文翻訳
すべてのSignalチャットは同じように始まります。クライアントはSignalサーバーに連絡先の電話番号に関連付けられた公開鍵を要求します。しかし、サーバーが正しい鍵を提供したことをどうやって知るのでしょうか?侵害されたサーバーは偽の公開鍵を提供し、クライアントが意図した受信者ではなく攻撃者にメッセージを暗号化する可能性があります。
これまで、このような不正行為を検出する唯一の方法は、対面または信頼できるチャネルで連絡先とセーフティナンバーを確認することでした。Signalは最近、代替手段として自動キー検証を導入しました。これは、直接のセーフティナンバー比較を必要とせずに、チャットが安全であることを検証するのに役立つ機能です。Trail of Bitsは、このシステムを信頼できるものにする3つの監査人のうちの1つを構築・運用しています。私たちの監査人は、ゼロから書かれた独立した実装であり、自動キー検証システムが正直に動作していることを継続的にチェックしています。
キー検証の仕組み
自動キー検証は、「キー透明性」の一形態であり、各電話番号に関連付けられた公開鍵のセットのグローバルに一貫したビューを作成することで、ミスマッチ攻撃を隠しにくくします。Signalアプリは現在、アカウントのグローバルマップに保存されているすべての鍵がデバイスに属していることを確認するために、定期的な自己チェックを実行します。アプリがログを検証できない場合、またはすべての鍵が期待どおりでない場合、ユーザーには「お使いのデバイスでは現在、自動キー検証が利用できません」という警告が表示されます。Signalのドキュメントに概説されているように、他の理由で自動キー検証が利用できない場合もあります。
私たちの監査人が行うこと
自動キー検証は外部監査人に依存しています。Trail of Bitsは、ユーザーと公開鍵のマッピングがグローバルに一貫しており、適切に形成されており、エントリを隠していないという外部検証を提供することで、このシステムが機能するのを支援します。新しいエントリが追加されるたびに、ローカルのマップコピーを更新し、Merkleツリーとして保存します。定期的に、ツリーのヘッドを私たちだけが知っている署名鍵で署名します。一貫したMerkleツリーの系統のみに署名することを約束しているため、クライアントはシステム内の他のすべてのユーザーと同じ公開鍵セットを見ていることを知ることができます。クライアントは現在、Signalによって運用されている監査人、Cloudflareによって運用されている監査人、およびTrail of Bitsによって運用されている監査人のそれぞれからの署名を必要としています。
自動キー検証がオンになっている場合、SignalクライアントはSignalキー透明性サーバーから定期的にMerkleツリーのヘッドを取得します。クライアントは、各ツリーヘッドが過去7日以内に登録されたすべての監査人によって承認された系統に属していることを要求します。サーバーが有効な監査人の署名を提供しない場合、クライアントは警告を発し、自動キー検証は失敗します。したがって、完全に悪意のあるサーバーは、クライアントアプリケーションが警告メッセージを表示し始めるまで、最大1週間システムのスプリットビューを維持する可能性があります。
私たちは、独立した検証を提供するために、仕様に基づいて監査人をゼロから実装することを選択しました。コードはオープンソースです。Signalは参照実装も公開しています。
署名ポリシーに実質的な変更が必要な場合、例えば監査人の状態をリセットしたり、署名鍵をローテーションしたりする場合は、このブログ投稿を更新します。現在の公開鍵は次のとおりです。
7fe5d91de235188486d8fb836a6da37e625e2b10eb6d144185b9364cc83cbbb6
自動キー検証の使用方法
Signalで自動キー検証を有効にするには、「設定 > プライバシー > 詳細設定」に移動し、「自動キー検証」を有効にします。サポートされているチャットでは、セーフティナンバー検証画面に移動して「自動で検証」をクリックすることで、相手方の公開鍵を検証できます。自動キー検証は、ユーザー名で受信者を検索して会話を開始したチャットではサポートされないことがよくあります。詳細については、Signalのヘルプページを参照してください。自動検証が失敗した場合は、セーフティナンバー比較にフォールバックする必要があります。
なぜ私たちはこれを行っているのか
私たちは、自由でプライベートなコミュニケーションは重要な公共財であると信じています。私たちはSignalやその他のいかなる当事者からもこのサービスに対して報酬を受けていません。私たちは、ユーザーとコミュニティ全体の利益のためにこれを運営しています。
公開鍵の整合性は何らかの形で、完全なエンドツーエンド暗号化システムの重要なコンポーネントです。キー透明性またはエンドツーエンド暗号化全般を実装したい場合は、私たちにご連絡ください。