20

在典型的 https web 场景中,我对浏览器和服务器之间的 SSL 握手有一点困惑:

到目前为止我所了解的是,在 SSL 握手过程中,客户端(在这种情况下为浏览器)使用公钥(从服务器接收的证书)加密随机选择的对称密钥。这被发送回服务器,服务器使用私钥对其进行解密(对称密钥)。现在在会话的其余部分使用此对称密钥来加密/解密两端的消息。这样做的主要原因之一是使用对称密钥进行更快的加密。

问题

1)浏览器如何选择并生成这个“随机”选择的对称密钥?

2) 开发人员(或/和浏览器用户)是否可以控制这种生成对称密钥的机制?

4

2 回答 2

18

是对 HTTPS 连接建立如何工作的很好的描述。我将总结双方(客户端和服务器)如​​何获取会话密钥,这个过程被称为“密钥协商协议”,这里它是如何工作的:

  1. 客户端生成 48 字节的“pre-master secret”随机值。
  2. 客户端用随机数据填充这些字节以使输入等于 128 字节。
  3. 客户端使用服务器的公钥对其进行加密并将其发送到服务器。
  4. 然后双方通过以下方式生成主密钥:

    master_secret = PRF(
       pre_master_secret, 
       "master secret", 
       ClientHello.random + ServerHello.random
    )
    

PRF 是规范中定义的“伪随机函数”,非常聪明。它使用 MD5 和 SHA-1 哈希函数的密钥哈希消息验证码 (HMAC) 版本结合了秘密、ASCII 标签和我们提供的种子数据。一半的输入被发送到每个散列函数。它很聪明,因为它对攻击具有很强的抵抗力,即使面对 MD5 和 SHA-1 的弱点。这个过程可以自我反馈并永远迭代以生成我们需要的尽可能多的字节。

按照这个过程,我们获得了一个 48 字节的“主密钥”。

于 2010-10-14T18:10:13.300 回答
1

引用网络视频上的一段精彩视频,分钟 1:18:07

那么,由于您的计算机是确定性设备,您从哪里获得计算机上的随机性?

好吧,它收集熵,例如您的鼠标敲击运动、击键运动和硬盘的计时,它试图将来自宇宙的所有随机性收集到一个拉动中,以便它可以为一个连接生成随机密钥 [本次会议] . 如果这种随机性被打破并且在过去 30 年中发生了很多次,那么这一切都行不通。如果对手能猜出你的随机性,那么他们就能猜出你的密钥。所以使用好的随机性。

注意:密钥是按会话创建的。

于 2019-08-05T12:41:07.370 回答