Diffie-Hellman

如果我們在 Diffie-Hellman 中選擇大於素數的隨機密鑰會發生什麼?

  • October 28, 2019

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 $ ),它會破壞你的系統:(但這發生的機率可以忽略不計,並且可以被檢測到)外部觀察者很容易猜出共享的秘密

  1. 你會失去效率

3)你的整數必須選擇上限(你不能在所有整數上統一選擇,如果你選擇不好這一點(不能被 $ p $ ),它會在您的密鑰分配中產生偏差(在實踐中可能不是問題,但理論上它不太安全)。

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