Google-Allo、WhatsApp、Facebook Messenger、Signalなどで使用される Signal protocol の重要な部分は、公開鍵インフラストラクチャです。セッションを設定するには公開鍵が必要です。私の知る限り、キーを認証する方法は指定されていません。つまり、アリスがボブとのセッションをセットアップするときに、彼女が自分の公開鍵を受け取り、他人の公開鍵を受け取っていないことをどのように確認できますか?
次に、上記の質問に満足のいく答えがあると仮定すると、ネットワーク上で何が起こっているかを確認できますか?つまり、(彼女の秘密鍵にアクセスできる)アリスは、回線上のプロトコルを調べて、ボブの公開鍵を抽出し、手で認証できます(指紋、ボブに電話して、比較するように依頼します)?
これはおそらく実装ごとに異なると思います。最初は、 WhatsApp暗号化の概要に関するホワイトペーパー に回答がありません。それでは、これはどのように実装されますか?
広い意味での本当の問題はもちろんです。実装、つまりサービスプロバイダーをどの程度信頼する必要があるのでしょうか。正直なところ、これらのサービスがエンドツーエンドで暗号化されていることに大きな混乱があるのは不思議です。サービスプロバイダーが必要に応じて盗聴するのは簡単なようです(プロトコルの専門家ではありません!)。彼らは望んでいない、または意図していないかもしれませんが、プライバシーが十分に重要な人にとっては、それでも責任があります。
アリスがボブとのセッションを設定するときに、彼女が自分の公開鍵を受け取り、他の誰も受け取っていないことをどのように確認できますか?
彼女は現在できません。 (より良い質問は、アリスはどのようにしてクライアントがセッションをセットアップするためにボブの公開鍵を使用し、悪意のあるユーザーの1つを使用していないことを確認できるでしょうか?)WhatsAppセキュリティホワイトペーパーは次のように述べています:
認証の場合、ユーザーは外部チャネルを通じて公開鍵のフィンガープリントを手動で比較できます。
これには2つの問題があります。
ワイヤーで何が起こっているかを確認できますか?
私の知る限りではありません。この質問に関連する Redditスレッド の1人のコメント投稿者は、Signal Protocolのより良いドキュメントは まもなく公開される になると述べています。うまくいけば、これが役立ちます。しかし、これに本当に必要なのは、トラフィックを検証するための詳細な手順です。
実装、つまりサービスプロバイダーをどの程度信頼する必要がありますか?
まず、私が見る限り、Signalプロトコルには、基本的に、暗号化プロトコルからセキュアなe2eチャネルをセットアップするために必要なすべてのものが含まれています。鍵交換が安全になると、e2e通信に必要なすべての要素が揃います。
しかし、現在の実装では、まだありません。
したがって、この質問への回答として、チャットメッセージの機密性はサービスプロバイダーの善意に完全に依存すると想定する必要があります。
現時点では、バイナリのみのプラットフォームで実行される実装を信頼する必要があり、これらの「バイナリ配信」システム内ですべての暗号化、証明書、ランダム性が正しく処理されることを確認する実際の方法はありません。私の信念は、これまでにiOSまたはAndroidなどで作成されたものは信頼できず、エンドポイントのセキュリティが大抵失敗するため、すべてのエンドツーエンドの暗号化は役に立たないと信じています。 'これらのOS内。
私は、AppleまたはAndroidで使用する外部暗号化デバイスを作成したプロジェクトに貢献しています。Linuxカーネル4.8、ライブラリ、およびe2e暗号化(ユーザーが処理したPKIを使用)を100%からコンパイルしますソースツリーを作成し、信頼を正しい監査可能な実装に置き換えますこれは、この質問への回答にアプローチする唯一の方法だと思います。
そのため、電話やネットワーク、完全に信頼できないドメインに到達する前に暗号化を実行してください。