浏览器如何在SSL握手期间生成对称密钥
在典型的https web场景中,我对浏览器和服务器之间的SSL握手有一点困惑:
到目前为止,我所理解的是,在SSL握手过程中,客户端(本例中为浏览器)使用公钥(从服务器接收到的证书)对随机选择的对称密钥进行加密。 这被发送回服务器,服务器用私钥解密它(对称密钥)。 此对称密钥现在在会话的其余部分用于加密/解密两端的消息。 这样做的主要原因之一是使用对称密钥更快的加密。
问题 1)浏览器如何挑选并生成这个“随机”选择的对称密钥?
2)开发人员(或/和浏览器用户)是否可以控制这种生成对称密钥的机制?
HTTPS连接建立的工作原理如下。 我将提供会话密钥如何被双方(客户端和服务器)获得的摘要,这个过程被称为“密钥协议协议”,在这里它是如何工作的:
然后主密钥由双方按以下方式生成:
master_secret = PRF(
pre_master_secret,
"master secret",
ClientHello.random + ServerHello.random
)
PRF是在规范中定义的“伪随机函数”,非常聪明。 它通过使用MD5和SHA-1哈希函数的密钥哈希消息验证代码(HMAC)版本,将秘密,ASCII标签和我们给出的种子数据结合起来。 一半的输入被发送到每个散列函数。 它很聪明,因为即使面对MD5和SHA-1的弱点,它也能抵抗攻击。 这个过程可以反馈自己并永久迭代以生成尽可能多的字节。
按照这个程序,我们获得一个48字节的“主密钥”。
链接地址: http://www.djcxy.com/p/21799.html上一篇: How does browser generate symmetric key during SSL handshake