一. 加密算法描述
1. 填充
(a)添加1:在消息末尾添加一个1bit的“1”
(b)添加0:添加0直到消息长度为512的整数倍,最后一个512bit的分组的最后64bit需要空出来以保存原始的消息长度。
(c)添加原始的消息长度:消息长度 < 2^64 bit
2. 计算W0~W79
将输入分组的512bit分成32bit*16组,并将它们命名为W0~W15。其他的:
3. 分组处理
通过上述80个步骤的反复执行,SHA-1就能够将已经填充的信息全部混入这160比特的内部状态中,而SHA-1所输出的散列值,就是所有处理结束之后的最终的内部状态(160bit)
单步处理:
由于上述处理要循环80个步骤,因此输入分组中一个比特的变化就会影响到散列值中几乎所有的比特
二. 对单项散列函数的攻击
1. 暴力破解:利用文件的冗余性生成具有相同散列值的另一个文件,这是试图破解单向散列函数的“弱抗碰撞性”的攻击
文档文件的冗余性:在不改变文档意思的前提下能够对文件的内容进行修改的程度。
2. 生日攻击:找到s散列值相同的两条消息,而散列值则可以是任意的,这是试图破解单向散列函数的“强抗碰撞性”的攻击
生日问题:在N个人中,如果至少有两个人生日的一样的概率大于二分之一,那么N至少是多少?(排除2月29的情况)
区分:两个人的生日是某个特定的日起&&只要有两个人的生日相同,不管哪一天
解题思路:1-N个人生日全不一样
(1)N个人生日全不一样的组合的数量:
365364。。。(364-N+1)
(2)所有情况的数量:
365365*。。。365=365^N
(3)1 - 365364*。。。*(364-N+1)/ 365^N
当N=23时,值约为0.507297 > 0.5
单向散列函数能够辨别出“篡改”,但无法辨别出“伪装”