一、
在学习git进行版本控制的时候,会有 ssh-keygen -t rsa -C 这一步,用来创建公钥(id_rsa.pub)和私钥id_rsa的步骤。创建好后还要将id_rsa.pub的内容复制到github网站上的设置—SSH keys—add SSH key里面。这样才能与版本库进行网络通信。那这么做到底是什么意思呢?
二、
首先,SSH是一种网络安全通信协议。这里主要使用的是RSA非对称加密体制。RSA公钥加密体制包含如下3个算法:KeyGen(密钥生成算法),Encrypt(加密算法)以及Decrypt(解密算法)。ssh-keygen命令就是在本地生成一对公钥和私钥。这里简单总结两点:公钥用于对数据进行加密,私钥用于对数据进行解密,公钥加密的内容只能用私钥解密,私钥加密的内容也只能用公钥解密。公钥是可以对任何人公开的。使用公私钥加密体制可以有效的防止中间人攻击的情况。
如果还不是很理解,推荐阅读下面几篇文章
(推荐)
三、
如果仅使用一对公钥和私钥是无法保证双方的通信的安全的,只能保证其中一方的安全。
(1)假设现在有用户A想和服务器B进行通信,A生成公钥1和私钥1,并把公钥公开给服务器B,那么现在的状态是如下图所示:
(2)A和B要进行通信过程:A使用私钥1把要发送的内容加密,B收到A发来的内容后使用公钥1对内容进行解密。B用公钥1对想要回复给A的内容进行加密,A收到后使用私钥对内容进行解密。但因为公钥1是公开的所以A发出的内容在传输的过程中是不安全的(因为中间人可以使用公钥1对加密的内容进行解密,公钥都是公开的,用户A总是要想办法将公钥1传给B然后才能,在传送的过程中就有可能被网络攻击者嗅探到,如果你想到再次加密的话,那就错了,总不能依靠其他加密算法来保证现在的加密算法的安全性吧?这样就没有意义了)。
(3)那么公私钥实际怎么用才安全呢?想要绝对安全,还需要增加一对公私钥。用户A生成一个私钥和一个密钥分别称为:私钥1和公钥1。同样地,服务器B也要在本地生成一个私钥和一个密钥分别称为:私钥2和公钥2。然后双方交换公钥,A用私钥1加密把内容发送给B,B收到后用公钥1可以解密获得内容;B若要给A发送消息,先用私钥2加密发送的内容,然后A用公钥2解密内容。这样,中间人只要无法拿到私钥,就无法揭秘通信的内容!
以上内容只是个人学习的一点理解,如有错误请指出,谢谢。