Diffie-Hellman 金鑰交換。
Alice 與 Bob 使用 Diffie-Hellman 金鑰交換來共享秘密。 他們從質數開始,挑選私鑰,產生並交換公鑰,接著產生一把共享密鑰。
測試程式會提供質數 p 和 g。
Alice 挑選一把私鑰 a,它大於 1 且小於 p。 Bob 也同樣挑選一把私鑰 b。
Alice 計算出公鑰 A。
A = gᵃ mod p
Bob 使用相同的 p 和 g,同樣從他的私鑰 b 計算出公鑰 B。
Alice 與 Bob 交換公鑰。 Alice 計算出密鑰 s。
s = Bᵃ mod p
Bob 計算
s = Aᵇ mod p
兩邊的計算會得到相同的結果! Alice 與 Bob 現在共享秘密 s。
從 Python 3.6 起,有兩個不同的模組可以用來產生「隨機」數字:
名為 random 的模組是偽隨機的,意思是它不會產生真正的隨機性,而是遵循一套會_模擬_隨機性的演算法。
由於這些「隨機數字」是透過已知的演算法產生的,因此並不是真正的隨機。
所以,random模組並不適合用於密碼學,也不該使用,正是因為它是偽隨機的。
名為 secrets 的模組會產生密碼學上強健的「隨機」數字,提供密碼學所需的更高安全性。
嚴格說來,它們仍然是偽隨機的,但它們保證所產生的數字完全無法預測。
由於這只是練習題,使用random模組沒問題,但要注意如果真的用在密碼學上,會非常不安全。