密钥交换(Key Exchange)是通信双方在可能被监听的信道上协商出共享秘密的过程,常用于后续 对称加密 的会话密钥建立。
核心问题
对称加密需要双方先有同一把密钥,但开放网络无法假设双方已经安全共享秘密。密钥交换解决的是“如何在攻击者能监听网络的情况下,让双方得到同一个秘密,而监听者得不到”的问题。
核心机制
典型的 Diffie-Hellman 思路是:双方各自生成私有随机数,并交换对应的公开值。以简化形式表示:
发送方持有私有值 a,接收方持有私有值 b。交换 A 和 B 后,双方都能计算:
监听者只看到 g、p、A、B,在困难问题成立时无法有效恢复共享秘密 s。实际协议会把 s 输入 KDF,派生出加密密钥、认证密钥和方向隔离密钥。
现代系统常用 ECDH 或 X25519;如果每次连接都使用临时密钥,还能提供前向保密。
工程用途
- TLS / HTTPS:建立会话密钥,再用对称算法保护 HTTP 流量。
- SSH 和 VPN:登录或隧道建立阶段协商会话密钥。
- 端到端加密:通信双方协商临时密钥或链式派生消息密钥。
- 设备接入:设备和平台建立安全通道时协商短期会话密钥。
边界与常见坑
- 密钥交换不是加密数据本身:它只产出共享秘密,后续还要用 认证加密 保护数据。
- 未认证的 DH 会被中间人攻击:攻击者可以分别和双方交换密钥,转发并篡改通信。
- 公钥认证不能省:需要证书、预共享公钥、签名或带外指纹确认。
- 前向保密依赖临时密钥:长期静态密钥一旦泄露,历史会话可能被解密。
- 不要直接使用原始共享秘密:应通过 KDF 派生密钥,并绑定上下文、双方身份和协议参数。