Diffie-Hellman
如果我們在 Diffie-Hellman 中選擇大於素數的隨機密鑰會發生什麼?
Diffie-Hellman 的工作原理如下:
給定公共參數 $ p $ (一個大素數)和 $ g $ (總是被稱為發電機 $ (\mathbb{Z}^∗_p) $ . 然後:
- 愛麗絲隨機選擇 $ a<p $ 並發送 $ A\leftarrow g^a \mod p $ 給鮑勃;
- Bob 隨機選擇 $ b<p $ 並發送 $ B\leftarrow g^b \mod p $ 給愛麗絲;
- 愛麗絲計算 $ S\leftarrow B^a \mod p $ ;
- Bob 計算 $ S\leftarrow A^b \mod p $ .
如果我們選擇會發生什麼 $ a $ 和 $ b $ 大於 $ p $ ?
模運算 $ \pmod p $ 在每個步驟中執行並將結果簡化為 $ \bmod p $ . 一個聰明的實現可以使用費馬小定理而不是取冪而不是減少到模 $ p $ . 之後,可以使用重複平方算法或類似算法的模組化版本。
範例 1) sublimerobots使用的程式碼
sharedPrime = 23 # p sharedBase = 5 # g aliceSecret = 600 # a bobSecret = 1500 # b Alice Sends Over Public Chanel: 8 Bob Sends Over Public Chanel: 4 Privately Calculated Shared Secret: Alice Shared Secret: 2 Bob Shared Secret: 2
例 2)
sharedPrime = 23 # p sharedBase = 5 # g aliceSecret = 6000000 # a bobSecret = 15000000 # b Alice Sends Over Public Chanel: 8 Bob Sends Over Public Chanel: 4 Privately Calculated Shared Secret: Alice Shared Secret: 2 Bob Shared Secret: 2
我認為您混淆了數學表示和實際值。
在優化的意義上,程式碼來自於
sublimerobots
不好。實際上。代替bobSharedSecret = (A**bobSecret) % sharedPrime
更快的版本
bobSharedSecret = pow(A,bobSecret,sharedPrime)
它使用模二進制取冪。
它可能產生三個後果。
1)如果你很倒霉,你選了一個“零”( $ a $ 這樣 $ a=0\mod p-1 $ ),它會破壞你的系統:(但這發生的機率可以忽略不計,並且可以被檢測到)外部觀察者很容易猜出共享的秘密
- 你會失去效率
3)你的整數必須選擇上限(你不能在所有整數上統一選擇,如果你選擇不好這一點(不能被 $ p $ ),它會在您的密鑰分配中產生偏差(在實踐中可能不是問題,但理論上它不太安全)。