SSH/HTTPS 认证

SSH/HTTPS 认证

最近讨论了有关加密相关的一些知识点, 简单整理记录一下.

非对称密钥的认证原理

我们知道, 可以使用公钥进行加密, 再用密钥进行解密, 这是非对称加密的一个重要的特点.

那么对于认证来说, 核心的是什么呢? 所谓认证本质就是确认对方的身份, 在基于非对称密钥的认证过程里
就是确认对方是不是私钥的拥有者. 所以我想一个基本的流程是这样的:

  • 基于公钥加密一断数据, 发送给对方
  • 对方解开加密数据
  • 对方展示原文, 如果原文与实际的原文是一样的, 那么就是验证了对方是私钥的所有者, 即完成了身份论证.

这样的一个过程, 为什么一定要基于非对称加密呢? 如果是对称的, 可不可以呢? 由于这个密钥只有一个, 在验证的双方都有一样的密钥, 再进行上面的
过程也是可以验证对方的身份, 但是这个时候密钥的传递就成了最复杂的事情了. 这个时候, 非对称加密的优势就体现出来了,
所以非对称加密优势一方面在于加解密的安全性上, 另一方面在于公钥传递的可靠与便利上.

SSH 认证流程

SSH 的论证第一步就是把公钥放到服务器上.

之后当连接进来的时候, 客户端会带有自己的公钥, 服务器上可能有多个公钥. 服务器进行检查, 这个客户的公钥在不在服务器上.
如果存在, 那么再进行下面的过程.

在上面那个原型上, 实际的 SSH 认证还多了一步.

先假定如下的标记:

  • Ac 客户端公钥
  • Bc 客户端密钥
  • As 服务器公钥
  • Bs 服务器密钥

  • 会话密钥(session key)生成
    • 客户端请求连接服务器,服务器将 As 发送给客户端。
    • 服务器生成会话ID(session id),设为 p,发送给客户端。
    • 客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。
    • 客户端将 r 用 As 进行加密,结果发送给服务器。
    • 服务器用 Bs 进行解密,获得 r。
    • 服务器进行 r xor p 的运算,获得 q。
    • 至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。
  • 认证
    • 服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端
    • 客户端使用 Bc 解密 S(x) 得到 x
    • 客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥
    • 服务器计算 q + x 的 md5 值 m(q+x)
    • 客户端将 n(q+x) 发送给服务器
    • 服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功

SSH 登录的场景下有一个是可信的, 就是服务器是可信的. 所以一开始, 服务给了客户发送了公钥.
之后基于公钥, 加密了一个对称的密钥. 之后的交流都是基于对称的密钥了.
第二步的认证过程就是我们上面所说的认证的原理了. 关键在于客户端在返回 x 的时候并不是
直接返回的, 而使用了之前的得到对称加密的密钥.

SSH 的登录场景之下, 关键的点在于服务器的可信任. 所以一开始就基于服务器的公钥计算出来了会话密钥. 之后的所有的
信息都被加密了.

证书

在 https 过程中被广泛使用的证书, 我梳理了一下, 证书里的核心的信息就是: 域名, 服务器的公钥. 其它的 hash
值, 以及加密的算法, 都是为了保证域名与服务器的公钥的关系的可靠性.

https

https 我学习了一下, 感觉步骤比较多, 我提练了一下核心的目的. https 应该也有两个目的, 一是验证服务器的身份,
二是保证传输的安全性. 但是我感觉, 第二个目的是比较简单的. 如何要保证安全性, 大可以由客户端提供公钥, 再进行协商加密.
我所希望了解到的就是, 在 https 的握手过程中, 是如何验证服务器的身份的.

并且我还发现了一些奇怪的现象, 为什么要三个随机数呢? 我的理解, 有最后一个随机数应该就可以了. 我找到如下的解释.

"不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,
因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。

对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,
三个随机数通过一个密钥导出器最终导出一个对称密钥。

pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,
那么pre master secret就有可能被猜出来,那么仅适用pre master secret作为密钥就不合适了,
因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,
一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"

再查看了一些资料之后发现, https 这个体系还真是比较复杂的, dh 与 rsa 两种加密方式的认证是不一样的.
rsa 是在最后一步,服务器得到了客户发送的主随机数, 把握手过程的信息进行 hash 再加密之后传递给客户进行验证, 从而完成
对于服务器的认证. 而 dh 由于加密方便的不同, 在服务器向客户传递证书的时候就已经使用了私钥进行了数据加密并传递给
客户, 客户同时得到了证书与服务器的加密数据.

参考

 https://razeen.me/post/ssl-handshake-detail.html 
 http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html 


发表评论

邮箱地址不会被公开。 必填项已用*标注