简书 賈小強
转载请注明原创出处,谢谢!
非对称加密是一种公开密钥密码系统,要求密钥成对使用,即加密和解密分别由两个密钥来实现,每个用户都有一对密钥。典型的公开秘钥算法如RSA算法
应用
- 通过Linux 或者Mac 的Terminal使用ssh命令,登录远程主机(将公钥追加到authorized_keys,可以免密码登录)
- github网站,可以以ssh协议方式,上传下载(将自己的公钥交给github,然后自己保留对应的私钥,这样git push或者git pull不再需要输入密码)
角色
按照密码学惯例
人名 | 角色 |
---|---|
Alice | 所有协议的第一个参加者 |
Bob | 所有协议的第二个参加者 |
Mallory | 恶意的主动攻击者 |
Peggy | 证明人 |
简单说,如果Alice,使用非对称加密和Bob建立连接(登录),我们就可以认为,这种连接是安全的,即使加密后的密码被中途截获也无法破解出真正的密码。
有密码连接
- Bob收到Alice的请求,把自己的公钥发给Alice。
- Alice将密码用Bob的公钥加密后,发送给Bob。
- Bob用自己的私钥解密收到的加密内容,如果密码正确,那么连接成功。
中间人攻击
- 如果Mallory冒充Bob,截获了登录请求,并给Alice发一个自己伪造的公钥
- Alice把密码用Mallory的公钥加密后发送给Mallory
- Mallory用自己的私密解密,从而获取密码
- Mallory再用这个密码冒充Alice和Bob建立连接
解决方案
让Alice明确的知道要连接的人就是Bob,那么Bob可以让Peggy证明(在网站上将自己的公钥指纹贴出来),这样Alice在连接的时候,比对公钥指纹就能知道对方是不是真的Bob
无密码连接
- Alice将自己的公钥发给Bob保存
- Bob收到Alice的请求,然后向Alice发送一段随机字符串
- Alice用自己的私钥加密后,再发给Bob。
- Bob用事先储存Alice的公钥解密,如果字符串相同,就证明就是Alice,建立连接成功
文件
实际比如Linux Terminal使用ssh存在三种类型的文件,每台机器都可以具有它们。
- id_rsa.pub 和 id_rsa:保存每个角色各种的公钥,私钥
- known_hosts:保存一些可信赖的远程主机的公钥,如果连接的主机不在其中,那么会输出提示对方的公钥指纹,这个时候就需要权衡,如到网站看指纹是否正确,从而避免中间人攻击
- authorized_keys:保存被设置为免密码登录机器的公钥
总结
可以发现公钥即可以用于加密,也可以用于解密,私钥同样如此。连接双方都各自保存了对方的公钥,不过作用不一样
Happy Learning !!