菜鸟笔记
提升您的技术认知

浅谈数字摘要

最近在开发GB/T-28181视频监控联网系统,其中要求对信令、数据做数据完整性保护,以保证信令安全,防止系统数据被恶意篡改。

数字摘要信令认证的交互流程如下:

业务需求加好奇心,让我们一起来揭开数字摘要的面纱,探一探究竟。

数字摘要其实就是一种单向加密算法,是一种用来保证信息完整性的技术。具体就是通过Hash函数,将任意长度的消息(明文),“摘要”成固定长度(如128 bits)的短消息(即密文)。对于同一Hash函数,不同的明文摘要成的密文其结果是不同的,而同样的明文摘要结果必定一致,并且即使得到了摘要也不能反推出明文。

说到Hash函数,让我们来简单了解一下。Hash函数,也称散列函数,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。Hash函数可以实现一个伪随机数生成器(Pseudo-Random Number Generator,PRNG),那么不同Hash函数的性能比较,就可以通过其在伪随机数生成方面的比较来衡量。一般来讲,一个完美的Hash函数,就是在一个特定的数据集上产生的碰撞(即两个不同的输入产生了同样的散列值)最少的Hash函数。

最早的PRNG算法由计算机之父冯.诺依曼提出,他的办法非常简单,就是将一个数的平方掐头去尾,只保留中间的几位数。例如,一个四位的二进制数1001(即十进制的9),平方为01010001,如果输出是4位的话,掐头去尾,得到中间的0100。当然这种方法得到的数字并不是很随机,很容易出现两个信息产生相同的散列值,比如0010,按照上面的方法也能得到0100。此外还有梅森旋转法等。

现在互联网上广泛使用的Hash算法有MD5或SHA-1及其变种,它们可以将不定长的信息变成定长的128 bits或160 bits。

MD5 - Message Digest 5,消息摘要第5版,是Rivest在1991年对更早的消息摘要版本MD4的改进版本。以512位分组输入,输出为4个32位字(128 bits)的级联。MD5在抗分析和抗差分方面变现较好。

SHA-1,Secure Hash Algorithm,安全哈希算法, 主要用于数字签名算法(DSA),其作用是将长度小于2^64 bits的消息,映射产生一个160 bits的散列值(消息摘要)。SHA-1抗穷举攻击(Brute Force)性更好。

另外,SHA-1的变体还可以产生192 bits和256 bits的消息摘要。

Hash算法是现代密码体系中的一个重要组成部分。在数字签名协议中,Hash函数扮演了一个重要的角色。对数字摘要(即Hash值)进行数字签名,在统计上认为与对文件本身进行数字签名是等效的,但是可以显著降低运算量,提高计算速度。

数字摘要与数字签名、加密等技术结合使用的过程如下:

1. 发送方S将原文信息进行Hash运算,得到Hash值,即数字摘要MD;

2. 发送方S用自己的私钥PVS,采用非对称加密算法RSA,对数字摘要MD进行加密,得到数字签名DS;

3. 发送方S用对称算法DES的对称密钥SK对原文信息、数字签名DS及发送方证书的公钥PBS采用对称算法加密,得到加密信息E;

4. 发送方S用接收方R的公钥PBR,采用RSA算法对对称密钥SK进行加密,形成数字信封DE。该过程就像将对称密钥SK,装进了一个用接收方的公钥加密的信封里。

5. 发送方S将加密信息E和数字信封DE一起发送给接收方R;

6. 接收方R将收到的数字信封DE用自己的私钥PVR解密,取出对称密钥SK;

7. 接收方R用对称密钥SK通过DES算法对接收到的加密信息E进行解密,还原出原文信息、数字签名DS以及发送方证书的公钥PBS;

8. 接收方R用发送方S的公钥PBS解密数字签名,得到数字摘要MD;

9. 接收方R将原文信息用同样的Hash算法,求得一个新的数字摘要MD1;

10. 比较两个数字摘要MD和MD1,若一致,则认为收到的就是未被篡改的原文,否则,认为原文被篡改,拒绝该签名。