当前位置: 首页 > 科技观察

面试官:说明一下SSH的实现原理?

时间:2023-03-19 23:29:55 科技观察

SSH是一种协议标准,其主要目的是实现远程登录,提供安全的网络服务。它的实现有很多,最常用的是开源的openssh。对称加密与非对称加密在讲解SSH的实现原理之前,我们先了解一下加密方式。众所周知,为了数据安全,互联网上的数据传输必须进行加密。加密分为两种加密方式:对称加密(秘钥加密)非对称加密(公钥加密)对称加密,即加密和解密都使用同一组秘钥。见下图:服务端和客户端的交互过程如下图所示:对称加密的加密强度很高,但是有一个很大的问题。即:如何保证密钥A的安全?当客户端数量非常多时,如何保证密钥的安全?一旦密钥泄露,后果不堪设想。无法保证用户安全。所以非对称加密的出现就是为了弥补这一点。非对称加密有两个密钥:“私钥”和“公钥”。用公钥加密的密文只能用对应的私钥解密。从公钥推断出私钥的可能性很小。下图展示了基本原理:上图在实际使用中有个问题,就是客户端需要知道服务器的公钥,否则无法加密。因此,服务器有必要将公钥的处理过程告知客户端。如下图所示:服务器收到客户端的登录请求,服务器将公钥发送给客户端。客户端使用这个公钥来加密密码。客户端将加密后的密码发送给服务器。服务器使用私钥解密验证OK返回验证结果。私钥对服务器唯一,保证即使客户端登录信息在网络传输过程中被盗,也没有私钥可以解密,保证数据安全。这就充分利用了非对称加密的特点。你觉得这样安全吗?上图有个漏洞:客户端如何保证收到的公钥是目标服务器的?如果攻击者拦截了客户端的请求并发送了自己的公钥,客户端使用公钥和私钥加密的密码就可以被攻击者用自己的私钥解密。这不是一个很大的漏洞吗?SSH是如何做到的?SSH有两种方式:基于密码的身份验证;Publickey-basedauthentication1.Password-basedauthentication由上可知,我们的主要问题是“Verifywiththepublickeyoftheserver”,客户端只需要确认公钥就OK了。通常第一次登录时,系统会显示如下信息:authenticityofhost'ssh-server.example.com(12.18.429.21)'can'tbeestablished.RSAkeyfingerprintis98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d。你确定要继续连接吗(是/否)?上面的信息说:无法确认主机ssh-server.example.com(12.18.429.21)的真实性,但是如果知道它的公钥指纹,还要继续连接吗?之所以用指纹代替密钥,是因为密钥太长(RSA算法生成的公钥有1024位),直接比较比较困难。因此,将公钥哈希生成一个128位的指纹,方便比对。输入yes后,主机已经确认并添加到文件known_hosts中,接下来需要输入密码。2、客户端基于公钥认证,与服务器端协商生成会话密钥;客户端会向服务器端发送登录请求(如:root@192.168.1.2),发送的信息包括用户名root和root的公钥指纹,所有信息均使用会话密钥加密。服务器通过会话密钥对客户端发送的数据进行解密,得到用户名root和root的公钥指纹,然后读取root用户家目录下的所有公钥数据(在/root/.ssh/autorized_keys文件),通过单向加密算法将每个公钥的数据指纹与客户端发送的数据指纹进行比对,从而找到客户端root用户的公钥;服务器使用找到的客户端公钥对一个随机数进行加密后发送给客户端;客户端使用私钥对服务器发送的随机数密文进行解密,然后将解密结果发送给服务器;服务器验证客户端解密后的数据与自己发送的数据一致,客户端认证成功;