SSH Key Pair 认证

最近被人问起了ssh key 认证的过程这个问题,之前我一直以为自己是知道的,不就是把client的PUB key加入到server的authorized_keys文件中么,感觉So easy!但是真回答的时候,就哑火了。So,我决定补上这一课。

以下内容参考互联网文章

  1. 概念
    公钥(public key): 一般用来加密
    私钥(private key):一般用来解密
    为什么用“一般”,是因为公钥在某些情况也可以用来解密的,比如数字证书,以后再详谈。。。

  2. 认证过程
    假设:
    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 Key Pair 认证)