java-信息安全(八)-迪菲-赫爾曼(DH)密鑰交換【不推薦,推薦Oakley】

概述

信息安全基本概念:git

  • DH(Diffie–Hellman key exchange,迪菲-赫爾曼密鑰交換)

DH

  是一種安全協議,,一種確保共享KEY安全穿越不安全網絡的方法,它是OAKLEY的一個組成部分。github

  這個機制的巧妙在於須要安全通訊的雙方能夠用這個方法肯定對稱密鑰。而後能夠用這個密鑰進行加密和解密。可是注意,這個密鑰交換協議/算法只能用於密鑰的交換,而不能進行消息的加密和解密。雙方肯定要用的密鑰後,要使用其餘對稱密鑰操做加密算法實際加密和解密消息。算法

  Oakley算法是對Diffie-Hellman密鑰交換算法的優化,它保留了後者的優勢,同時克服了其弱點. Oakley算法具備五個重要特徵: 它採用稱爲cookie程序的機制來對抗阻塞攻擊. 它使得雙方可以協商一個全局參數集合. 它使用了現時來保證抵抗重演攻擊. 它可以交換Diffie-Hellman公開密鑰. 它對Diffie-Hellman交換進行鑑別以對抗中間人的攻擊.安全

DH算法具備兩個吸引力的特徵:cookie

  1. 僅當須要時才生成密鑰,減少了將密鑰存儲很長一段時間而導致遭受攻擊的機會;
  2. 除對全局參數的約定外,密鑰交換不須要事先存在的基礎結構;

然而,該技術也存在許多不足:網絡

  1. 沒有提供雙方身份的任何信息;
  2. 計算密集性,所以容易遭受阻塞性攻擊,即對手請求大量的密鑰。受攻擊者花費了相對多的計算資源來求解無用的冪係數而不是在作真正的工做;
  3. 沒辦法防止重演攻擊;
  4. 容易遭受中間人的攻擊。第三方C在和A通訊時扮演B;和B通訊時扮演A。A和B都與C協商了一個密鑰,而後C就能夠監聽和傳遞通訊量。中間人的攻擊按以下進行:
  • B在給A的報文中發送他的公開密鑰YB
  • C截獲並解析該報文。C將B的公鑰保存下來並給A發送報文,該報文具備B的用戶ID但使用C的公鑰YC,但仍按照好像是來自B的樣子被髮送出去。A收到C的報文後,將YC和B的用戶ID存儲在一塊。相似地,C使用YC向B發送好像來自A的報文。
  • B基於私鑰XB和YC計算共享密鑰K1,A基於私鑰XA和YC計算共享密鑰K2,C使用私鑰XC和YB計算K1,並使用XC和YA計算K2
  • 從如今開始,C就能夠轉發A發給B的報文或轉發B發給A的報文,在途中根據須要修改它們的密文。使得A和B都不知道他們在和C共享通訊。

流程分析

  1.甲方構建密鑰對兒,將公鑰公佈給乙方,將私鑰保留;雙方約定數據加密算法;乙方經過甲方公鑰構建密鑰對兒,將公鑰公佈給甲方,將私鑰保留。 優化

  2.甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,而後經過本地密鑰加密數據,發送給乙方加密後的數據;乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,而後經過本地密鑰對數據解密。加密

 

  3.乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,而後經過本地密鑰加密數據,發送給甲方加密後的數據;甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,而後經過本地密鑰對數據解密。 htm

代碼實現 

  代碼地址:https://github.com/bjlhx15/algorithm-sign.gitblog

Oakley算法

是對Diffie-Hellman密鑰交換算法的優化,它保留了後者的優勢,同時克服了其弱點。

Oakley算法具備五個重要特徵:

一、它採用稱爲cookie程序的機制來對抗阻塞攻擊。

二、它使得雙方可以協商一個全局參數集合。

三、它使用了現時來保證抵抗重演攻擊。

四、它可以交換Diffie-Hellman公開密鑰。

五、它對Diffie-Hellman交換進行鑑別以對抗中間人的攻擊。

Oakley可使用三個不一樣的鑑別方法:

一、數字簽名:經過簽署一個相互能夠得到的散列代碼來對交換進行鑑別;每一方都使用本身的私鑰對散列代碼加密。散列代碼是在一些重要參數上生成的,如用戶ID和現時。

二、公開密鑰加密:經過使用發送者的私鑰對諸如ID和現時等參數進行加密來鑑別交換。

三、對稱密鑰加密:經過使用某種共享密鑰對交換參數進行對稱加密,實現交換的鑑別。