浏览器如何在SSL握手期间生成对称密钥

时间:2010-10-14 17:57:12

标签: ssl browser-security

在典型的https网络方案中,我对浏览器和服务器之间的SSL握手有一点混淆:

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

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

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

2 个答案:

答案 0 :(得分:12)

Here是对HTTPS连接建立如何工作的非常好的描述。我将概述双方(客户端和服务器)如​​何获取会话密钥的摘要,此过程称为“密钥协商协议”,此处如何工作:

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

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

    PRF是“伪随机函数”,也在其中定义   规范,非常聪明。它结合了秘密,ASCII标签和   我们使用keyed-Hash Message给出的种子数据   MD5和SHA-1哈希的身份验证代码(HMAC)版本   功能。输入的一半被发送到每个散列函数。它的   聪明,因为它非常抵抗攻击,即使面对   MD5和SHA-1的弱点。这个过程可以反馈自己和   永远迭代以生成我们需要的字节数。

         

    按照这个程序,我们得到一个48字节的“主秘密”。

答案 1 :(得分:0)

引用这段精彩的网络视频录像minute 1:18:07

  

好吧,您的计算机在哪里出现随机性,因为您的   计算机是确定性设备吗?

     

好吧,它可以收集熵,例如您的鼠标笔触运动,您的按键   笔触运动和硬盘定时,它试图收集   从宇宙中获得的所有随机性都吸引了出来,以便它可以仅为一个连接[此会话] 生成随机密钥。如果这种随机性被打破并且发生了很多次   在过去的30年中,这些都不起作用。如果对手可以   弄清楚您的随机性是多少,然后他们就可以猜出您的钥匙了。因此,请使用良好的随机性。

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