前言

在学习研究TLS中的一些问题,会不断补充

正文

TLS1.2:

  • 为什么不直接使用premaster secret生成session key呢?

    因为premaster secret的格式不同,rsa是48位,ecc类基于具体算法,我们想要得到固定格式的熵源,所以利用PRF函数计算出master secret,并且保证secret的随机性不仅仅受单一方影响,比如rsa做秘钥交换时仅仅是客户端发送48字节的值

  • 为什么不直接使用master secret加密呢?

    长度不够;利用主密钥生成会话密钥会让攻击者进行计算破解难度更大

  • 为什么需要Client Random和Server Random,为什么不直接只用premaster secret?

    不单方面信任随机数生成,增强随机性,来减小可能猜出premaster secret的可能

  • 为什么PRF函数要用这种函数A()模式?

    递归的方式,保证了无限拓展,并且结合seed和secret保证相关性来生成(这个是我自己的推测,不一定正确)

  • 为什么需要客户单需要一个CertificateVerify消息,而服务端不需要呢?

    因为无法确认拥有私钥,比如我随便拿一个ca认证过的客户端证书,那为什么服务端不需要显示表明拥有私钥呢,因为证书的域名和url是绑定的,假如随便使用另一个ca认证的公钥,会因为证书和域名不同而暴露

    那为什么tls1.3又添加了服务端certificateverify呢,我个人理解是为了加强安全性,显示进行私钥持有认证,强化身份认证和防篡改。

  • 为什么需要Finished消息?

    对握手消息以及计算出的密钥进行认证

TLS1.3:

  • HKDF函数比PRF函数的优点在哪里?

    先Extract再Expand,因为密钥材料可能不是分布均匀的,不够随机,通过extract阶段来提升密钥材料的随机性

  • 为什么会有0-RTT安全问题?

    1.3中0RTT模式生成加密key和iv时只用到了psk和client random没有server random所以存在重放攻击问题

总结

这个FAQ会不断总结,然后更新。