java dh算法_dh密钥交换算法java
dh密鑰交換算法java
迪菲-赫爾曼密鑰交換(Diffie–Hellman key exchange,簡(jiǎn)稱“D–H”) 是一種安全協(xié)議。
它可以讓雙方在完全沒有對(duì)方任何預(yù)先信息的條件下通過(guò)不安全信道建立起一個(gè)密鑰。這個(gè)密鑰可以在后續(xù)的通訊中作為對(duì)稱密鑰來(lái)加密通訊內(nèi)容。
(1)、算法描述
離散對(duì)數(shù)的概念:
原根:如果a是素?cái)?shù)p的一個(gè)原根,那么數(shù)值:
amodp,a^2 modp,…,a^(p-1) modp
是各不相同的整數(shù),且以某種排列方式組成了從1到p-1的所有整數(shù)。
離散對(duì)數(shù):如果對(duì)于一個(gè)整數(shù)b和素?cái)?shù)p的一個(gè)原根a,可以找到一個(gè)唯一的指數(shù) i,使得:
b =(a的i次方) modp?????????????? 其中0≦i ≦p-1
那么指數(shù)i稱為b的以a為基數(shù)的模p的離散對(duì)數(shù)。
Diffie-Hellman 算法的有效性依賴于計(jì)算離散對(duì)數(shù)的難度,其含義是:當(dāng)已知大素?cái)?shù)p和它的一個(gè)原根a后,對(duì)給定的 b,要計(jì)算 i ,被認(rèn)為是很困難的,而給定 i 計(jì)算b 卻相對(duì)容易。
Diffie-Hellman算法:
假如用戶A和用戶B希望交換一個(gè)密鑰。
取素?cái)?shù)p和整數(shù)a,a是p的一個(gè)原根,公開a和p。
A選擇隨機(jī)數(shù)XA
B選擇隨機(jī)數(shù)XB
每一方都將X保密而將Y公開讓另一方得到。
A計(jì)算密鑰的方式是:K=(YB) ^XA modp
B計(jì)算密鑰的方式是:K=(YA) ^XB modp
證明:
(YB)^ XA mod p = (a^XB modp)^ XA mod p
= (a^XB)^ XA mod p = (a^XA) ^XB mod p??? (
=(a^XA modp)^ XB mod p= (YA) ^XB mod p
由于XA和XB是保密的,而第三方只有p、a、YB、YA可以利用,只有通過(guò)取離散對(duì)數(shù)來(lái)確定密鑰,但對(duì)于大的素?cái)?shù)p,計(jì)算離散對(duì)數(shù)是十分困難的。
例子:
假如用戶Alice和用戶Bob希望交換一個(gè)密鑰。
取一個(gè)素?cái)?shù)p =97和97的一個(gè)原根a=5。
Alice和Bob分別選擇秘密密鑰XA=36和XB=58,并計(jì)算各自的公開密鑰:
YA=a^XA mod p=5^36 mod 97=50
YB=a^XB mod p=5^58 mod 97=44
Alice和Bob交換了公開密鑰之后,計(jì)算共享密鑰如下:
Alice:K=(YB) ^XA mod p=44^36 mod 97=75
Bob:K=(YA) ^XB mod p=50^58 mod 97=75
(2)、安全性
當(dāng)然,為了使這個(gè)例子變得安全,必須使用非常大的XA, XB 以及p, 否則可以實(shí)驗(yàn)所有的可能取值。(總共有最多97個(gè)這樣的值, 就算XA和XB很大也無(wú)濟(jì)于事)。
如果 p 是一個(gè)至少 300 位的質(zhì)數(shù),并且XA和XB至少有100位長(zhǎng), 那么即使使用全人類所有的計(jì)算資源和當(dāng)今最好的算法也不可能從a, p和a^(XA*XB) mod p 中計(jì)算出 XA*XB。
這個(gè)問(wèn)題就是著名的離散對(duì)數(shù)問(wèn)題。注意g則不需要很大, 并且在一般的實(shí)踐中通常是2或者5。
在最初的描述中,迪菲-赫爾曼密鑰交換本身并沒有提供通訊雙方的身份驗(yàn)證服務(wù),因此它很容易受到中間人攻擊。
一個(gè)中間人在信道的中央進(jìn)行兩次迪菲-赫爾曼密鑰交換,一次和Alice另一次和Bob,就能夠成功的向Alice假裝自己是Bob,反之亦然。
而攻擊者可以解密(讀取和存儲(chǔ))任何一個(gè)人的信息并重新加密信息,然后傳遞給另一個(gè)人。因此通常都需要一個(gè)能夠驗(yàn)證通訊雙方身份的機(jī)制來(lái)防止這類攻擊。
有很多種安全身份驗(yàn)證解決方案使用到了迪菲-赫爾曼密鑰交換。例如當(dāng)Alice和Bob共有一個(gè)公鑰基礎(chǔ)設(shè)施時(shí),他們可以將他們的返回密鑰進(jìn)行簽名。
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的java dh算法_dh密钥交换算法java的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 通信层_Android nat
- 下一篇: java 打包成服务_maven jav