学习 SSL / TLS 协议中的问题

问:SSL 链接建立过程中,密码套件、证书、密匙协商算法到底是怎样的?

答:

​ SSL 链接的建立过程可以分为4个阶段:

  1. 服务端与客户端交换信息(双方发送 Hello 信息):SSL 版本、随机数、会话 ID、密码套件(密钥交换算法、MAC 算法、加密算法)、压缩方法(可选)
  2. 服务端向客户端发送信息:服务端证书(证书链)、服务器公钥(可选,视密匙协商算法定,如对于RSA 算法,其证书中已包含公钥 ,而 DHE 要,DH 不用)、客户端证书请求(可选)、服务器握手完成信号
  3. 客户端向服务端发送信息:客户端证书(如果第二步有请求)、客户端交换预主密钥(用服务器公钥加密)、客户端证书验证(可选,若有发送客户端证书才需。客户端会将所有收到信息进行 hash 并用私匙签名)
  4. 客户端向服务端发送两条信息,服务端发送相似信息:更换加密规约(事件消息,表示本链接以后使用约定的加密方式通信)、Finish 消息(将Handshake信息、主密钥 进行 hash 所得值)

​ 密码套件在第一步中出现,确定了密钥协商算法、MAC 算法、加密算法。

​ 证书在第二部分出现,有签名验证功能(有的证书还包含服务端公钥,如 RSA、DH、ECDH,就有了加密功能)。

​ 密钥协商算法在第一步确定好,后面的阶段则使用该算法交换信息,最后得到一个通信双方都知道,没有第三方知道的密钥。

问:密码套件的格式是怎样的?

答:

​ 例如:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA ,表示使用 TLS 协议,采用的密匙协商算法为:带有 RSA 的 ECDHE 算法;采用的加密算法为:AES(密匙与初始向量为 256);采用的 MAC 算法为:SHA

问:密匙交换算法有哪些?如何进行的?

答:

​ 密匙交换算法的作用在于能够安全的帮助通信双方交换密匙(即使有第三方可以监听双方所发出的所有消息内容)。
​ 算法的分类有:RSA 算法(基于大整数的因数分解问题)、DH 算法(基于离散对数问题)、ECDHE 算法(基于椭圆曲线离散对数问题),利用算法交换密匙的过程如下:
​ RSA 算法:

  1. 服务端直接发送自己 RSA 算法的公匙给客户端
  2. 客户端用服务器公匙加密自己密钥发送给服务端
  3. 服务端用自己私匙解密信息得到客户端的密钥

​ DH 算法:

  1. 双方利用固定的值:p、q
  2. 客户端和服务端都进行一样的操作:各自生成一个不同的随机数 X ,得到一个对数 N = q X q^X qX ,发送给对方
  3. 客户端和服务端收到一个 N (两个值显然不一样),再进行计算 KEY = N X N^X NX ,此时明显两者的 KEY 都是一样的,故获得了密匙

​ ECDHE 算法:

  1. 客户端随机生成随机值 R a R_a Ra,计算 P a ( x , y ) = R a ∗ Q ( x , y ) P_a(x, y) = R_a * Q(x, y) Pa(x,y)=RaQ(x,y) Q ( x , y ) Q(x, y) Q(x,y) 为全世界公认的某个椭圆曲线算法的基点。将 P a ( x , y ) P_a(x, y) Pa(x,y) 发送至服务器
  2. 服务器随机生成随机值 R b R_b Rb,计算 P b ( x , y ) = R b ∗ Q ( x , y ) P_b(x,y) = R_b * Q(x, y) Pb(x,y)=RbQ(x,y) 。将 P b ( x , y ) P_b(x, y) Pb(x,y) 发送至客户端。
  3. 客户端计算 S a ( x , y ) = R a ∗ P b ( x , y ) = R a ∗ R b ∗ Q ( x , y ) = S S_a(x, y) = R_a * P_b(x, y)= R_a * R_b * Q(x, y)= S Sa(x,y)=RaPb(x,y)=RaRbQ(x,y)=S ;服务器计算 S b ( x , y ) = R b ∗ P a ( x , y ) = R b ∗ R a ∗ Q ( x , y ) = S S_b(x, y) = R_b *P_a(x, y) =R_b * R_a * Q(x, y) = S Sb(x,y)=RbPa(x,y)=RbRaQ(x,y)=S
  4. 算法保证了 S a = S b = S S_a = S_b = S Sa=Sb=S ,提取其中的 S 的 x 向量作为密钥(预主密钥)

问:DHE 算法、 DH 算法、 ECC 算法、ECDHE 算法和 ECDSA 算法,它们有何不同

答:

​ DH 算法是一种基于离散对数问题的一种密匙交换算法。

​ DHE 算法为 DH 算法的一种。根据服务端私匙的生成的具体实现方法,DH 算法分为两种:DHE 和 static DH(已废弃)。后者废弃原因为服务端私匙是固定的(静态的),一旦被他人破解,会危害到大量其它会话;前者不一样,前者的 E 表示 ephemeral(临时性的)的意思,每一次会话中服务端的私匙都不固定(临时的),即使被破解,也只影响一个会话,如此实现了前向安全。

​ ECC 算法是一种椭圆曲线算法,主要应用在证书加密上的算法。

​ ECDHE 算法即为利用了 ECC 椭圆曲线特性的 DHE 算法,在数学上就是基于椭圆曲线离散对数问题的算法,目的是为了提升 DHE 算法的性能,故也是一种密匙交换算法。

​ ECDSA 算法是一种椭圆曲线算法,主要应用在数字签名上,是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。

问:DH、DHE 算法中证书里的公匙作用区别?

答:

​ 在 DH 算法中,证书公匙的作用是对证书的签名,同时用于对于后面密钥协商中服务端的公匙;在DHE 算法中,证书公匙仅用于签名,如对证书的签名,而实际两方的密匙协商方法是利用离散对数问题协商,因此对于 DHE 算法,双方交互是服务端需要发送 server key exchange 报文。

问:SSL 中的密码算法有哪些?

答:

​ 在密码算法中大概可以有三种:RSA(大整数的因数分解)、DH(离散对数)、ECC(椭圆曲线)。

​ RSA 算法在密码中应用广泛,可以进行数字签名、密匙交换、证书公匙加密。

​ DH 算法常应用在密匙交换中,有 static DH 算法(基本不用)、DHE 算法、ECDH 算法(基本不用)、ECDHE 算法。

​ ECC 算法常用于密匙交换、证书公匙加密(目前的大势所趋)中,有ECDH 算法(基本不用)、ECDHE 算法、ECDSA 算法。

​ 用在密匙交换中的算法有:RSA 、DHE、ECDHE;用在数字签名中的算法有:RSA(包含MD、SHA系列)、DSA、ECDSA;用在证书公匙加密的算法有:RSA、ECC。

问:什么是前向安全性?

答:

​ 前向安全性指即使密匙现在暴露了,也不会使得过去的通信信息有暴露的危险。与之相对的有后向安全性,指即使密匙现在暴露了,也不会使得未来的其它的通信信息(非本次通信信道的信息)有暴露的危险。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值