古詩詞大全網 - 藝術簽名 - Diffie-Hellman密鑰協商算法

Diffie-Hellman密鑰協商算法

目前常用的加密算法主要有:哈希算法(如MD5、SHA家族、Hmac)、對稱加密算法(如AES)、非對稱加密算法(RSA)、Diffie-Hellman密鑰協商算法等。這些算法都有各自的特點,適用於不同的場景。這裏只是簡單介紹壹下。如果想了解更多,網上資料很多,可以自己去查相關資料。

各種算法的特點:

哈希算法:快進,不可逆,即加密後很難解密明文。通常用於數據加密和數據驗證。

對稱加密算法:AES是壹種常用的對稱加密算法,其特點是加密和解密使用相同的密鑰。

非對稱加密算法RSA:RSA算法是壹種非對稱加密算法。由私鑰和公鑰組成的密鑰對由私鑰加密,由公鑰解密,或者由公鑰加密,由私鑰解密。其中,公鑰可以公開,私鑰必須保密。

Diffie-Hellman密鑰協商算法:Diffie-Hellman是壹種密鑰協商算法(簡稱DH算法),DH算法基於壹種數學原理,可以在不泄露密鑰的情況下協商出壹個密鑰。

在從客戶端向服務器發送數據的過程中,如果是重要數據(如密碼、敏感數據等。),發送前壹般需要在客戶端加密,服務器接收後解密得到原始數據。(服務器向客戶端返回數據也是如此。)

假設客戶端和服務器使用AES(對稱加密算法)來加密和解密傳輸的數據。AES加密算法的壹個特點是加密和解密都使用同壹個密鑰(這裏稱為secretKey),所以雙方都使用secretKey對數據進行加密和解密。

所以客戶端第壹次向服務器傳輸數據時,需要從服務器獲取secretKey並保存在客戶端,而這個直接從服務器獲取明文secretKey的過程很容易被第三方截獲,也就是說這個過程是不安全的。(哈哈,除非服務器把secretKey寫在紙上偷偷交給客戶端)

因此,客戶端從服務器獲取secretKey的過程也需要加密。

那麽,服務器需要做什麽來安全地將secretKey交付給客戶機呢?

目前常用的方法有RSA或Diffie-Hellman。

RSA有公鑰和私鑰,公鑰允許公開,私鑰保留。RSA的關鍵點是,用公鑰加密的數據需要用私鑰解密,用私鑰加密的數據需要用公鑰解密。所以,比如這個時候,客戶端把公鑰發送給服務器,服務器用客戶端的公鑰加密secretKey,那麽只有客戶端的私鑰才能解鎖這個加密的secretKey數據。即使第三方拿到了這些數據,除非能拿到客戶端的私鑰,否則也無法解密。

因此,通過RSA,服務器可以安全地將secretKey交付給客戶端。(不過RSA也有安全漏洞,叫做中間人攻擊。因為篇幅原因,這裏就不說了!大家自己百度。)

RSA雖然可以安全傳輸secretKey,但麻煩的是需要生成壹對公鑰和私鑰並將公鑰發送給對方,加解密速度慢。因此引入了第二種類型:Diffie-Hellman密鑰協商算法。

嚴格來說,DH算法其實並不是加密算法,因為它本身並不是用來加密的。我的理解是用於雙方協商計算,即雙方按照某個合同進行計算,從而計算出相同的結果。

原理如下:

第壹步:初始化

比如服務器現在提供兩個隨機公鑰數(public允許):pubN=10,modN = 3;

客戶端生成壹個隨機私鑰數(不公開,服務器不知道):cPrivN = 2;

服務器還生成壹個隨機的私鑰數(不公開,客戶端不知道):sPrivN = 4;

第二步:客戶端和服務器端分別基於同壹個數學公式進行計算,計算結果稱為公鑰結果:pubResult。

客戶端進行數學計算:CPU b result = PUBN * CPRIVN % MODN = 10 * 2% 3 = 2;(計算結果允許公開)

服務器進行數學計算:spubresult = pubn * Sprivn % MODN = 10 * 4% 3 = 1;(計算結果允許公開)

客戶端和服務器交換公鑰結果,客戶端得到sPubResult=1,服務器得到cPubResult=2。

第三步:協商壹致的密鑰號:keyN(客戶端和服務器獲得的結果是相同的)

客戶端:ckeyn = spubresult * cprivn % MODN = 1 * 2% 3 = 2;

server:skeyn = CPU b result * spritvn % modn = 2 * 4% 3 = 2;

到目前為止,雙方都協商好了密鑰,而且是壹致的。但是,妳見過key是#類型的嗎?可能沒有,所以需要第四步來生成壹個更長的密鑰。

步驟4:散列密鑰號以生成密鑰串。