散列函数与消息鉴别

散列函数

哈希函数,一种单向密码体制,从明文到密文的不可逆映射,只有加密过程,没有解密过程

散列函数作用:M(输入消息)⟶MD(消息摘要/散列码)

作用:生成文件或者其他数据块的“数字指纹”

性质

基本特性

  • h(m)算法公开,不需要密钥
  • 具有数据压缩功能,可将任意长度的输入数据转换为一个固定长度的输出
  • 对任何给定的m,h(m)易于计算

安全性要求

  • 单向性:给定散列值h(m),求得m在计算上不可行
  • 弱抗碰撞性:对任意给定消息m,寻找与m不同的消息m'使得它们的散列值相等,在计算上不可行
  • 强抗碰撞性:寻找任意两个不同的消息m和m',使得两者散列值相等,在计算上不可行

碰撞攻击:两个不同的消息产生了相同的哈希值(必然存在冲突)

应用

  • 保证数据的完整性:验证散列码是否相等
  • 单向数据加密:口令表存储散列值进行对比验证
  • 数字签名:提高签名速度,不泄露原始消息

散列函数的构造和设计

简单的散列函数

E526488BA919AEC403644682D1F4D227.png

特点:简单高效

攻击方法:第二原像攻击(不满足弱抗碰撞)

DF469AB0A5F5067654BD05B74D76093A.png

迭代型散列函数

image-20220604165718209.png

使用基于对称分组密码的CBC/CFB工作模式(使用公钥密码算法计算效率太低,无实用价值)

密钥k不能公开,否则会使得攻击者构造消碰撞十分容易

以CBC模式公开密钥下的攻击为例:

image-20220604170443794.png

当然也有直接设计散列函数的,不基于任何假设和密码体制,通过构造复杂的非线性关系达到单向性要求(有MD2~5、SHA系列)

安全散列算法SHA

SHA1

NIST(美国国家标准与技术研究院)发布的数字签名标准DSS中使用的散列算法

大端存储

输入:最大长度为$2^{64}-1$位

输出:160位消息摘要

处理:输入以512位数据块为单位处理

  1. 消息分割和填充

最后一个报文分组

image-20220604171513730.png

  1. 初始化缓冲区:使用5个32位的字单元作为计算MD的缓存

A=67452301 B=EFCDAB89 C=98BADCFE D=10325476 E=C3D2E1F0

  1. 以512位一组处理消息

image-20220604172252453.png

SHA系列算法比较

算法消息长度分组长度字长散列值长使用常数基本函数处理步骤
SHA-1<264512321604×32480
SHA-256<2645123225664×32664
SHA-384<212810246438480×32680
SHA-512<212810246451280×32680

对散列函数的攻击

生日悖论和生日攻击

随机23人中,至少有两人生日相同的概率为0.5

实测如下(还真两次都出现相同生日的了)

image-20220604180047695.png

转换成攻击描述:给定一个散列函数H(x),有n个可能的输出;若H有k个随机输入,问k必须取多大才能使至少存在一个碰撞的概率大于0.5

image-20220604180535462.png

消息鉴别

鉴别是指在两个通信者之间建立通信联系后,每个通信者对收到信息进行验证,以保证收到信息的真实性,确保:

  • 报文是由确认的发送方产生的
  • 报文内容没有被篡改过
  • 报文是按与发送时的相同顺序收到的

基于加密技术的消息鉴别

利用对称加密体制实现

image-20220604193409336.png

局限性:需要接收方有某种方法能判定解密出的明文是否合法

利用公钥密码体制实现

提供消息鉴别

D01F368F962F5E2EE9B340F953DEF2DC.png

注意:发送方使用自己的私钥加密!!!(和正常公钥密码体制中用公钥加密不一样)

能够实现数字签名,抗抵赖,提供鉴别

提供消息鉴别和机密性保护

E34AEB546A1573F274BBAD354D647A54.png

基于散列函数的消息鉴别

消息鉴别码

报文/消息鉴别码(MAC)用于提供数据原发鉴别和数据完整性的密码校验值

一个MAC算法由一个秘密密钥k和参数化的一簇函数hk构成,函数性质如下:

  • 容易计算
  • 压缩:hk把任意具有有限长度的一个输入x映射成一个具有固定长度的输出hk(x)
  • 强抗碰撞性

EFC921B47A8FEE6DAD5B19A34D3992E7.png

MAC函数无需可逆,因为整个过程中不需要解密

上图所示方法只能提供消息鉴别,不能提供机密性(消息以明文传输)

以下两种方式提供机密性

7F73D79EA6F0ACA5FE5B8DA4BBBFD128.png

基于散列函数的消息鉴别

3BBC7BC6022371A5570AAAE8218E63A1.png

HMAC算法

带密钥的单向散列函数

最后修改:2022 年 06 月 04 日
如果觉得我的文章对你有用,请随意赞赏