写代码的木公算法
本文转载自:https://baijiahao.baidu.com/s?id=1612411213158569988&wfr=spider&for=pc安全
熟悉Linux的人确定都知道SSH。SSH是一种用于安全访问远程服务器的网络协议。它将客户端与服务端之间的消息经过加密保护起来,这样就没法被窃取或篡改了。那么它安全性是如何实现的呢?服务器
为了理解SSH,先要介绍两个重要概念:对称加密和非对称加密。网络
在对称加密中,客户端和服务端使用同一个密钥对数据进行加密和解密。这种方法的好处是加密强度高,很难破解。缺点也很明显,即密钥自己容易被泄漏。所以,如何保存密钥成为了关键问题。因而引出了第二种加密方式:非对称加密。ssh
在非对称加密中有两个密钥,公钥和私钥。这两个密钥配对产生和使用。用公钥加密的数据,必须用与其对应的私钥才能解开。而且,私钥没法经过公钥获取。所以,公钥是能够被公开的,而私钥则必须被安全存放。ide
在SSH中,非对称加密被用来在会话初始化阶段为通讯双方进行会话密钥的协商。因为非对称加密的计算量开销比较大,所以一旦双方的会话密钥协商完成,后续的加密都将采用对称加密来进行。加密
服务端的公钥:客户端在收到这个公钥后,会在本身的“known_hosts”文件进行搜索。若是找到了相同的公钥,则说明此前链接过该服务器。若是没有找到,则会在终端上显示一段警告信息,由用户来决定是否继续链接。
服务器所支持的加密算法列表:客户端根据此列表来决定采用哪一种加密算法。.net
1)服务端在本身的“authorized_keys”文件中搜索与客户端匹配的公钥。
2)若是找到了,服务端用这个公钥加密一个随机数,并把加密后的结果发送给客户端。
3)若是客户端持有正确的私钥,那么它就能够对消息进行解密从而得到这个随机数。
4)客户端由这个随机数(这个随机数能够看作是盐)和当前的会话密钥(秘钥才是咱们真正须要加密的数据)共同生成一个MD5值。
5)客户端把MD5值发给服务端。
6)服务端一样用会话密钥和原始的随机数计算MD5值,并与客户端发过来的值进行对比。若是相等,则验证经过。blog
至此,通讯双方完成了加密信道的创建,能够开始正常的通讯了。get
总结:SSH巧妙地利用了对称加密与非对称加密各自的特色,实现了一套安全保密的远程控制协议。
更详细的对SSH的介绍还能够参考这篇文章