密碼學(xué)專題 - 密鑰交換算法
10. 密鑰交換算法
10.1 Diffie-Hellman 算法
Diffie-Hellman 算法是第一個(gè)公開密鑰算法,早在 1976 年就發(fā)明了。其安全性源于在有限域上計(jì)算離散對(duì)數(shù)比計(jì)算指數(shù)更為困難。Diffie-Hellman 算法能夠用于密鑰分配 (Alice 和 Bob 能用它產(chǎn)生秘密密鑰),但是它不能用于加密或解密消息。
數(shù)學(xué)原理很簡單。首先,Alice 和 Bob 協(xié)商一個(gè)大的素?cái)?shù) 和
,
是模
的本原元。這兩個(gè)整數(shù)不必是秘密的,故 Alice 和 Bob 可以通過即使是不安全的途徑協(xié)商它們。它們可在一組用戶中公用。
協(xié)議如下:
- Alice 選取一個(gè)大的隨機(jī)整數(shù)
,并發(fā)送給 Bob:
。
- Bob 選取一個(gè)大的隨機(jī)整數(shù)
,并發(fā)送給 Alice:
。
- Alice 計(jì)算
。
- Bob計(jì)算
。
和
都等于
。即使線路上的竊聽者也不可能計(jì)算出這個(gè)值,他們只知道
、
、
、
。除非他們計(jì)算離散對(duì)數(shù),恢復(fù)
、
,否則無濟(jì)于事。因此
是 Alice 和 Bob 獨(dú)立計(jì)算的秘密密鑰。
和
的選取對(duì)系統(tǒng)的安全性有很大的影響。
也應(yīng)該是一個(gè)素?cái)?shù)。最重要的是
應(yīng)該很大:因?yàn)橄到y(tǒng)的安全性取決于與
同樣長度的數(shù)的因子分解的難度??梢赃x擇任何滿足模
的本原元
,沒有理由不選擇所能選擇的最小
—— 通常只是個(gè) 1 位數(shù) (實(shí)際上
不必是素?cái)?shù),但它必須能產(chǎn)生一個(gè)大的模
的乘法組子群)。
10.2 三方或多方 Diffie-Hellman
Diffie-Hellman 密鑰交換協(xié)議很容易擴(kuò)展到三人或更多的人。在下例中,Alice、Bob 和 Carol 一起產(chǎn)生秘密密鑰。
- Alice 選取一個(gè)大的隨機(jī)整數(shù)
,并發(fā)送給 Bob:
。
- Bob 選取一個(gè)大的隨機(jī)整數(shù)
,并發(fā)送給 Carol:
。
- Carol 選擇一個(gè)大的隨機(jī)整數(shù)
,并發(fā)送給 Alice:
。
- Alice 發(fā)送給 Bob:
。
- Bob 發(fā)送給 Carol:
。
- Carol 發(fā)送給 Alice:'
'。
- Alice 計(jì)算
。
- Bob 計(jì)算
。
- Carol 計(jì)算
。
秘密密鑰 ,沒有其他人能計(jì)算出
值,這個(gè)協(xié)議很容易擴(kuò)展到四人或更多的人中,只是增加更多的人和增加計(jì)算的輪數(shù)。
項(xiàng)目源代碼
項(xiàng)目源代碼會(huì)逐步上傳到 Github,地址為 https://github.com/windstamp。
Contributor
- Windstamp, https://github.com/windstamp