00:01
现在Bob决定给pet写一封信,信件的内容不需要加密,但是要保证pet收到信之后呢,能够确认这封信是没有被篡改过的,也就是说需要保证信息的完整性。那我们应该如何做呢?实现信息完整性的主要的手段呢是摘要算法dIgEst,也就是摘要的意思,也就是我们常说的哈希函数,它是一种数据映射关系。为了方便举例,我们假设一个任意长度的字符串数据Z,经过哈希运算之后呢,会得到固定长度的字符串数据H,那么我们说H就是Z的哈希结果,又称数据指纹或者是摘要。你可能听说过MD5,其实MD5呢,就是一个非常典型的摘要算法,例如我们这里面有两个字符串A和AAA,那经过MD5运算之后得到的哈希结果虽然是不同的,但是他们的度是一样的,所以呢,我们说有任意长度的Z,经过哈希运算之后,可以生成一个固定长度的H。
01:07
那摘要算法呢?需要有以下的四种特性,第一是不可逆。我们可以把摘要算法理解成单向的加密算法,它只有算法,没有密钥。我们把摘要算法和前面我们提到过的AE以及RA做个比较,那AES算法呢,属于对称加密的一种,因为它需要一个密钥去加密和解密,而r sa算法呢,是非对称加密的典型算法,它需要两把钥匙,公钥和私钥,那在加密和解密的过程当中呢,都需要用到这两把钥匙,因此呢,无论是对称加密还是非对称加密。那么我们解密的时候都是需要钥匙的,但是我们现在看到的这个摘要算法,它只有算法,没有密钥,加密后的数据呢,是没有办法解密的,不能从摘要逆推出原文,也就是只能把Z加密成H,但是呢,不能从H解密出Z。
02:07
第二呢,是难题友好性,通俗的理解呢,就是要得到难题的答案,我们只能暴力枚举,也就是说,如果想要从H破解出Z,只能一个一个的去试验,用Z进行摘要运算,看一看运算后的结果是否和H一致,如果一致就破解成功,如果不一致,那么就再试下一个。那第三呢是发散性,意思就是只要原文Z有一点点的改动,哪怕只是一个标点符号,那么摘要运算后的结果就会大相迳庭,所以呢,我们也称这种现象为雪崩效应。第四个呢,是抗碰撞性,经过摘要运算后的数据长度呢,它是固定的,尤其是原始数据非常多的时候,经过摘要计算,那么原始数据的长度呢,可能会被缩短,这就相当于把数据从一个大空间映射到了小空间,所以呢就存在冲突,也叫做碰撞的可能性,简单点理解呢,就是经过摘要运算之后呢。
03:08
可能会有两份不同的原文对应同一份摘要,两个不同的Z对应同一个H,那么好的摘要算法呢?必须能够抵抗冲突,抗碰撞,让这种可能性尽量的小。原文不同,计算后的摘要也要不同。那目前为止流行的摘要算法呢?包括MD5以及二等。际上是系的法的统。常见的二二。意思就是能够生成28个字节、32个字节以及48个字节的摘要。
04:01
那我们再回到前面的话题,现在Bob呢,决定给pat写一封信,信的内容是不需要加密的,但是呢,要保证pet收到信之后能够确认信的内容是没有被篡改过的,也就是需要保证信息的完整性。我们呢,可以利用刚才我们提到的摘要运算,具体的流程是这样的。第一步,鲍B写完信之后,先用摘要算法生成信件原文的摘要,也就是message dIgEst。第二步,鲍B将摘要附在信件原文的下面,一起呢发送给pet。那派收到信之后呢,也是两个步骤,第一个步骤,Pet使用和Bob一样的摘要算法,加密信件的原文,得到信件的摘要。第二个步骤,将加密后的摘要和Bob在原文中附加的摘要做一下对比,如果一致,说明信件呢,是没有被篡改过的。这种方式呢,看似好像是解决了我们数据完整性的问题。
05:03
但是有一个致命的漏洞就是如果信件被黑客截获,并且黑客直接修改了原文,并且根据原文直接生成了新的摘要,然后附加在原文的下面,伪装成Bob将信件发送给pet,那么pet接收后呢,是完全察觉不出来信件其实已经被篡改了,所以说摘要算法不具有机密性,如果明文传输,那么黑客可以修改了原文之后呢,把摘要也一起改了,那我们说还是没有办法鉴别出信息传输的完整性,我们可以结合前面学过的知识思考一下。如何才能真正的保证数据无法被篡改呢?答案就是一定要加入密钥,确保我们信息的机密性。那么具体的流程是这样的,第一个步骤呢?鲍B写完信之后,先用摘要算法生成信件的摘要,第二个步骤,鲍B使用自己的私钥将摘要加密,加密后的结果我们称之为数字签名。第三个步骤,B将数字签名附在信的原文下面,一起发给pet。
06:13
Pet授信之后呢,也是三个步骤,第一个步骤,Pet取下数字签名,用Bob的公钥解密,得到信件的摘要,第二个步骤,Pet使用和Bob一样的摘要算法加密信件的原文,得到信件的摘要。那第三个步骤。派呢,将前面两步得到的摘要进行比对,如果一致信件就是报不发的,并且呢是没有经过篡改的,这个过程我们管它叫做验签,也就是验证签名的意思。那么通过Bob的签名流程和pet的验签流程,我们发现。即使黑客修改了信件的原文,即使黑客能够通过摘要算法生成新的摘要,但是因为它没有Bob的私钥,因此呢,就无法对摘要进行加密,无法生成只能有Bob才能生成的签名,所以呢,这个信也就没有办法被篡改了。
07:08
那微信支付中的签名和验签的过程呢?就是这个原理,那么经过以上的步骤呢,就可以将信件的原文取出来了。那刚刚我们讲的这个流程呢,主要是针对数字签名,数字签名可以保证信息传递的过程当中不可以被篡改,以及信息传递者的身份的认证。
我来说两句