在典型的https网络方案中,我对浏览器和服务器之间的SSL握手有一点混淆:
到目前为止我所理解的是,在SSL握手过程中,客户端(在这种情况下是浏览器)使用公钥(从服务器接收的证书)加密随机选择的对称密钥。这被发送回服务器,服务器用私钥解密它(对称密钥)。现在,在会话的剩余时间使用此对称密钥来加密/解密两端的消息。这样做的一个主要原因是使用对称密钥加速加密。
问题 1)浏览器如何选择并生成这个“随机”选择的对称密钥?
2)开发人员(或/和浏览器用户)是否可以控制这种生成对称密钥的机制?
答案 0 :(得分:12)
Here是对HTTPS连接建立如何工作的非常好的描述。我将概述双方(客户端和服务器)如何获取会话密钥的摘要,此过程称为“密钥协商协议”,此处如何工作:
然后双方以下列方式制作主密钥:
master_secret = PRF(
pre_master_secret,
"master secret",
ClientHello.random + ServerHello.random
)
PRF是“伪随机函数”,也在其中定义 规范,非常聪明。它结合了秘密,ASCII标签和 我们使用keyed-Hash Message给出的种子数据 MD5和SHA-1哈希的身份验证代码(HMAC)版本 功能。输入的一半被发送到每个散列函数。它的 聪明,因为它非常抵抗攻击,即使面对 MD5和SHA-1的弱点。这个过程可以反馈自己和 永远迭代以生成我们需要的字节数。
按照这个程序,我们得到一个48字节的“主秘密”。
答案 1 :(得分:0)
引用这段精彩的网络视频录像minute 1:18:07
好吧,您的计算机在哪里出现随机性,因为您的 计算机是确定性设备吗?
好吧,它可以收集熵,例如您的鼠标笔触运动,您的按键 笔触运动和硬盘定时,它试图收集 从宇宙中获得的所有随机性都吸引了出来,以便它可以仅为一个连接[此会话] 生成随机密钥。如果这种随机性被打破并且发生了很多次 在过去的30年中,这些都不起作用。如果对手可以 弄清楚您的随机性是多少,然后他们就可以猜出您的钥匙了。因此,请使用良好的随机性。
注意:密钥是每个会话创建的。