文章目录
- 一、哈希(Hash)函数
- 1、Hash函数的概念
- 2、Hash函数结构
- 3、Hash函数的应用
- 二、Hash算法
- 1、MD5算法
- 2、SHA1算法
- 三、Hash函数的攻击
- 1、生日悖论:
- 四、消息论证
- 1、消息认证基础理论
- 2、消息认证码
- 3、基于DES的消息认证码
- 4、基于Hash的认证码
一、哈希(Hash)函数
1、Hash函数的概念
Hash函数也称散列函数、哈希函数、杂凑函数等。,是一个从消息空间到像空间的不可逆映射。hash函数能将“任意长度”的消息经过hash变换为固定长度的像。所以Hash函数是一种具有压缩性质的的单向函数。通常称其为数字指纹、消息摘要或散列值。
散列值的生成过程为: h=H(M)
其中M为变长的消息,H为hash函数,h为散列值。散列函数主要用于小组认证和数字签名,具有以下性质:
- H可用于任意长度的消息。
- H产生定长的输出
- 对任意消息x,计算H(x)很容易,易于软硬件实现。
- 单向性:又称抗原像性,即给定任意H(x),要找出x在计算上是不可行的。
- 抗强碰撞性:找到任意满足H(x)=H(y)的偶对x=y,在计算上是不可行的
- 抗弱碰撞性:又称抗第二原像性,给定任意消息x ,找到满足y!=x且H(y)=H(x)的消息在计算上是不可行的。
2、Hash函数结构
Hash函数的一般结构称为Hash函数迭代结构,也称MD结构。被广泛用于大多数的Hash函数。MD结构将输入的消息分为L个固定长度的分组,每一组长度为b位。最后一个分组包含消息的长度若长度不足b位,则填充到b位。
迭代结构包含一个压缩函数f。函数f有两个输入,一个是前一次迭代的n为输出,一个是消息的b位分组,并产生一个n位的输出。因为一般情况来说消息分组长度b大于输出长度n,所以称为压缩函数。
3、Hash函数的应用
1)数字签名
由于消息散列值比消息短得多,用于签名笔直接对消息本身签名高效得多。由于Hash值有较好的抗碰撞性,所以使用Hash函数进行签名,能满足消息的完整性、防伪造性以及不可否认性等特点。
2)生成程序或文档的“数字指纹”
Hash函数可用来保证数据的完整性,实现消息认证,防止消息未经授权的修改。通过Hash函数变换得到程序或文档的散列值,即数字指纹,并存放在安全地方;然后在一定时间后定时岁文档或程序求其散列值,与原数据对比,进而检测程序或文档是否被修改或中毒。
3)用于安全传输和存储口令
通过Hash函数生成口令的散列值,然后在系统中保存账号的散列值,这样能有限的防止系统在被入侵后,用户信息不会被直接泄露。
二、Hash算法
1、MD5算法
1)算法描述
MD5算法的输入是长度小于262比特的消息,输出为128比特的消息摘要。输入的消息以512比特分组为单位处理。
具体的算法流程如下:
- 附加填充位。填充一个“1”和若干个“0”,使消息长度模512与448同余,再将原始消息长度以62比特表示填充到末尾。这样消息长度即变成了512比特的整数倍。
- 初始化链接变量。MD5使用四个32位的寄存器A、B、C、D。最开始存放4个固定的32位参数,即初始链接变量。
- 分组处理(迭代压缩)该操作与分组密码的分组处理类似。它由四轮组成,512比特的消息分组Mi被均分成16个子分组,参与每轮16步函数运算,即每轮包括16个步骤。每一步的输入是4个32比特的链接变量和一个32比特的消息分组,输出为32位值。经过四轮64步之后,得到四个寄存器值分别与输入链接变量进行模加,即得到此次分组处理的输出链接变量。
- 步函数:每一轮的步函数是相同的,即使用同一个非线性函数,而不同轮的步函数不同,所以一共使用4个非线性函数。该函数有3个32位的输入变量,一个32位的输出变量。
- 第四轮完成后,做如下运算:A=(A+AA)mod 232,B=(B+BB)mod 232,C=(C+CC)mod 232,D=(D+DD)mod 232.最后将四个寄存器的值做下一次迭代压缩时 的输入变量,知道最后一个消息分组输出128位的散列值。
2、SHA1算法
1)算法原理
- 步骤一:添加填充位,使数据长度=448 mod 512
- 步骤二:添加消息长度,一个62 位块,表示原始消息长度
- 步骤三:初始化缓冲区。160位,表示5个32位寄存器(A,B,C,D,E)
- 步骤四:以512位数据为单位处理消息,四轮,每轮20步,共有四个基本逻辑函数f1,f2,f3,f4
- 步骤五:输出,全部L个512数据块处理完后,输出160位消息散列值。
SHA1哈希值生成图示:
SHA1对单个512位分组的处理过程:
SHA1 压缩函数单轮逻辑:
三、Hash函数的攻击
攻击者的主要目标不是恢复原始的明文。而是用非法的消息替代合法消息进行伪造和欺骗,会hash函数的攻击也是寻找碰撞的过程。
1、生日悖论:
生日悖论问题:两个人的生日是等概率的,在不考虑闰年的情况下,在kg个人中至少有两个人的生日相同的概率大于1/2.问k最小值是多少?
从而当k=100时,这100人中至少有两人生日相同近乎必然事件,然而这个结果似乎不合实际。这就是生日悖论。
对于输出长度为128比特的散列函数求碰撞,类似于以上情况。
要找到一个与特定非消息具有相同的散列值的另一个消息的改路很小。如果不指定散列值,只是在两组消息中找到具有相同散列值的两个消息,问题就容易很多。
所以攻击者就会利用hash空间不够大易制造碰撞来进行攻击。
四、消息论证
1、消息认证基础理论
网络系统安全一般要考虑两个问题:
- 加密保护传送的消息,抵抗被动攻击
- 防止伪造、篡改信息,抵抗主动攻击
认证是抵抗主动攻击的主要手段,对于开放的网络中的各种信息系统的安全性有重要关系。
消息认证的目的:
- 验证消息的来源是真实的而不是冒充的
- 验证消息的完整性,检测是否被篡改。
安全认证模型:
安全认证系统的目标:
- 接收方能检验消息的合法性、真实性和完整性
- 除了合法的消息发送者,其他人不能伪造合法的消息
- 消息的发送方和接受方不能抵赖
消息认证函数分类: - 信息认证码:对信源消息的一个编码函数,需要秘钥
- 散列函数认证:一个公开函数,将消息映射为固定长度的像
- 基于DES的消息加密认证:消息与加密后的密文认证。
2、消息认证码
3、基于DES的消息认证码
4、基于Hash的认证码