在互联网上传输共享密钥都会遇到这个问题,怎么能让对方安全地拿到密钥而不会被拦截到呢?
主要有三种解决方式:
- 公钥机制
- Diffie-Hellman
- 密钥分配中心
...
下面将详细讲解这些解决方案,如何安全地将秘钥配送到目的地。
公钥机制
非对称加密:使用公钥加密、私钥解密,避免直接传输共享密钥。
流程:
-
接收方生成密钥对:接收方生成公私钥对,公钥公开,私钥保密。
-
发送方加密共享密钥:发送方用接收方的公钥加密共享密钥(如 AES 密钥)。
-
传输加密的共享密钥:将加密后的共享密钥发送给接收方。
-
接收方解密:接收方用自己的私钥解密,获得共享密钥。
Diffie-Hellman
数学原理:基于离散对数问题,双方通过公开交换参数生成共享密钥,无需传输密钥本身。
密钥分配中心——KDC
可信第三方:通过一个中心化的权威机构(密钥分配中心——Key Distribution Center, KDC)为通信双方分配临时会话密钥。

密钥分配流程(以 Kerberos 协议为例)
角色:
- 用户A:想与服务B通信。
- KDC:密钥分配中心,存储所有用户和服务的长期密钥。
步骤1:用户A向KDC证明身份
- 用户A登录:输入账号密码。
- 生成临时请求:
- 用户A向KDC发送明文请求:“我是A,想联系B”。
- 未加密传输:此步骤仅声明意图,不含敏感信息。
步骤2-3:KDC生成「会话密钥」和「票据」
- 验证用户A身份:
- KDC用A的密码生成长期密钥(如通过哈希计算),解密A的历史认证数据(若密码正确)。
- 创建会话密钥:
- KDC生成一个临时会话密钥 $ ( K_{AB} ) $ (仅本次通信使用)。
- 加密并打包:
- 用户A的包:用A的长期密钥加密 $ ( K_{AB} ) $ 和服务B的地址。
- 服务B的票据:用服务B的长期密钥加密 $ ( K_{AB} ) $ 和用户A的信息。
步骤4:用户A获取会话密钥和票据
- 接收KDC的回复:
- 用户A收到两个加密包:
- 包1:用A的密码解密后得到 $ ( K_{AB} ) $ 和B的地址。
- 包2(票据):无法解密(用B的密钥加密),需直接转发给B。
- 用户A收到两个加密包:
步骤5:用户A联系服务B
- 发送票据和认证信息:
- 用户A将票据和一条用 $ ( K_{AB} ) $ 加密的时间戳发送给B。
- 服务B解密票据:
- B用自己的长期密钥解密票据,获得 $ ( K_{AB} ) $ 和用户A的信息。
- 验证时间戳:
- B用 $ ( K_{AB} ) $ 解密时间戳,确认请求是新鲜的(防止重放攻击)。
步骤6:双方安全通信
- 用户A和服务B 使用临时会话密钥 $ ( K_{AB} ) $ 加密后续所有通信。
- 会话结束后: $ ( K_{AB} ) $ 被丢弃,下次通信生成新密钥。
浙公网安备 33010602011771号