RSA算法

客户端回合

Client Hello

  • 客户端使用的TLS版本
  • 支持的密码套件列表
  • 随机数(Client Random)

服务器回合

Server Hello

  • 确认TLS版本号是否支持
  • 选择一个密码套件
  • 随机数(Server Random)

Server Certificate

数字证书:

  • 公钥
  • 持有者信息
  • 证书认证机构(CA)的信息
  • CA对这份文件的数字签名及使用的算法
  • 证书的有效期
  • 还有一些其他额外信息

Server Hello Done

客户端回合

Client Key Exchange

  • 用服务器公钥加密过的随机数(pre-master)

其中公钥可以在服务器发回来的证书中找到,pre-master由客户端自己随机生成

中场休息

现在回顾一下服务器和客户端双方现在都拥有什么。省去TLS版本号确认、加密套件选择的环节,双方分别交换了各自生成的随机数Client Random和Server Random,还有pre-master。pre-master是通过非对称加密的方式来交换的,客户端生成pre-master后使用公钥加密,服务器接收到后使用私钥解密出pre-master。

所以,至此,双方都拥有Client Random、Server Random和pre-master这三样东西,前两者是明文传送,可以被截获,最后一个pre-master则是采用非对称加密传送,即使截获也没意义。

其实只需要通过非对称加密pre-master就能完成协商,但是

不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。对于RSA密钥交换算法来说,pre-master secret本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。pre-master secret的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre-master secret就有可能被猜出来,那么仅适用pre-master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre-master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。

双方根据都拥有的三个随机数来生成会话密钥(Master Secret),用于后续的对称加密会话。

客户端回合

Change Cipher Spec

告诉服务器开始使用加密方式发送消息


Encrypted Handshake Message(Finished)

把之前所有发送的数据做个摘要,再用会话密钥(master secret)加密一下,让服务器做个验证,验证加密通信是否可用和之前握手信息是否有被中途篡改过。

  • 确认会话密钥的正确性
  • 告诉对方在整个过程中发送了什么,接收了什么(防止中间人篡改报文)

如果中间有人篡改了报文(中间人攻击),比如,把客户端的client hello中的提供的加密套件改成了 一个弱秘钥算法,那么对于server而言,收到的client hello 和 客户端实际发送的是不同的,假设server收到的叫做client_hello_bad,这样,server 在计算Encrypted handshake message时,因为使用了client_hello_bad,计算完成之后,会发送给客户端,客户端为了确定握手数据是否被篡改,也需要模拟server端计算这个Encrypted handshake message,显然 客户端 计算 Encrypted handshake message 用的client hello 不是client_hello_bad,这样,客户端计算出来的,就和 服务端发过来的不同了,验证自然失败。

服务器回合

Change Cipher Spec


Encrypted Handshake Message(Finished)

结束握手

如果双方都验证加密和解密没问题,那么握手正式完成。最后,就用「会话密钥」加解密 HTTP 请求和响应了。

其中的数学原理

  • 分解质因数很难(其实还有超多原理)
  • 欧拉函数
  • 欧拉定理
  • 模反元素
  • 同余定理

参考链接:

RSA算法原理(一) - 阮一峰的网络日志

RSA算法原理(二) - 阮一峰的网络日志

posted @ 2023-02-22 22:20  roadwide  阅读(51)  评论(0编辑  收藏  举报