网络安全-哈希算法和数字签名

1. 单向散列算法

  • 单向散列算法也称为哈希算法,它是一种不可逆的单向数学函数,把哈希算法应用于任意长度的一块数据,可以将它映射为一段数据唯一的、不可逆的、定长的、极其紧凑的字符串,这个字符串便称为散列值、哈希值或消息摘要。
  • 常见的单向散列算法有由Ron Rivest设计的可以产生128位散列值的MD5和由NSA设计的可以产生160位的散列值的SHA-1,还有SHA-224、 SHA-256、SHA-384 和SHA-512等。

常见 HASH 算法:

SM3 SHA MD5
Hash值 256bit 160bit 128bit
分组处理长 512bit 512bit 512bit
基本字长 32bit 32bit 32bit
步数 64(3*16) 80(4*20) 64(4*16)
消息长 <2^64bit 2^64bit 不限

MD5: MD5 是由 Ron Rivest 设计的可产生一个 128 位的散列值的散列算法。MD5 设计经过优化以用于 Intel 处理器。这种算法的基本原理已经泄露,这就是为什么它不太受欢迎的原因。

SHA-1:与 DSA 公钥算法相似,安全散列算法 1(SHA-1)也是由 NSA 设计的,并由 NIST 将其收录到 FIPS 中,作为散列数据的标准。它可产生一个 160 位的散列值。SHA-1 是流行的用于创建数字签名的单向散列算法。

HASH 算法主要应用:

1)文件校验   
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。   
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。   
2)数字签名   
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。   
3)鉴权协议   
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

2. 数字签名

  • 数字签名,顾名思义,就像在办公中用笔对纸质文件进行签名,它是在计算机上对数据文件进行签名,用于鉴别数字信息,验证数据发送方的身份,保证数据的完整性和不可否认性。
  • 它结合使用了非对称加密技术与哈希算法来实现,它包含两种互补的运算:一个用于数字签名的签署,另一个用于数字签名的验证。签名和验签的过程一般由启用 PKI 的应用程序完成,首先由数据的发送方用哈希算法生成数据的哈希值,然后用自己的私钥将这个哈希值加密形成数字签名,将它与数据一起加密发送给接收方;接收方进行解密获得数据和数字签名后,用发送方的公钥对数字签名进行解密,如果成功解密,即证明了发送方的身份;对数字签名解密得到数据的哈希值之后,数据的接收方对数据用相同的哈希算法生成另一个哈希值,然后将这两个哈希值进行比较,如果两者相同,则证明这块数据极有可能在传输期间没有被篡改。.

数字签名签署和验证数据的步骤如图所示:

网络安全-哈希算法和数字签名_第1张图片

PKCS1 PKCS7 标准格式的签名:

1. PKCS1签名:即裸签名,签名值中只有签名信息。

2. PKCS7签名:签名中可以带有其他的附加信息,例如签名证书信息、签名原文信息、时间戳信息等。

PKCS7 attached detached 方式的数字签名:

1. attached 方式是将签名内容和原文放在一起,按 PKCS7 的格式打包。PKCS7的结构中有一段可以放明文,但明文必需进行ASN.1编码。在进行数字签名验证的同时,提取明文。这里的明文实际上是真正内容的摘要。

2. detached 方式打包的 PKCS7格式包中不包含明文信息。因此在验证的时候,还需要传递明文才能验证成功。同理,这里的明文实际上是真正内容的摘要。


网络安全-哈希算法和数字签名_第2张图片
微信公众号:海若Hero

你可能感兴趣的:(网络安全-哈希算法和数字签名)