在 SSL 中,客户端从自身和服务器的随机数据中生成预主密钥。然后它使用服务器的公钥对其进行加密,将其发送到服务器,然后客户端和服务器都由此生成一个主密钥。
为什么不让客户端生成主密钥并将其发送到服务器?
我最初的猜测是防止主机密以任何形状或形式越过电线。但是,如果中间人观察到整个握手过程(因此知道所使用的密码以及客户端和服务器)。
在 SSL 中,客户端从自身和服务器的随机数据中生成预主密钥。然后它使用服务器的公钥对其进行加密,将其发送到服务器,然后客户端和服务器都由此生成一个主密钥。
为什么不让客户端生成主密钥并将其发送到服务器?
我最初的猜测是防止主机密以任何形状或形式越过电线。但是,如果中间人观察到整个握手过程(因此知道所使用的密码以及客户端和服务器)。
预主密钥的要点是主密钥具有统一的格式(例如,这有助于在多个前端之间共享会话参数)。SSL 是通用的:它支持多种密钥交换算法,特别是 RSA 非对称加密和各种Diffie-Hellman变体。所有这些方法都不会产生相同大小和格式的“共享秘密”。值得注意的是,使用 DH,您可以在任何工作组中获得一个组元素,它可以是椭圆曲线或其他东西;共享密钥作为二进制字符串有些偏颇,并且不是由客户端选择的。
定义密钥交换机制产生预主密钥(具有从实际密钥交换机制派生的特征),以散列成主密钥,从而允许更好的模块化。