DH演算法使用
㈠ DH密鑰交換(Diffie–Hellman key exchange)演算法筆記
注意:只是個人理解,可能有不正確的地方
下文中 代表乘方運算,例如2 3=2 2 2=6,參考: http://zh.wikipedia.org/wiki/%E5%86%AA
%代表模運算,例如5%3=2,參考: http://zh.wikipedia.org/wiki/%E6%A8%A1%E9%99%A4
DH密鑰交換演算法的作用是使通信雙方可以在不安全的通道中建立一個相同的密鑰,用於加密通信。
基本原理示例:
1、通信方A和通信方B約定一個初始數g,g是公開的,如g=5
2、A生成一個隨機數a,a是保密的,如a=6
3、A計算g a發送給B,g a=5^6
4、B生成一個隨機數b,b是保密的,如b=15
5、B計算g b發送給A,g b=5^15
6、A接收到g b後,再使用保密的a,計算(g b) a=g (a b)=5^(6 15)
7、B接收到g a後,再使用保密的b,計算(g a) b=g (a b)=5^(6 15)
8、這樣通信方A和B得到一個相同的「密鑰」g (a*b)=5 (6 15)
整個通信過程中g、g a、g b是公開的,但由於g、a、b都是整數,通過g和g a得到a還是比較容易的,b也是如此,所以最終的「密鑰」g (a b)還是可以被計算出來的。所以實際的過程還需要在基本原理上加入新的計算—— 模運算 :
1、通信方A和通信方B約定一個初始數g,如g=5,一個質數p,如p=23,g和p是公開的
2、A生成一個隨機數a,a是保密的,如a=6
3、A計算g a%p發送給B,g a%p=5^6%23=8
4、B生成一個隨機數b,b是保密的,如b=15
5、B計算g b%p發送給A,g b%p=5^15%23=19
6、A接收到g b%p後,再使用保密的a,計算(g b%p) a%p=19 6%23=2
7、B接收到g a%p後,再使用保密的b,計算(g a%p) b%p=8 15%23=2
8、這樣通信方A和B得到一個相同的密鑰:2
(g b%p) a%p=(g a%p) b%p的證明:
如果a=2:
(g b%p) a%p=(g b%p) 2%p=(g b-n*p) 2%p=(g (2*b)-2*g b n p+(n p) 2)%p=g (2 b)%p
可以看出(g b-n*p) 2展開後除g (2*b)外,其它都是p的倍數,所以整個算式的結果是g (2 b)%p
同理對(g^b-n p) a展開後除g (a b)外,其它都是p的倍數,所以整個算式的結果是g^(a b)%p
同樣可以得出(g a%p) b%p=g^(a b)%p
所以(g b%p) a%p=(g a%p) b%p
整個通信過程中g、p、g a%p、g b%p是公開的,這時通過g、p、g a%p得到a比較難,同樣通過g、p、g b%p得到b比較難,所以最終的密鑰是比較安全的。
以g=5、p=23、g^a%p=8計算a為例,a=log(5, (8+23 n)),這個只能將n的可能值逐個帶入公式試驗才能得到a的值。如果a、p是比較大的數那麼計算更加困難。
如果注意的是,為了防止應用優化演算法計算上述問題, 質數p不是隨便選擇 的,需要符合一定的條件。 隨機數a、b的生成演算法也必需注意 ,應使結果盡可能隨機,不能出現可預測的規律,否則會使破解變的容易。
通過上述計算過程也可以看出DH演算法不僅可以應用在2方通信的情況,如果 多方通信 ,也可以使用該演算法。
DH密鑰交換演算法 無法驗證對方身份 ,所以DH密鑰交換演算法 不能抵禦中間人攻擊 (MITM,Man-in-the-middle attack)。
參考:
wiki: http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
原文鏈接: https://my.oschina.net/u/1382972/blog/330456
㈡ 什麼是dh演算法
DH演算法是一種密鑰交換協議。
DH演算法,全稱為Diffie-Hellman密鑰交換演算法,是一種在公開網路上安全地生成共享密鑰的協議。它是非對稱加密演算法的一種應用,由Whitfield Diffie和Martin Hellman在1976年提出。其核心思想是通過構造一個公開的共享密鑰來確保在不安全的通信環境中,雙方能夠安全地建立一個共享的密鑰,進而確保通信的安全性。這種演算法廣泛應用於網路通信中的密鑰交換場景。
DH演算法的工作原理如下:
DH演算法基於離散對數運算的單向性特點來實現密鑰交換。簡單來說,離散對數是一種特殊的數學運算,它使得從一個數推算出其對應的原始數非常困難。在DH演算法中,雙方各自擁有一個私有密鑰和公開密鑰。演算法通過特定的數學運算規則生成共享密鑰,這個共享密鑰由雙方的公鑰和私有密鑰共同決定。這種密鑰交換協議的特點是,即使通信雙方在網路中是匿名的,也能安全地生成一個共享的密鑰。由於這個密鑰是由雙方共同生成的,所以攻擊者很難預測或竊取這個密鑰。通過這種方式,DH演算法保證了通信的安全性。
DH演算法的應用場景:
DH演算法廣泛應用於各種需要安全通信的場景中,如網路上的數據加密傳輸、身份驗證協議等。特別是在虛擬世界的場景中,網路通信的安全性和隱私保護至關重要。DH演算法提供了一種有效的手段來確保通信雙方在不安全的網路環境中安全地建立共享密鑰,從而確保通信的安全性和隱私保護。此外,由於其強大的安全性表現,DH演算法也被廣泛應用於許多加密貨幣和區塊鏈技術中,以確保交易的安全性和匿名性。
㈢ 簡要介紹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共有一個公鑰基礎設施時,他們可以將他們的返回密鑰進行簽名。
㈣ 什麼是dh演算法
DH組的本質是使用非對稱密鑰來加密對稱密鑰。
DH演算法過程:
1、相互產生密鑰對
2、交換公鑰
3、用對方的公鑰和自己的私鑰運行DH演算法——得到另外一個密鑰X(這里的奇妙之處是這個值兩端都是一樣的)
4、A產生對稱加密密鑰,用密鑰X加密這個對稱的加密密鑰——發送到B
5、B用密鑰X解密——得到對稱的加密密鑰
6、B用這個對稱的加密密鑰來解密A的數據
㈤ 什麼是DH非對稱加密演算法
DH(僅能用於密鑰分配,不能加解密數據)
非對稱加密演算法
特點:
發送方和接收方均有一個密鑰對(公鑰+私鑰),其中公鑰傳播,私鑰自己保存,不需要傳播
私鑰不需要傳播的特性解決了對稱加密演算法中密鑰傳播的困難(這個困難一般通過線下傳遞可以解決)
加密安全性極高,只用於一些電子商務網站,加解密速度遠低於對稱加密
一般情況下,為了解決非對稱加密演算法加解密速度低的問題,採用非對稱加密(使用公鑰+私鑰對對稱加密的密鑰進行加解密)+對稱加密(加解密數據)相結合的方式。
常見演算法:
DH(非對稱加密的基石)
RSA(非對稱加密的經典,除了可用於非對稱加密,也可用於數字簽名,RSA--155(512位密鑰)已被破解)
ElGamal