為什麼這不是一個可行的密鑰交換算法?
我只是想知道為什麼不能使用這種算法代替 Diffie-Hellman 來交換密鑰:
- Alice 決定了一個她希望與 Bob 共享的密鑰。
- Alice 生成與密鑰長度相同的字節流(安全地,例如,使用 CSPRNG)。
- 愛麗絲發送給鮑勃:
C1 = (key ^ alice_random_bytes)
- Bob 以類似於 Alice 的方式生成隨機字節流。
- 鮑勃回到愛麗絲:
C2 = (C1 ^ bob_random_bytes)
- Alice
C2
再次與她的隨機字節序列進行異或運算,只留下key ^ bob_random_bytes
這樣的結果並將其發送給 Bob:C3 = (C2 ^ alice_random_bytes) = (C1 ^ bob_random_bytes ^ alice_random_bytes) = (key ^ alice_random_bytes ^ bob_random_bytes ^ alice_random_bytes) = (key ^ bob_random_bytes)
- Bob
C3
與他的隨機字節進行異或運算並獲得密鑰:K = (C3 ^ bob_random_bytes) = (key ^ bob_random_bytes ^ bob_random_bytes) = key
這似乎比 Diffie Hellman 簡單得多,所以我想知道:這種算法有什麼問題?
我已將Alice 隨機字節簡化為 ARB,將Bob 隨機字節簡化為 BRB。然後協議如下:
愛麗絲知道 $ key $ 和 $ ARB $ 並發送 $$ C_1 = key \oplus ARB $$
鮑勃知道 $ C_1 $ 和 $ BRB $ 並發送
$$ C_2 = C_1 \oplus BRB = key \oplus ARB \oplus BRB $$
愛麗絲計算 $ C_2 \oplus key \oplus ARB = key \oplus key \oplus ARB \oplus BRB = BRB $
愛麗絲知道 $ key, ARB, $ 和 $ BRB $ 並發送
$$ C_3 = (C_2 \oplus ARB) = key \oplus ARB \oplus BRB \oplus ARB = key \oplus BRB $$
現在,首先,這需要一個三通協議。
現在,觀察者看到
$$ \begin{align} C_1 & = key \oplus ARB \oplus {}\ C_2 & = key \oplus ARB \oplus BRB\ C_3 & = key \oplus \phantom{ARB}\oplus BRB \ \end{align} $$
被動觀察者(竊聽者)只需 x-or 即可導出密鑰$$ key = C_1 \oplus C_2 \oplus C_3. $$因此,對攻擊者的弱假設是不安全的;被動的!。
因此,您依賴 xor,但是,並沒有檢查觀察者可以從中獲取和計算什麼。
另一方面,Diffie -Hellman 密鑰交換 (DHKE)洩露 $ g^a $ 和 $ g^b $ 其中 Alice 選擇一個隨機整數 $ a $ 並發送 $ g^a $ 和 Bob 選擇一個隨機整數 $ b $ 並發送 $ g^b $ . 發現 $ a $ 或者 $ b $ 來自他們的是離散對數問題。另一方面,計算 Diffie-Hellman (CDH) 假設被要求找到 $ g^{ab} $ 給定 $ g^a $ 和 $ g^b $ , DHKE 在此轉發。如果離散對數很容易,那麼 CDH 很容易。在一般情況下,我們不知道相反的情況。
密鑰交換算法試圖防止竊聽。您必須假設您通過網路發送的內容(C1、C2 和 C3)被截獲。這是該方法的一個問題,因為 C2 只是 C1 xor Bob 的隨機字節,而 C3 只是密鑰 xor Bob 的隨機字節。
具有 C1、C2 和 C3 的攻擊者可以使用 C1 xor C2 來獲取 Bob 的隨機字節,然後使用 C3 進行 xor 來獲取密鑰,就像 Bob 一樣。