交換演算法描述
a=a^b^(a^b)
定義兩個數int x,y;
如果x=0,y=0,x^y==0;
如果x=0,y=1,x^y==1;
如果x=1,y=0,x^y==1;
如果x=1,y=1,x^y==0;
Ⅱ 簡要介紹DH密鑰交換演算法
姓名:朱睿琦
學號:15180288015
參考:https://ke..com/item/Diffie-Hellman/9827194?fr=aladdin
http://blog.csdn.net/fw0124/article/details/8462373
【嵌牛導讀】:隨著互聯網路的高速發展,計算機運算能力的提升,對信息的保密也有了更近一步的要求——不僅信息要保密,密鑰也要保密。DH(Diffie-Hellman)演算法就提供了使密鑰安全通過不安全網路的方法。
【嵌牛鼻子】:DH演算法,密鑰,網路信息安全
【嵌牛提問】:DH演算法是用來保護什麼在網路中的通信安全?DH密鑰交換的基本原理是什麼?
【嵌牛正文】:(1)、演算法描述
離散對數的概念:
原根 :如果 a 是素數 p 的一個原根,那麼數值:
a mod p , a^ 2 mod p ,…, a^( p-1) mod p
是各不相同的整數,且以某種排列方式組成了從 1 到 p-1 的所有整數。
離散對數 :如果對於一個整數 b 和素數 p 的一個原根 a ,可以找到一個唯一的指數 i ,使得:
b =( a的i次方) mod p 其中 0 ≦ i ≦ p-1
那麼指數 i 稱為 b 的以 a 為基數的模p的離散對數。
Diffie-Hellman演算法的有效性依賴於計算離散對數的難度,其含義是:當已知大素數 p 和它的一個原根 a 後,對給定的 b ,要計算 i ,被認為是很困難的,而給定 i 計算 b 卻相對容易。
Diffie-Hellman演算法:
假如用戶A和用戶B希望交換一個密鑰。
取素數 p 和整數 a , a 是 p 的一個原根,公開 a 和p。
A選擇隨機數XA< p ,並計算YA= a^ XA mod p。
B選擇隨機數XB< p ,並計算YB= a^ XB mod p。
每一方都將X保密而將Y公開讓另一方得到。
A計算密鑰的方式是:K=(YB) ^XA mod p
B計算密鑰的方式是:K=(YA) ^XB mod p
證明:
(YB)^ XA mod p = ( a^ XB mod p )^ XA mod p
= ( a^ XB)^ XA mod p = ( a^ XA) ^XB mod p (<-- 密鑰即為 a^(XA*XB) mod p )
=( a^ XA mod p )^ XB mod p = (YA) ^XB mod p
由於XA和XB是保密的,而第三方只有 p 、 a 、YB、YA可以利用,只有通過取離散對數來確定密鑰,但對於大的素數 p ,計算離散對數是十分困難的。
例子:
假如用戶Alice和用戶Bob希望交換一個密鑰。
取一個素數 p =97和97的一個原根 a =5。
Alice和Bob分別選擇秘密密鑰XA=36和XB=58,並計算各自的公開密鑰:
YA= a^ XA mod p =5^36 mod 97=50
YB= a^ XB mod p =5^58 mod 97=44
Alice和Bob交換了公開密鑰之後,計算共享密鑰如下:
Alice:K=(YB) ^XA mod p =44^36 mod 97=75
Bob:K=(YA) ^XB mod p =50^58 mod 97=75
(2)、安全性
當然,為了使這個例子變得安全,必須使用非常大的XA, XB 以及 p , 否則可以實驗所有的可能取值。(總共有最多97個這樣的值, 就算XA和XB很大也無濟於事)。
如果 p 是一個至少 300 位的質數,並且XA和XB至少有100位長, 那麼即使使用全人類所有的計算資源和當今最好的演算法也不可能從a, p 和a^(XA*XB) mod p 中計算出 XA*XB。
這個問題就是著名的離散對數問題。注意g則不需要很大, 並且在一般的實踐中通常是2或者5。
在最初的描述中,迪菲-赫爾曼密鑰交換本身並沒有提供通訊雙方的身份驗證服務,因此它很容易受到中間人攻擊。
一個中間人在信道的中央進行兩次迪菲-赫爾曼密鑰交換,一次和Alice另一次和Bob,就能夠成功的向Alice假裝自己是Bob,反之亦然。
而攻擊者可以解密(讀取和存儲)任何一個人的信息並重新加密信息,然後傳遞給另一個人。因此通常都需要一個能夠驗證通訊雙方身份的機制來防止這類攻擊。
有很多種安全身份驗證解決方案使用到了迪菲-赫爾曼密鑰交換。例如當Alice和Bob共有一個公鑰基礎設施時,他們可以將他們的返回密鑰進行簽名。