图解密码技术笔记单向散列函数——获取消息的指纹
Posted nceuaprsf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解密码技术笔记单向散列函数——获取消息的指纹相关的知识,希望对你有一定的参考价值。
单向散列函数——获取消息的指纹
单向散列函数(one-way hash function),有一个输入和输出,其中输入称为消息(message),输出称为散列值(hash value)。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以用来检查消息的完整性。单向散列函数的性质
根据任意长度的消息计算出固定长度的散列值:
散列值得长度和消息的长度无关,消息无论是1比特,还是100MB,单向散列函数都会计算出固定长度的散列值,以SHA-1单向散列函数为例,它计算出的散列值的长度永远是160比特(20字节)能够快速计算出散列值
消息不同散列值也不同:
两个不同的消息产生一个散列值的情况称为碰撞(collision),难以发现碰撞的性质称为抗碰撞性。 要找到和该条消息具有相同散列值的另一条消息是非常困难的,这一性质称为弱抗碰撞性 要找到散列值相同的两条不同的消息是非常困难的,这一性质称为强碰撞性 密码学中使用的单向散列函数,不仅要具备弱抗碰撞性,还要具备强抗碰撞性具备单向性:
单向性是指无法通过散列值反算出消息的性质单向散列函数的实际应用
检测软件是否被篡改:
很多软件会把通过单向散列函数计算出的散列值公布到网上,用户可以下载完软件后计算散列值,通过与软件提供者的散列值对比,看软件是否被篡改基于口令的加密(PBE):
基于口令的加密(password based encryption,PBE),PBE的原理是将口令和盐(salt,伪随机数生成器生成的值)混合后计算其散列,然后将这个散列值用作加密的密钥,通过这样方法可以防御针对口令的字典攻击消息认证码:
消息认证码是将“发送者和接受者之间的共享密钥”和“消息”进行混合后计算出的散列值。使用消息认证码可以检测并防止通信过程中的错误、篡改以及伪装。消息认证码在SSL/TLS中也得到运用数字签名:
数字签名处理过程非常耗时,因此不会对整个消息内容直接施加数字签名,而是先通过单向散列函数计算出消息的散列值,然后再对这个散列值施加数字签名伪随机数生成器:
密码技术中所使用的随机数具备“事实上不可能根据过去的随机数列预测未来的随机数列“这样的性质,为了保证不可预见性,可以利用单向散列函数的单向性。一次性口令:
一次性口令(one-time password),一次性口令常用于服务器对客户端的合法性认证。通过使用单向散列函数可以保证口令只在通信链路上传送一次,因此即使窃听者窃取了口令,也无法使用单向散列函数的具体例子
MD4,MD5:
MD4能够产生128比特的散列值(RFC1186),现在已经不安全
MD5能够产生128比特的散列值(RFC1321),MD5的强抗碰撞性已经攻破,现在已经不安全
SHA-1,SHA-256,SHA-384,SHA-512:
SHA-1能够产生160比特的散列值,SHA-1的强抗碰撞性已经被攻破,现在已经不安全 SHA-256,SHA-384,SHA-512它们的散列函数分别是256比特,384比特,512比特。这些单向散列函数合起来统称SHA-2RIPEMD-160:
RIPEMD-160能够产生160比特的散列值对单向散列函数的攻击
暴力破解:对单向散列函数进行暴力破解时,每次改变一下消息值然后对这些消息求散列值,这相当于尝试破解单向散列函数的“弱抗碰撞性”的攻击。 生日攻击:生日攻击是找到散列值相同的两条消息,而散列值则可以是任意值,这相当于尝试破解单向散列函数的“强抗碰撞性”的攻击。
以上是关于图解密码技术笔记单向散列函数——获取消息的指纹的主要内容,如果未能解决你的问题,请参考以下文章