在這個越來越不安全的網絡環境中,要想保證兩個節點間通信中的數據是安全的,通常需要混合使用公開密鑰算法(非對稱加密算法)來進行密鑰交換,然後使用對稱加密算法將數據加密,使用單向散列函數生成數據指紋,使用簽名算法生成數據簽名,然後一起將加密數據,數據指紋,數據簽名一起發送給對方。 本文介紹一種不使用公開密鑰算法來進行密鑰交換的方法。
假設通信雙方爲A和B, 方法中x爲隨機數,y爲需要交換的n位加密密鑰,n是固定值
1、A 使用隨機數算法,生成x, 生成n位密鑰y, 使用y對x進行對稱加密生成密文Sx
2、A重複步驟1 執行m次,生成m個Sx。 因爲x是隨機生成的,所以m個x,y,Sx都是不一樣的
3、A將m個x,Sx 發送給B
4、B從m個x,Sx中隨機選擇一對,然後進行窮舉破解,破解出y。
5、B將選中的x發送給A。此時A 與 B都知道了密鑰y。之後使用y加密數據進行通信即可。
此方法的可行性主要在單次窮舉破解的複雜性以及消息的數量m。 破解的複雜度太高不行,消息的數量m太少也不行。
當然,上述方法還存在其他問題,比如如果在第3步,第5步數據被截獲,雖然通過第3步暫時無法破解具體的x,y,但是第5步是可以破解x,y的。 如果在後續的通信中,僅使用y對數據加密,也存在數據完整性和防抵賴方面的問題。
有一種情況是比較適合使用此方式的。就是雙方在不知道對方公鑰的情況下,可以依賴此方式進行安全的密鑰交換和公鑰分發以及安全通信。
1、上述步驟1,2不變。
2、A將m個x,Sx,Pxa發送給B,其中Pxa爲 使用y加密Pa的結果,Pa爲A的公鑰;
3、B隨機選擇一個暴力破解出y,同時也知道了Pa;
4、B使用Pa加密x,使用y加密Pb發送給A;
5、A收到使用私鑰解開x,則知道了y,使用y可以知道Pb。至此,A,B都知道y,以及對方的公鑰;
從安全性上,即使第2步,第4步中,即使數據包被截獲,攻擊者也無法從m個x,Sx中破解出來需要的y,也無法知道各自的公鑰。
以上方案其實還解決了另一個問題,就是公鑰的分發問題。現在常用的公鑰分發都是先將公鑰存儲在集中的數據庫中,然後到數據庫中獲取對應的公鑰,但是由於事前用戶並不知道需要跟誰通信,因此就必須保證用戶計算機與數據庫服務器是連通的。
THE END!