流程如图片 https://user-gold-cdn.xitu.io/2018/5/21/1638197d98cf3281?imageslim
双方交换 random1 和 random2
客户端生成 random3 作为 pre master secret,并通过被签名的可靠公钥加密后传给 server,
这样双方都拿 random1 random2 random3 通过算法各自生成 master secret
在这里,只有 random3 是能够保证不被第三人知道的,为什么公开的 random1 和 random2 有存在的必要?为什么不直接生成 master secret 发过去?
直接发送 master 的情况:我有一个通道发送钥匙 A,可以保证不被中间人解开,但是有可能被替换。如果被替换成钥匙 B,后面的验证过程,只有我知道钥匙 A,你发过来的消息我解不开,中间人也没有钥匙 A 来加密消息欺骗我。我接到假数据一定会报错的,不也是安全的么?
搜索了网上信息对这里基本都是一笔带过的 只有这里的第二个回答提到仅仅是为了增加随机性,是这样的么? https://stackoverflow.com/questions/25258799/in-tls-ssl-whats-the-purpose-of-staging-from-premaster-secret-to-master-secret
1
woodensail 2019-02-12 17:33:13 +08:00
random1 的存在我可以理解,是为了对抗回放攻击。
random2 的作用就不清楚了。也是为了对抗回放? |
2
chairuosen OP @woodensail 回放,有道理。感谢老哥
|
3
Kagari 2019-02-12 17:52:31 +08:00
|
4
alvinbone88 2019-02-12 19:16:11 +08:00
建议先了解 Diffie – Hellman key exchange
|
5
lcdtyph 2019-02-12 20:41:42 +08:00 via iPhone
dh 在 tls 中负责前向安全性吧。
|
6
yurang 2019-02-20 12:21:19 +08:00
- 主密码的计算
- 主密码的计算: - 计算元素:预备主密码、客户端随机数、服务器随机数 - 客户端随机数和服务器随机数的作用相当于防止攻击者事先计算出密钥的盐 - 计算方法:使用基于密码套件中定义的单项散列函数来实现伪随机函数 - 主密码的目的: - 对称密码的密钥(客户端--->服务器) - 对称密码的密钥(客户端<---服务器) - 消息认证码的密钥(客户端--->服务器) - 消息认证码的密钥(客户端<---服务器) - 对称密码的 CBC 模式所使用的初始化向量(客户端--->服务器) - 对称密码的 CBC 模式所使用的初始化向量(客户端<---服务器 ) |