Pulpcode

捕获,搅碎,拼接,吞咽

0%

非对称加密

首先明确一点,此博客讨论的非对称秘钥只限于RSA,而非DSA。

基础概念

如果我们不谈公钥和私钥,仅仅谈非对称秘钥:假如你用一个算法,生成了两把key,key1和key2。那么key1加密的数据,只有key2能解开,而key2加密的数据只有key1能解开。

当然我思考过如果把公钥当私钥使用,私钥当公钥使用会怎样的问题,讨论请看这里:传送门

简单的来说,通过私钥推算出公钥是非常容易的。

公钥加密,私钥解密:

此处是为了安全性,比如对称加密,那就只有一种钥匙,那么传播传播着,大家就都知道了。而如果是非对称加密,我将自己的公钥公开,而只有私钥才能打开,这样我维护好自己的私钥不让别人知道,就一定可以保证数据的安全性。

私钥加密,公钥解密:

这种操作是为了验证真实性,因为私钥只有一把,所以如果我收到一个能被我公钥打开的加密文件,那么我一定可以肯定,这个文件是被那唯一一份私钥加密过的,这就验证这份文件的真实性。

摘要算法

摘要算法将一个任意长度的数据变换为一个定长的数据串,这一定长的数据串被称为消息摘要,也有数据指纹之称。

一般将一些数据文件放在远程服务器上供别人fetch时,会将这个数据文件做一个摘要算法,将摘要结果也放到服务器上。这样如果我们将这两个文件都拿下来,将fetch来数据文件做摘要算法再与fetch来的摘要结果进行对比。如果相同,就说明在传输过程中,数据为被篡改,也未丢失。

MD5就是一种很常见的摘要算法。

通过介绍公钥私钥和摘要算法,就可以引入“数字签名”这个概念了。

数字签名

数字签名实际上是非对称密码算法和消息摘要算法的一种组合应用,数字签名的过程如下:

Alice准备了一份合同M;
Alice用摘要算法计算出该合同M的消息摘要MD;
Alice用非对称算法和自己的私钥对合同消息摘要MD进行加密,该密文S就是合同的数字签名;
Alice将合同M和合同的数字签名S合并在一起,通过网络传送到合同的接受者Bob;
Bob收到Alice的合同M及合同的数字签名S;
Bob用Alice的公钥对合同签名S进行解密,得到Alice计算的合同摘要MD;
Bob采用相同摘要算法对收到的合同重新计算消息摘要MD';
Bob比较MD与MD'是否相等?

signature

如果结果相等,根据摘要算法的特性表明合同在传输过程中未被篡改。同时由于非对称加密算法的特性可以断定合同确实是Alice发送的,因为用Alice公钥能解密成功的数据只有Alice用她自己私钥对其进行加密才能产生,而她的私钥其它人是无法获取的。

其目的在于验证数据的完整性和不可否认性。

这里需要特别注意一点的是,数字签名并不能保证数据在传输过程中是保密的。也就是说抓包是可以看到的。所以数字签名适合与那些,只要证明是我写的就行了,你看见内容也没什么卵用的信息。

还需要确认一点的是,因为我们并没有对数据本身做打包,所以这个包很有可能被人截获,修改再发给我们,那么的验证完成性的意义正在于此。

ssh

ssh中也有两个地方使用了非对称加密,首先ssh登录本身就使用非对称加密,来保证密码传输中不会被泄露。还有一种叫公钥登录的东西,可以不用输密码登录,这种东西,我倒是在git中常用到。

首先还是要区分这两种用法,不要将它们混淆。

ssh的过程是这样的,首先客户程序发送登录请求,远程主机将公钥发送给客户程序,客户程序接受到公钥后,用公钥将自己的密码加密,发送给远程主机,远程主机接收到加密后的密码,用私钥进行解密,然后验证登录。

公钥登录

每次登录都要输入密码是一件非常麻烦的事情,我们可以把自己的公钥放在远程主机上,这样每次登录请求的时候,服务器会把一个随机字符发送给客户程序,客户端程序使用私钥加密(签名)后发送给远程主机,远程主机用公钥进行解密,然后比较判断,是否可以登录。

中间人攻击

待更新。。。

数字证书

待更新。。。