美文网首页
SSH 两种验证方式原理

SSH 两种验证方式原理

作者: 来安_693d | 来源:发表于2018-12-25 14:38 被阅读0次
    SSH登录方式主要分为两种:

    当前文档转载自博客园-->原文地址

    1. 用户名密码验证方式
    image

    说明:

    (1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户;

    (2) 用户会根据服务器发来的公钥对密码进行加密;

    (3) 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功。

    2. 基于密钥的登录方式
    image

    说明:

    1. 首先在客户端生成一对密钥(ssh-keygen);

    2. 并将客户端的公钥ssh-copy-id 拷贝到服务端;

    3. 当客户端再次发送一个连接请求,包括ip、用户名;

    4. 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:qwer;

    5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端;

    6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端;

    7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录。

    总结:

    1,文章是复制过来的,其正确性,有待考证!

    2, 第一SSH认证方式(服务端保留私钥,客户端获得服务端下发的公钥):
    由于是服务端发放公钥,客户端使用此公钥进行明文加密。客户端的公钥就容易被第三方(坏人)进行冒充发放。所以,按照上面所述,及其不安全!俺个人严重怀疑第一种方案的可行性!个人猜测,可能第一种方案还掺杂有对称秘钥交换等详细流程.....而图中并没有描述出来。(如果掺杂对称加密,就和tm的SSL差不多啦!)

    3, 第二SSH认证方式(服务端获得客户端上传的公钥,客户端保留私钥):

    这种方式之所以可以用来免密码登录的原因如下:

    1. 由于密钥对是由客户端生成的。因此,私钥安全性完全由客户端用户自行负责(万一私钥泄露,客户端用户自己背锅,怨不得别人!)

    2. Client端向Server端上传个人公钥后(在这个过程中,公钥完全有可能被其他人获得。不过那都没有关系的,既然取名叫做公钥,那就是公开的!本身就不存在泄露的问题),server端将会维护一个公钥列表(为什么是维护一个公钥列表呢?因为客户端有多个嘛,如果千千万万的客户端都以这种方式进行认证的话,可不就产生了一个公钥列表集合?)

    3. 如上所述,当 Client端向服务端列表发起认证请求后,Server端根据请求信息(包含Client端一系列信息)公钥列表中找到当前请求相关的公钥(其实就是第2步上传的那个公钥)。然后服务端用公钥加密一段字符串如:“hellow world”。并将密文返回给客户端...然后客户端先对密文进行解密,再将解密后的明文用私钥加密并发送给Server端。再然后,服务端用公钥对密文进行解密。若解密后的明文还是“hellow world”。就说明:当前跟我进行连接请求的龟儿子有正确的私钥啊!!。然后,Server端就认为客户端身份认证成功!而这个认证结果同时也说明了一个问题:Server端只要保证你有对应的私钥,就认为你就是那个他要找的人。然后就对你开启了相应的操作权限。一旦私钥泄露...那么任何人都可以冒充你了....。因此,客户要尽量保存好自己的私钥,不要泄露。

    4,那么,如果客户端的公钥泄露会引发什么问题呢?
         黑客通过各种手段轻松获取到了你的公钥,此时如果黑客在你的上级网络节点进行请求拦截,然后模仿服务端返回给你一段密文......最终你就被黑客欺骗了,虽然你的请求IP仍然是对的。但是你根本防不住上级网络节点动手脚啊!于是,您就以为自己和服务端认证成功了呢。于是你进行私密图片上传的请求,就到达黑客这里...结果:黑客获取私密图片。而黑客由于没有你的私钥...就不能跟Server端进行认证行为(如果黑客从数据链路层进行代理的话,就可以冒充Client端了,不过难度系数极大。)
    因此,第二种认证方式只能用来防止有人冒充Client端。而不能防止有人冒充Server端。
    由于Server端有可能是冒充的,所以在发送连接请求时一般会有如类似下提示:

    The authenticity of host 'xxx.xx.xxx.xxx(xxx.xx.xxx.xxx)' can't be established
    RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:.
    Are you sure you want to continue connecting(yes/no)?
    

    有童鞋就问了:

    Server端都tm被代理了,我要SSH这鸟协议有什么用?
        首先,由于黑客只拿到了某一个Client端A的公钥。所以,黑客只能对Client端A进行Server端冒充。由于黑客没有Client端B,C,D.....的公钥Client端B,C,D....则不会被黑客进行Server端冒充。所以说啊,黑客费了老半天的劲儿,也只能破解某一个用户的私密报文,而不能破解所有人的报文。由于付出和收入完全不成对等......因此,黑客才不会花费那么多时间和你耍这个赔本赚吆喝的买卖!!除非,您是总统级的人物.....下达了发动第三次世界大战的命令。才值得黑客这么干......

    那么,有没有可能黑客获得了所有Client端保存在Server端的公钥列表呢?
    答:只有一种可能性------>监守自盗!
    例如:维护服务端的某个成员!将客户端的公钥列表打包发给了黑客,以获取某些能够满足自己利益的玩意儿(比如金钱,权利,法西斯理想等)
        而实际上,针对'类似公钥列表'这种信息。开发人员在设计Server端时肯定是有所考虑的。绝对不会以明文的方式进行存储,想要监守自盗也不是那么容易哒!当然,如果某人对这方面非常精通...监守自盗也是有可能发生的。不过,其所获得的风险也是相当大的......随时有可能被发放监狱专属小衬衫,然后下班辈子就在度过吧(一个精通信息安全的人被放在监狱里,终生不能耍电脑,真的是求生不能求死不得了!)当然,监守自盗的带来的损失有多大呢?其实也没多大....我们之前已经说了:从哲学的角度上讲,公钥就是公开的秘钥,万一泄露了。Server端只需通知大家赶快替换自己保存在服务端上的公钥即可!So,黑客能够利用已泄露的Client端公钥列表做的坏事也非常有限!于是就又成了一件赔本赚吆喝的买卖!

        网络上没有不可破解的加密协议,家庭也没有绝对安全的防盗门,小区也不会有绝对安全的门卫,更高的安全等级就意味着更高的社会资源消耗!我们只需要做到让坏人付出的代价远高于其所得即可。

                                                         _______ 沃仔基硕德

    相关文章

      网友评论

          本文标题:SSH 两种验证方式原理

          本文链接:https://www.haomeiwen.com/subject/iikflqtx.html