在互聯(lián)網(wǎng)上傳輸共享密鑰都會遇到這個問題,怎么能讓對方安全地拿到密鑰而不會被攔截到呢?
主要有三種解決方式:
- 公鑰機制
- Diffie-Hellman
- 密鑰分配中心
...
下面將詳細講解這些解決方案,如何安全地將秘鑰配送到目的地。
公鑰機制
非對稱加密:使用公鑰加密、私鑰解密,避免直接傳輸共享密鑰。
流程:
-
接收方生成密鑰對:接收方生成公私鑰對,公鑰公開,私鑰保密。
-
發(fā)送方加密共享密鑰:發(fā)送方用接收方的公鑰加密共享密鑰(如 AES 密鑰)。
-
傳輸加密的共享密鑰:將加密后的共享密鑰發(fā)送給接收方。
-
接收方解密:接收方用自己的私鑰解密,獲得共享密鑰。
Diffie-Hellman
數(shù)學(xué)原理:基于離散對數(shù)問題,雙方通過公開交換參數(shù)生成共享密鑰,無需傳輸密鑰本身。
密鑰分配中心——KDC
可信第三方:通過一個中心化的權(quán)威機構(gòu)(密鑰分配中心——Key Distribution Center, KDC)為通信雙方分配臨時會話密鑰。

密鑰分配流程(以 Kerberos 協(xié)議為例)
角色:
- 用戶A:想與服務(wù)B通信。
- KDC:密鑰分配中心,存儲所有用戶和服務(wù)的長期密鑰。
步驟1:用戶A向KDC證明身份
- 用戶A登錄:輸入賬號密碼。
- 生成臨時請求:
- 用戶A向KDC發(fā)送明文請求:“我是A,想聯(lián)系B”。
- 未加密傳輸:此步驟僅聲明意圖,不含敏感信息。
步驟2-3:KDC生成「會話密鑰」和「票據(jù)」
- 驗證用戶A身份:
- KDC用A的密碼生成長期密鑰(如通過哈希計算),解密A的歷史認證數(shù)據(jù)(若密碼正確)。
- 創(chuàng)建會話密鑰:
- KDC生成一個臨時會話密鑰 $ ( K_{AB} ) $ (僅本次通信使用)。
- 加密并打包:
- 用戶A的包:用A的長期密鑰加密 $ ( K_{AB} ) $ 和服務(wù)B的地址。
- 服務(wù)B的票據(jù):用服務(wù)B的長期密鑰加密 $ ( K_{AB} ) $ 和用戶A的信息。
步驟4:用戶A獲取會話密鑰和票據(jù)
- 接收KDC的回復(fù):
- 用戶A收到兩個加密包:
- 包1:用A的密碼解密后得到 $ ( K_{AB} ) $ 和B的地址。
- 包2(票據(jù)):無法解密(用B的密鑰加密),需直接轉(zhuǎn)發(fā)給B。
- 用戶A收到兩個加密包:
步驟5:用戶A聯(lián)系服務(wù)B
- 發(fā)送票據(jù)和認證信息:
- 用戶A將票據(jù)和一條用 $ ( K_{AB} ) $ 加密的時間戳發(fā)送給B。
- 服務(wù)B解密票據(jù):
- B用自己的長期密鑰解密票據(jù),獲得 $ ( K_{AB} ) $ 和用戶A的信息。
- 驗證時間戳:
- B用 $ ( K_{AB} ) $ 解密時間戳,確認請求是新鮮的(防止重放攻擊)。
步驟6:雙方安全通信
- 用戶A和服務(wù)B 使用臨時會話密鑰 $ ( K_{AB} ) $ 加密后續(xù)所有通信。
- 會話結(jié)束后: $ ( K_{AB} ) $ 被丟棄,下次通信生成新密鑰。
浙公網(wǎng)安備 33010602011771號