web-dev-qa-db-ja.com

WhatsAppのサーバーからの公開鍵が、私が期待する人物のものであることをどのように確認しますか?

WhatsAppは最近、すべての通信でエンドツーエンドの暗号化を発表しました。それは印象的な動きですが、私にはまだ大きな疑問符があります。

記事と このホワイトペーパー は、公開鍵が生成時にサーバーに保存されることを示唆しています。他の人と話したいときは、WhatsAppサーバーに公開キーを要求し、それを通信に使用します。同じホワイトペーパーは、鍵の検証について次のように述べています。

さらに、WhatsAppユーザーは、通信している他のユーザーのキーを検証して、不正なサードパーティ(またはWhatsApp)が中間者攻撃を開始していないことを確認できるようにするオプションもあります。これは、QRコードをスキャンするか、60桁の番号を比較することで実行できます。

ああ、それはいいですね。それらはどのように生成されますか?

QRコードに含まれるもの:

  1. バージョン。
  2. 両方のユーザーのユーザーID。
  3. 両当事者の完全な32バイトの公開識別キー。

どちらかのユーザーが他方のQRコードをスキャンすると、キーが比較され、QRコードの内容がサーバーから取得したIDキーと一致することを確認します。

しかし...これらはすべてサーバーが知っている詳細であり、他の人に特別なことを要求することはありません(署名されているQRについては触れていません)。 60桁の数字はどうですか?

60桁の数字は、各ユーザーのIDキーの2つの30桁の数値フィンガープリントを連結することによって計算されます。 30桁の数値フィンガープリントを計算するには:

  1. 繰り返しSHA-512は、公開IDキーとユーザー識別子を5200回ハッシュします。
  2. 最終ハッシュ出力の最初の30バイトを取得します。
  3. 30バイトの結果を6つの5バイトのチャンクに分割します。
  4. 各5バイトチャンクをビッグエンディアンの符号なし整数として解釈し、100000を法として減じることにより、各5バイトチャンクを5桁に変換します。
  5. 5桁の6つのグループを30桁に連結します。

繰り返しますが、これらはサーバーが簡単に計算して有効な検証データとして提示できる詳細です。


私はこれを誤解していますか、または私が話している公開鍵が私がそうであると思う人に属していることを確認する実際の方法はありませんか?

18
Madara's Ghost

QRコードと60桁の番号の両方を「帯域外」で確認する必要があります。次に例を示します。

  • 電話で番号を大声で言う
  • 直接会って、他のデバイスから直接QRコードをスキャンする
4
copy