所谓的公钥认证,实际上是使用一对加密字符串,一个称为公钥(public key),任何人都可以看到其内容,用于加密;另一个称为密钥(private key),只有拥有者才能看到,用于解密。通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难。
ssh 的公钥认证就是使用了这一特性。服务器和客户端都各自拥有自己的公钥和密钥。为了说明方便,以下将使用这些符号。
Ac 客户端公钥
Bc 客户端密钥
As 服务器公钥
Bs 服务器密钥
在认证之前,客户端需要通过某种方法将公钥 Ac 登录到服务器上。
认证过程分为两个步骤。
会话密钥(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),两者相同则认证成功
在说到公钥和私钥的时候,我们先来了解一下对称和非对称加密的区别:
密钥:可以理解为一个字符串,在加密或者解密时传递给加密解密算法
非对称加密算法:使用最广泛的是RSA算法
非对称加密算法中公钥和私钥可以有两种用途
数字签名:使用私钥加密数据,称之为签名
作用:
上一篇:提升数字证书知识 秒破伪造SSL证书
下一篇:常见的网络安全防护措施