版本发展
SSL1.0>SSL2.0>SSL3.0>TLS1.0>TLS1.1>TLS1.2>TLS1.3
作用
保证数据传输中的
1:数据保密性(加密明文,别人看不见)
2:数据完整性(保证数据不被篡改)
3:身份认证(标识数据的发送方)
相关数学工具
对称加密
加密和解密使用的是同一密钥。用来做数据保密性。缺点在于需要一个传输密钥的安全信道。
由于对称加密的速度快,通常使用非对称加密来传输一个对称密钥,使用对称密钥加密通信数据。
非对称加密
加密和解密使用的不是同一个密钥,分两种
1:RSA:公私钥系统,用于身份认证,密钥交换。
RSA算法.png
身份认证就是使用私钥加密一个信息的摘要,只用对应公钥才能加密出。
密钥交换就是公钥加密一个对称密钥,只用私钥持有者才能拿到对称密钥。
2:DH:用于密钥协商。注意协商和交换不一样。
dh算法图.png
其中A和B为私钥,a和b为公钥。
dh算法是不能用于身份认证的,因为它不能做加解密操作,只是个协商密钥的算法。
摘要
将信息形成一段固定长度的摘要,保证信息的完整性。
数字证书
基于RSA实现,用于标明身份,主要构成:身份信息,公钥,签发CA和数字签名,有效期。
CA:证书授权中心,链式的信任机构,最顶点是公认的安全(不是绝对的安全),CA使用自己的RSA私钥对证书签名。CA签名是证明证书有效的内容。
公钥:拥有此证书的服务器自己的公钥,客户端可以用这个公钥可以验证服务器签名,或者给服务器发送加密信息。公钥是证书里表明身份的内容。
SSL握手过程
SSL复杂的地方在于握手阶段,目的是双方的身份认证和密钥协商,其中身份认证主要是证书的传递和验证,密钥协商是双方确定一个对称密钥。
身份认证的过程
1:服务器向客户端发送证书。
2:客户端用通过CA验证证书的有效性。
3:客户端使用证书内的公钥加密「密钥协商的信息」发给服务器。只有服务器能解密,进而就证明了身份。
密钥交换和协商
方法分几种,包括无效(没有密钥交换)、RSA、匿名Diffie-Hellman、暂时Diffie-Hellman、固定Diffie-Hellman、Fortezza。
没有密钥交换
SSL无交换.png服务器证书中包含RSA公钥表明身份,客户端选取一个随机数当密钥,使用服务器公钥加密传给服务器。
缺点:取决于客户端产生随机数的能力,伪随机很容易被破解。服务器不能信任客户端的随机能力。
解决方案:DH算法是3个随机数生成密钥,服务器和客户端各有一个,最后还有个premasterkey,大大提高了随机能力。
RSA
ssl_rsa.png服务器证书中包含RSA公钥表明身份,一开始双方各产生一个随机数,最后客户端产生第三个随机数,用证书中的公钥加密发送。三个随机数共同生成对称密钥。
缺点:依赖于客户端的随机能力,也没有前向安全性。
DH-RSA
dh-rsa.png匿名的DH无法表明身份,一般和RSA一起使用,RSA负责身份认证,DH负责密钥交换(交换premaster_key)。分两种DH-RSA和DHE-RSA
使用DH算法协商出premaster_key,证书中包含服务器固定的DH参数(公钥)表明身份,CA使用RSA签名表明证书的合法性。
缺点:固定的服务器DH公私钥,一旦泄露,历史信息全部都可以被解密,无法保证前向安全性。
DHE-RSA
DHE-RSA.png相对于DH-RSA,加入了server key exchange消息,传输了一个临时的服务器DH参数(公钥),每次都不一样,解决了前向安全问题。
证书中包含服务器的RSA公钥,服务器需要用RSA私钥签名服务器DH参数来表明身份。
由于服务器DH参数是临时的,对应的私钥也是临时的(用后不保存),所以可以保证前向安全
注意DH-RSA和DHE-RSA中的RSA是有区别的,前一个是指CA用RSA签名,后一个是服务器用RSA签名DH参数。
最后就形成了我们常用的SSL协商过程:
sslhandshake.png
其他:
DH算法分两种:
DLP:离散对数问题,上述的DH算法就是DLP。
ECDLP:基于椭圆曲线的离散对数,比上述更安全。
ElGamal是一种基于DH的公私钥加密,功能和RSA一样。
网友评论