web-dev-qa-db-ja.com

KRACKとキーストリーム

キーストリームに関して少し混乱しています。同じセッションキーを再度インストールすると、nonceがリセットされて再起動します。

  • セッションキー+ナンス=キーストリーム?

  • キーストリームは今やプレーンテキストの暗号化に使用される部分ですか?

どのようにして何かを解読することは可能ですか?キーストリームを取得するには、プレーンテキストの一部と、このプレーンテキストが含まれていることを示す暗号化されたメッセージが必要ですか?

パケットごとに暗号化用の新しいキーストリームが取得されますか、それとも完全に新しい4ウェイハンドシェイクの後にキーストリームが更新されますか?

6
Rene

セッションキー+ナンス=キーストリーム?

はい、キーストリームは、数学的な意味でのキーとノンスの関数です(同じキー+ノンスの組み合わせで同じキーストリームが生成されます)。

keystream = F(key, nonce)

...ここで、Fは、ストリーム暗号のキーストリーム生成関数(単にストリーム暗号と呼ばれることが多い)です。 Fは、すべての暗号化ダークマジックが発生するブラックボックスと考えてください。秘密鍵と公開ナンスを与えるたびに、実際には知らない人にはランダムに見える非常に長い出力が生成されます鍵ですが、同じ秘密鍵を知っている別の当事者は、同じ鍵とナンスの組み合わせを使用するだけで再作成できます。

キーストリームは今やプレーンテキストの暗号化に使用される部分ですか?

はい、それらをXORすることにより:

ciphertext = plaintext XOR keystream

または、keystreamの定義を拡張します。

ciphertext = plaintext XOR F(key, nonce)

どのようにして何かを解読することは可能ですか?キーストリームを取得するために、プレーンテキストの一部と、このプレーンテキストが含まれていることを示す暗号化されたメッセージが必要ですか?

0 XOR x = xおよびx XOR x = 0すべてのxについて、前の方程式はこれを意味します:

plaintext = ciphertext XOR F(key, nonce)

したがって、暗号文を復号化するには、受信者は暗号化に使用されたものと同じ鍵とナンスを持っている必要があります。もう一度、Fを、暗号化に使用されたものと同じ鍵とノンスを指定して同じ鍵ストリームを複製するコンパクトなブラックボックスと考えてください。

パケットごとに暗号化用の新しいキーストリームが取得されますか、それとも完全に新しい4ウェイハンドシェイク後にキーストリームが更新されますか?

同じセッションの各パケットは、同じ鍵を使用して暗号化されますが、ナンスは異なります。つまり、正しい操作では、各パケットに新しいキーストリームが使用されます。ナンスには増分パケットカウンタが使用されます。攻撃は、実装をだまして、キーをリセットせずにパケットカウンターをその初期値にリセットすることです。これにより、被害者は同じキーとノンス、つまり同じキーストリームで複数のメッセージを暗号化します。

2
Luis Casillas

このウィキペディアのページ を見てください。描かれたCTRモードの派生物を使用しているため、カウンターのリセットは致命的です。送信された各データパケットは、「キーストリーム」の同じ部分で暗号化されます。

したがって、既知のプレーンテキスト攻撃によってAESキーが復元されることも、完全なキーストリームをすぐに導出することもできません。

ただし、キーストリームの最初の部分が同じになる可能性のある多数の異なるパケットを強制的に暗号化すると(カウンターはゼロにリセットされます!)、キーストリームの最初の部分に対するプレーンテキスト攻撃が知られており、おそらく時間の経過とともにそれからすべてのビットを回復します:

  1. キーストリームの0番目の部分の前の数ビットのTCPパケットであるという前提からデコードします(TCPヘッダーの定数部分)。
  2. 次のパケットはラッキーです。キーストリームの既知のビットを使用してパケットを再度復号化し、ラテンエンコーディングの独立宣言のテキストの始まりを見つけます。これにより、キーストリームの大部分が既知になります。

ただの原則です-それでも些細なことではありませんが、「壊れた」と数えるのに十分だと思います。

この質問 も参照してください。

0
user1931751

User1931751がすでに回答したことに加えて、2つ目の質問に関して以下を追加します。

パケットごとに暗号化用の新しいキーストリームが取得されますか、それとも完全に新しい4ウェイハンドシェイク後にキーストリームが更新されますか?

4ウェイハンドシェイクは新しいセッションキーを導出し、新しいキーが暗号化(AES暗号への入力)に使用されるため、以前のキーストリームと一致しない新しいキーストリームにつながります。ただし、4ウェイハンドシェイクに対するKRACK攻撃では、同じセッションキーが2回インストールされます。したがって、同じキーストリームがあります。しかし、あなたは攻撃が誘発するものではない「完全な4ウェイハンドシェイク」を要求したので、完全なハンドシェイクが終了した後、すぐに説明しようとします。

1つのセッションキーがインストールされている場合、1で初期化されたナンス(いくつかの固定されたものと組み合わされたもの)が、最初のパケットを暗号化するためのIV(初期化ベクトル)として使用されます。 802.11標準のこのパケット(MPDU)は複数のブロックで構成され、CCMモード(RFC 3610)を使用してこれに対処します。したがって、802.11規格の場合、ナンスはパケットごとに1ずつ増加するカウンターです。いくつかのAESブロックで構成されるこのパケットは、RFC 3610で指定されている独自の「インターン」カウンターモードの初期化ベクトルとしてこのカウンターを使用します。したがって、各ブロックと各パケットは、現在のキーストリームの次の部分で暗号化する必要があります。セッションキーと802.11初期化ベクトル(ノンス、MACアドレスなどで構成されるもの)。

0
Clanow