九、大话HTTP协议-加密问题

一、从git配置公钥登陆开始

曾几何时,我们在使用Git时,通过git clone克隆源码时,发现有httpsssh两种方式(下载压缩包的方式就不提了,我们怎么可以这么low?),会发现用ssh的方式下载会失败:

九、大话HTTP协议-加密问题_第1张图片

实际上,用HTTPS的方式即可,输入用户名密码进行验证,并且现在也不是每次都要输入用户名密码,操作系统会记忆,不过也可以自己去配置用户名密码,达到避免每次https方式clone或push都要输入密码的尴尬。(关于https和ssh两种方式,可自行谷歌搜索区别)

我们回到ssh方式,初学者可能不知道发生了什么,按照网上的教程进行了如下的配置:

git config --global user.name "你的git用户名"
git config --global user.email "你的git所用邮箱"

配置好之后可以看下:

$ git config --global  --list
user.email=你的git所用邮箱
user.name=你的git用户名

下一步生成了一对公钥和私钥(这里牵涉到非对称加密,下面会进行详细说明):

ssh-keygen -t rsa -C "这里换上你的邮箱"

九、大话HTTP协议-加密问题_第2张图片

  • 确认秘钥的保存路径(如果不需要改路径则直接回车);
  • 如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);
  • 创建密码(如果不需要密码则直接回车);
  • 确认密码;

简单来说,就是不断回车即可。我的电脑是windows系统,我们可以看到生成的密钥对放在了/c/Users/fossi/.ssh/id_rsa

在指定的保存路径下会生成2个名为id_rsaid_rsa.pub的文件,接下来就很简单了,将id_rsa.pub中的内容拷贝到git上。

九、大话HTTP协议-加密问题_第3张图片

好了,这次我们大功告成了。耶!

九、大话HTTP协议-加密问题_第4张图片

可是,以上是git的一些配置,跟我本篇文章有半毛钱关系?实际上我们完成了ssh公钥登陆。后续你就再也不用重复输入账号密码,并且我们上面用到的一对密钥,实际上用到了非对称加密。这个关键字是我们本篇文章的核心讨论点。

此外,我们还明白了git配置的这一步到底是用来干啥的,也是大大的收获。

关于ssh公钥登陆原理,我们用更加明显的对比来说明。

我们登陆过服务器的人知道,可以通过SSH协议登陆:

ssh user@host

主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录。

密码口令登录,通过密码进行登录,主要流程为:

  • 客户端连接上服务器之后,服务器把自己的公钥传给客户端
  • 客户端输入服务器密码通过公钥加密之后传给服务器
  • 服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录

公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:

  • 客户端生成RSA公钥和私钥
  • 客户端将自己的公钥存放到服务器
  • 客户端请求连接服务器,服务器将一个随机字符串发送给客户端
  • 客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
  • 服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

上文提到了RSA加密方案,就是主流的非对称加密的算法方案。既然有非对称,必然也会有对称,下面我们进入加密学世界。

二、为什么要加密

在密码学中,明文是指传送方想要接收方获得的可读信息,明文经过加密所产生的信息被称为密文,而密文经过解密还原得来的信息就是明文。如果在互联网上传输明文,那是很危险的。比如这个场景:

九、大话HTTP协议-加密问题_第5张图片

如果有一个手段高明的黑客窃听甚至还顺便篡改了密码,那真的就完犊子了:

九、大话HTTP协议-加密问题_第6张图片

回到我们普通人的世界,我们可能会通过网页去购物,可能会通过网页去买票,试想,你的账号被窃听,甚至你输入的银行卡号和密码也被窃听,是一件多么恐怖的事情!宛若裸泳在这个纷繁的网络世界里,不禁让人胆颤!

怎么办呢?加密!

三、对称加密

我们先来了解比较简单的对称加密。简单并不意味着不保险(有很安全的对称加密算法)。简单意味着功能比较好理解。

对称加密算法用一个密钥来加密信息,同样地,也是用这一个密钥来解密。注意,全程只有一个密钥。

九、大话HTTP协议-加密问题_第7张图片

因此,不难理解,对称加密中“对称”的意思就是指加密和解密使用的是同一个密钥。因此加密方和解密方都需要知道这个密钥。

只要黑客不知道密钥是什么,那么就算被他窃听到,他也无法解密出明文。是不是超级简单?对称加密比较出名的是 AES 算法。

但是问题就出在这个密钥本身安全性上,因为两端都需要知道这个密钥才行,可能某一方把密钥传给对方才行。

但是他们怎么传递呢?假如他们传递密钥用的是明文,那么黑客照样可以截获密钥,接下来就可以解密任何传递的加密信息了。因此,对称加密虽然强大,但是有一个致命的缺陷:必须谨慎地传递密钥。但这几乎是不可能的:因为首先得把密钥传递过去。

让我想起密码学中的一个根本性原则:kerckhoffs原则。这个原则说的是:密码体制的安全性不依赖于算法的保密,而仅仅依赖于密钥的保密。

既然对称加密有点问题,我们先来看看非对称加密。

四、非对称加密

非对称是相对于对称而言的,他两一对比就知道啦:

  • 对称加密方法中,我们只用一个密钥来进行加密和解密。这也是“对称”一词的由来。
  • 非对称加密方法中,我们用一个密钥来进行加密,用另一个密钥来解密。因为两个密钥不一样,所以是“非对称”。

在非对称加密中有两个密钥:

  • 一个是"公钥"(Public Key),用于加密。
  • 一个是"私钥"(Private Key),用于解密。

公钥只用来加密。因此,用非对称加密的算法,我们就只能用私钥来解密。

回到我们一开始配置git公钥登录的时候,我们是不是生成了一对公钥和私钥?非对称加密也很简单,假设我们的公钥和私钥分别为:

  • 公钥:2&#DGg
  • 私钥:87h5#9

九、大话HTTP协议-加密问题_第8张图片

公钥可以在网络上以明文传输,毕竟是公开的密钥嘛。即使公钥被不怀好意的黑客截获也无所谓。但是,用于解密的私钥却不能被公开传输,需要保管好。

非对称加密最出名的就是 RSA 算法。

1977 年,三位数学家 Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字的首字母命名,叫做 RSA 算法。

五、既生瑜何生亮

九、大话HTTP协议-加密问题_第9张图片

非对称加密有个致命弱点:非对称加密太消耗电脑资源了。非对称加密比对称加密要慢大概 100 ~ 1000 倍。

九、大话HTTP协议-加密问题_第10张图片

所以,我们能不能取两者长处共谋大计呢?

六、SSH是如何构建一个安全通信信道

我们通过SSH协议来学习下如何组合使用兄弟两!

SSH 是英语 Secure SHell 的缩写,直译过来就是“安全的 Shell”,SSH 协议本身比较复杂,不去深究,我们就来大概了解下他是如何运用加密方法来保护数据的。

SSH 以如下顺序使用两种加密方法:非对称加密和对称加密。

  • 首先,使用非对称加密,在通信之初用于安全地交换对称加密的密钥
  • 之后,就一直使用对称加密的密钥来作为加密和解密的手段。

下面一步一步来说明 SSH 是如何创建一个安全的通信管道的。

第一步:我们要交换一个对称加密用的密钥。但是我们不能以明文方式传递,我们很容易想到,用非对称加密的方式来加密用于对称加密的密钥。服务器将非对称加密的公钥以明文方式传输给客户机,使客户机可以用公钥来加密。

我们还是用上面的公钥和私钥来说明。

  • 公钥:2&#DGg
  • 私钥:87h5#9

九、大话HTTP协议-加密问题_第11张图片

第二步:客户机收到服务器传给它的公钥之后,就会用公钥来加密自己的对称加密的密钥,假设是对称加密用的密钥是 superkey 。对称密钥得到加密后,只有服务器的私钥才能解密,拿到 superkey

九、大话HTTP协议-加密问题_第12张图片

最后,客户机和服务器都知道了对称加密的密钥是 superkey,关键是他们从没在网络间以明文传递过这个密钥。

因此,从现在开始他们可以用对称加密的方式互相发送加密的信息,不用再担心被黑客获取信息了。

七、思考

不过做到这一步真的可以高枕无忧了吗?

试想下,给你公钥的不是真实服务器B,而是黑客呢?

九、大话HTTP协议-加密问题_第13张图片

这就是大名鼎鼎的中间人攻击!下篇文章来说说HTTPS是如何解决中间人攻击问题的。

你可能感兴趣的:(计算机网络-HTTP篇,密码学,ssh,安全)