Diffie-Hellman

Diffie-Hellman 伺服器/客戶端生成的秘密大小

  • May 22, 2020

所以我已經實現了一個客戶端和一個執行 Diffie-Hellmann 的伺服器,但是有時對稱密鑰無效?

例子:

  • 總理:23
  • 原始根:5
  • 客戶密碼:14
  • 伺服器密碼:16

這會導致生成錯誤的對稱密鑰。

  1. 客戶端共享密鑰: $$ {5^{14}\mod 23}=13 $$
  2. 伺服器共享密鑰: $$ {5^{16}\mod 23}=3 $$
  3. 客戶端“對稱密鑰”:$$ {3^{14}\mod 23}=4 $$
  4. 伺服器“對稱密鑰”:$$ {13^{16}\mod 23}=8 $$

所以我們可以得出結論,所提供的論點導致了一個錯誤的 Diffie-Hellman,因為 $ 4\ne8 $ .

伺服器和客戶端的偽隨機生成密鑰的規則是什麼?

Javascript 用於計算,例如13**16%23.

問題很簡單:JavaScript 很爛。

在這種特殊情況下,問題在於 JS 沒有整數類型,因此所有內容都儲存為雙精度數。特別是最後的計算 $ 13^{16} $ 將產生一個 60 位整數,JS 按順序計算。然而,雙精度尾數只有 52 位,因此不可能包含完整值。所以JS輪。然後它採用四捨五入的數字並應用 $ \bmod 23 $ 減少產生一些與您打算計算的值無關的值。

引用自:https://crypto.stackexchange.com/questions/80884