學習軌道
/
Python
Python
/
練習
/
Diffie-Hellman
Diffie-Hellman

Diffie-Hellman

簡單

說明

Diffie-Hellman 金鑰交換。

Alice 與 Bob 使用 Diffie-Hellman 金鑰交換來共享秘密。 他們從質數開始,挑選私鑰,產生並交換公鑰,接著產生一把共享密鑰。

步驟 0

測試程式會提供質數 p 和 g。

步驟 1

Alice 挑選一把私鑰 a,它大於 1 且小於 p。 Bob 也同樣挑選一把私鑰 b。

步驟 2

Alice 計算出公鑰 A。

A = gᵃ mod p

Bob 使用相同的 p 和 g,同樣從他的私鑰 b 計算出公鑰 B。

步驟 3

Alice 與 Bob 交換公鑰。 Alice 計算出密鑰 s。

s = Bᵃ mod p

Bob 計算

s = Aᵇ mod p

兩邊的計算會得到相同的結果! Alice 與 Bob 現在共享秘密 s。

這裡該用 random 還是 secrets?

從 Python 3.6 起,有兩個不同的模組可以用來產生「隨機」數字:

名為 random 的模組是偽隨機的,意思是它不會產生真正的隨機性,而是遵循一套會_模擬_隨機性的演算法。 由於這些「隨機數字」是透過已知的演算法產生的,因此並不是真正的隨機。 所以,random模組並不適合用於密碼學,也不該使用,正是因為它是偽隨機的。

名為 secrets 的模組會產生密碼學上強健的「隨機」數字,提供密碼學所需的更高安全性。 嚴格說來,它們仍然是偽隨機的,但它們保證所產生的數字完全無法預測。

由於這只是練習題,使用random模組沒問題,但要注意如果真的用在密碼學上,會非常不安全。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Python Exercism

準備好開始 Diffie-Hellman 了嗎?

註冊 Exercism,透過 17 個概念146 個練習 和真人引導來學習並精通 Python,全部免費。