我在给云服务器配置本地电脑免密登录的过程中,学习了一下SSH免密登录的实现原理。
对SSH中输入密码登录和免密登录的原理根据自己的理解做了如下笔记,分享给大家希望能有所帮助。
1. 对称加密
对称加密是加密过程中只有一个密钥,加密解密都只用这个密钥。
加密通讯至少要有一对通讯对象,对称加密的问题主要体现在如何将这个唯一的密钥从生成密钥的地方安全地传输到另一还未持有密钥的一方,即经典的“先有鸡还是先有蛋的问题”,很难解决这个问题啊(流汗…)。
2. 非对称加密
非对称加密是有两个密钥,一个用来加密,一个用来解密。
针对于对称加密它在有可能在传输密钥的过程中泄露密钥的问题,非对称加密方法直接认为,我在传输密钥的时候肯定被别人偷偷地监听了,所以我传输给对方的密钥我默认叫它公钥;另一个密钥我不发出去,就意味着没人能得到我的另一个密钥(其实要是你自己的主机被破解了或者被别人登录了,照样可以从你的文件系统里看到你的私钥,由此引申出另一个对私钥进行进一步加密的方法),称为私钥。
非对称加密可以分为两种,分别是:
公钥加密,私钥解密: 既然我用私钥才能解密,说明我不想让别人看到我传输的是什么,一般用来传输密码,或者不想让别人知道的东西。
私钥加密,公钥解密: 既然我用私钥才能加密,说明我可以让别人看到我传输的是什么,比如我要传输ip地址或者证书,我可以让你看到我要发的东西,但我主要要防止你伪造,骗人。
3. SSH免密登录中的非对称加密
3.1 SSH输密码登录
- SSH服务器首先自己生成一对公钥和私钥。
- SSH服务器将公钥传输给拟与自己建立ssh连接的客户端。
- 客户端通过公钥对自己输入的密码进行加密,并将加密后的字符串传输给服务端。
- 服务端用私钥进行解码校验是否是正确的密码。
- 完成输密码登录的过程。
3.2 SSH免密登录
- 需要SSH登录远程服务端的客户端在客户端本地自己生成一堆公钥和私钥。
- 客户端将公钥传输给服务端。
- 服务端随机生成一个数字N,并用客户端传输过来的公钥进行加密,并传输给客户端。
- 客户端接收到加密的字符串以后,再加上sessionID,一起用MD5编码成哈希值,然后发送回服务端。
- 服务端接收到编码成哈希值的字符串后,自己也和客户端一样用相同的MD5方法再编码一遍,然后对比验证一下是否一致。
- 完成免密登录的过程。
3.3 总结
在SSH协议中,输入密码登录和免密登录都使用了非对称加密中的公钥加密私钥解密,不同的是输入密码登录中是通过服务端生成公钥和私钥,而免密登录中是通过客户端来生成公钥和私钥。