图解密码技术笔记单向散列函数——获取消息的指纹

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-2

RIPEMD-160:

RIPEMD-160能够产生160比特的散列值



对单向散列函数的攻击


暴力破解:对单向散列函数进行暴力破解时,每次改变一下消息值然后对这些消息求散列值,这相当于尝试破解单向散列函数的“弱抗碰撞性”的攻击。 生日攻击:生日攻击是找到散列值相同的两条消息,而散列值则可以是任意值,这相当于尝试破解单向散列函数的“强抗碰撞性”的攻击。





以上是关于图解密码技术笔记单向散列函数——获取消息的指纹的主要内容,如果未能解决你的问题,请参考以下文章

密码技术--单向散列函数即Go语言应用

密码技术之认证

单向散列函数的价值和具体实现的详细使用

图解密码技术------第8章 消息认证码

MD5算法原理及实现

密码学初级教程(二)公钥密码RSA与单向散列函数与消息认证码