Diffie-Hellman
Diffie-Hellman 伺服器/客戶端生成的秘密大小
所以我已經實現了一個客戶端和一個執行 Diffie-Hellmann 的伺服器,但是有時對稱密鑰無效?
例子:
- 總理:23
- 原始根:5
- 客戶密碼:14
- 伺服器密碼:16
這會導致生成錯誤的對稱密鑰。
- 客戶端共享密鑰: $$ {5^{14}\mod 23}=13 $$
- 伺服器共享密鑰: $$ {5^{16}\mod 23}=3 $$
- 客戶端“對稱密鑰”:$$ {3^{14}\mod 23}=4 $$
- 伺服器“對稱密鑰”:$$ {13^{16}\mod 23}=8 $$
所以我們可以得出結論,所提供的論點導致了一個錯誤的 Diffie-Hellman,因為 $ 4\ne8 $ .
伺服器和客戶端的偽隨機生成密鑰的規則是什麼?
Javascript 用於計算,例如
13**16%23
.
問題很簡單:JavaScript 很爛。
在這種特殊情況下,問題在於 JS 沒有整數類型,因此所有內容都儲存為雙精度數。特別是最後的計算 $ 13^{16} $ 將產生一個 60 位整數,JS 按順序計算。然而,雙精度尾數只有 52 位,因此不可能包含完整值。所以JS輪。然後它採用四捨五入的數字並應用 $ \bmod 23 $ 減少產生一些與您打算計算的值無關的值。