密钥交换
复习
- 公钥、私钥与数字签名:一对密钥,公钥可公开
- 窃听与对称加密:对称加密需要共享密钥
- 篡改与消息认证:保证消息未被改动
TL;DR
- 双方希望建立一把只有彼此知道的会话密钥
- 密钥交换让双方在公开信道上协商出共享密钥
- 即使全程被窃听,攻击者也推不出这把密钥
- 协商出的密钥,用于之后的对称加密
正文
我们已经有了对称加密(快)和非对称加密(能解决密钥分发)。可怎样让双方真正建立起一把共享的会话密钥,又不被偷听者得到?
这就是密钥交换(key exchange)要解决的问题。
在明处,协商出秘密
听上去有点矛盾:在众目睽睽的信道上,两个人怎么商量出一个只有他们知道的秘密?
有个直观的类比——混合颜色。假设双方各自选一种私密颜色,谁都不告诉别人:
- 各自把私密颜色,和一种公开的公共颜色混在一起,得到“混合色”发出去
- 每个人收到对方的混合色后,再把自己的私密颜色混进去
- 结果,双方得到的是同一种颜色:
自己的私密色 + 对方的混合色
偷听者虽然看到了两种混合色和公共色,却没法倒推出私密颜色——因为“混合”这个操作是不可逆的。于是,双方共享了一个秘密,而窃听者只能干瞪眼。
中间人:还差一步
可是,纯密钥交换还有一个漏洞:中间人攻击。
如果攻击者能拦截双方的通信,他可以分别和两边各自交换一次密钥,冒充对方。结果,双方以为在和彼此通话,实际上各自都在和中间人通话,而中间人左右转达、顺便偷看。
问题出在哪?出在双方无法确认对方到底是谁。密钥交换本身不能证明身份。要挡住中间人,就必须把“身份”绑进来——这正是证书要完成的任务。
所以密钥交换解决了“怎样协商秘密”,却没解决“和谁协商”。下一章,我们看看证书怎样补上这一环。
思考题 1
密钥交换为什么能在“有人偷听”的情况下仍然安全?
思考题 2
单纯的密钥交换为什么还挡不住中间人攻击?
小结
知识点
- 密钥交换在公开信道上协商共享密钥
- 窃听者无法从公开信息推出该密钥
- 纯密钥交换无法确认对方身份
- 中间人攻击需要靠身份认证来防范
参考资料
- Wikipedia(zh):密钥交换:双方协商共享密钥的过程
- Wikipedia(zh):迪菲-赫尔曼密钥交换:在公开信道上协商共享密钥的方法
思考题答案(仅供参考)
思考题 1
因为双方交换的是经过“不可逆变换”后的信息,窃听者虽然能看到全部公开内容,却无法从中倒推出各自的私密部分,也就无法算出双方最终共享的密钥。
思考题 2
因为纯密钥交换不能证明对方的身份。攻击者可以分别与两边各协商一把密钥,冒充双方彼此通信,从而在中间转发并窃听。要挡住它,必须用证书等手段确认对方确实是他所声称的身份。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪