-
國標文件涉及密鑰協商算法的函數
- 生成密鑰協商參數并輸出
- 計算會話密鑰
- 產生協商數據并且計算會話密鑰
密鑰協商(交換)算法及其原理
密鑰交換/協商目的
- “密鑰協商機制”是:(在身份認證的前提下)規避【偷窺】的風險。通俗地說,即使有攻擊者在偷窺客戶端與服務器的網絡傳輸,客戶端(client)依然可以利用“密鑰協商機制”與服務器端(server)協商出一個只有二者可知的用來對于應用層數據進行加密的密鑰(也稱“會話密鑰”)。
密鑰交換/協商機制的幾種類型
1,依靠非對稱加密算法
原理:
- 拿到公鑰的一方先生成隨機的會話密鑰,然后利用公鑰加密它,再把加密結果發給對方,對方用私鑰解密;于是雙方都得到了會話密鑰。
舉例:
- RSA、SM2
秘鑰協商/交換步驟:
- 客戶端連上服務端
- 服務端發送 CA 證書給客戶端
- 客戶端驗證該證書的可靠性
- 客戶端從 CA 證書中取出公鑰
- 客戶端生成一個隨機密鑰 k,并用這個公鑰加密得到 k’
- 客戶端把 k’ 發送給服務端
- 服務端收到 k’ 后用自己的私鑰解密得到 k,此時雙方都得到了密鑰 k,協商完成。
例子:
- RSA的秘鑰協商流程
- SM2的秘鑰協商流程
- 參考鏈接:SM2密鑰協商流程 - 百度文庫
2,依靠專門的密鑰交換算法
簡介:
- DH 算法又稱“Diffie–Hellman 算法”,它可以做到“通訊雙方在完全沒有對方任何預先信息的條件下通過不安全信道創建起一個密鑰”, 即通訊雙方事先不需要有共享的秘密。而且,使用該算法協商密碼,即使協商過程中被別人全程偷窺(比如“網絡嗅探”),偷窺者也無法知道最終協商得出的密鑰結果。
缺點:
- 此算法不支持認證,雖然可以抵抗偷窺但是無法抵抗篡改,無法對抗中間人攻擊。一般此算法會配合其余的簽名算法搭配使用,比如RSA、DSA算法。
例子:
- Alice和Bob約定使用一個模 p = 23和g = 5
- Alice選擇一個保密的整數 a = 4作為私鑰,計算出公鑰 A = g^a mod p,將公鑰A發送給Bob;A = 5^4 mod 23 = 4
- Bob選在一個保密的整數 b = 3,計算出公鑰 B = g^b mod p,將公鑰B發送給Alice;
- B = 5^3 mod 23 = 10
- Alice 計算出共享密鑰 ?s = B^a mod p ??s = 10^4 mod 23 = 18
- Bob 計算共享密鑰 ???s = A^b mod p ??s = 4^3 mod 23 = 18
- Alice和Bob現在就共享一個密鑰(s = 18)
優勢:
- 通信雙方分別計算出來的 k 必定是一致的
- 通信雙方都無法根據已知的數來推算出對方的私鑰
- 對于一個旁觀者(偷窺者),雖然能看到 p,g,A,B,但是無法推算出 a 和 b(旁觀者無法推算出雙方的私鑰),自然也無法推算出 k
注意事項:
- p 必須是質數且足夠大(至少300位)
- a,b 也要足夠大(至少100位),且必須是隨機生成。
- g 必須是質數,不需要很大,比如 2 或 3 或 5 都可以。g 如果太大并不能顯著提升安全性,反而會影響性能。
步驟:
- 客戶端連接上服務器;
- 服務器端生成一個隨機數S作為自己的私鑰,做模冪運算之后,得到公鑰;
- 服務器,選擇RSA,ECDSA,DSA的一種,對模冪運算的參數,以及公鑰進行簽名,并發送給客戶端; 防止服務器被篡改
- 客戶端驗證簽名是否有效; 客戶端并不會對簽名進行解密,DH的特性,雙方只交換公鑰,只做加密操作;
- 客戶端也產生一個隨機數C,加密之后,將公鑰傳給服務器;
- 客戶和服務器,根據得到的公鑰產生同一個會話密鑰;
3,依靠通訊雙方事先已經共享的“秘密”
簡介:
- 既然雙方已經有共享的秘密(這個“秘密”可能已經是一個密鑰,也可能只是某個密碼/password),只需要根據某種生成算法,就可以讓雙方產生相同的密鑰(并且密鑰長度可以任意指定)
- PSK 即“Pre-Shared Key”的縮寫,就是預先讓通信雙方共享一些秘鑰,這些秘鑰通常是對稱加密的秘鑰,所謂的預先是指這些秘鑰在雙方尚未構建TSL協議之前,就已經部署在雙方的系統之內了。
優勢:
- 不需要依賴公鑰體系,不需要部屬 CA 證書。不需要涉及非對稱加密,TLS 協議握手(初始化)時的性能好于前述的 RSA 和 DH。
步驟:
- 在通訊之前,通訊雙方已經預先部署了若干個共享的密鑰。為了標識多個密鑰,給每一個密鑰定義一個唯一的 ID。協商的過程很簡單:客戶端把自己選好的密鑰的 ID 告訴服務端。如果服務端在自己的密鑰池子中找到這個 ID,就用對應的密鑰與客戶端通訊,否則就報錯并中斷連接。
參考鏈接:
- 密鑰交換(密鑰協商)算法及其原理 - Yungyu - 博客園
- Diffie–Hellman key exchange DH密鑰協商_詹天佐的博客-CSDN博客
- 密鑰協商機制 - 簡書
- Diffie-Hellman密鑰協商算法 - Qcer - 博客園
- https://wenku.baidu.com/view/a953fa07de80d4d8d15a4f0d.html#
- HTTPS 溫故知新(三) —— 直觀感受 TLS 握手流程(上)
- Diffie-Hellman密鑰協商算法 - Qcer - 博客園