之前只简单了解了一点哈希的过程,突然看到一些相关内容,再加上数字签名中再次有了新的认识,便忍不住先来再次深入学习一下哈希。
哈希函数(散列函数)的应用
Hash函数(杂凑函数):将任意长度的消息x压缩固定为固定长度的值y
功能:保证数据完整性:在电子签名(eg:DSS、RSA数字签名)方面应用较广
应用:检测消息完整,提高数字签名速度
比特币(密码学中使用到了哈希和签名):账本使用区块链,交易根据Proof of Work推算出哈希的更适合
哈希函数的属性
基本属性:
压缩性:产生定长输出
有效性:对任意给定消息进行很快
安全属性(一般可认为抗碰撞就一定抗原像):抗原像(单向性)——导致只能穷举,但是穷举需要实现穷举次,很困难故安全性能强 ——复杂度
抗第二原像性:由于输入远比输出多,那么会有两个字符串对应同一输出{非常难找,认为没有})——复杂度
抗碰撞性(生日攻击):难以找到另一与之相等字符串——复杂度
攻击方法
碰撞攻击:如果输入不同,输出相同,即意味着两个不同文件可产生相同指纹,从而伪造签名
特殊攻击方法,针对不同杂凑算法有不同攻击方法
生日攻击(可用于各种哈希函数,是一种通用攻击方式):
生日问题涉及的重要概念:
- 1/2:只要攻击的成功概率超过1/2就足以证明该攻击模式是具有威胁的(一般来说,只要复杂度低于穷举的复杂度,或者破解概率高于穷举,那么都算攻击成功)
- 为什么会出现这种状况:此例子中,选择的两个人都是随机的,而不是固定一个再去找另一个(这样的话概率会很低:1/364)
定理:设Hash函数h的输出值长为n比特,则经过约次杂凑运算,找到一对碰撞的概率大于1/2
长度扩展
可能刚好知道某一部分的结果,在后面进行一些填充,得到哈希值刚好一样
多碰撞攻击
构造n种消息
注 :“我国王小云院士目前已攻破了美国诸多算法,例如这里的MD5,SHA-1,SHA-0等”(真的好厉害),美国不得不提出新的算法
标准算法的设计
中国标准SM等一系列算法
eg:SM3
填充
迭代压缩
迭代过程
消息扩展
压缩函数
MD5,SHA-1,SHA-2
哈希爆破用到的一些:
MD5输出128bit、SHA1输出160bit、SHA256输出256bitSHA-1
是160位的哈希值,而SHA-2
是组合值,有不同的位数,其中最受欢迎的是256位。
因为SHA-2
有多种不同的位数,导致这个名词有一些混乱。但是无论是“SHA-2
”,“SHA-256
”或“SHA-256位
”,其实都是指同一种加密算法。但是SHA-224
,“SHA-384
”或“SHA-512
”,表示SHA-2
的二进制长度。还要另一种就是会把算法和二进制长度都写上,如“SHA-2 384
”。
SHA3
运用了海绵结构
他的输入,输出次数不定
因此结构,输入和输出长度不定
每一块都要经历此过程
再分别从侧面正面切片行列旋转,交叉各种变换(这个过程目前只进行了了解)