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

本文介绍了单向散列函数的基本概念及其在信息安全领域的多种应用,包括检测软件篡改、基于口令的加密、消息认证码等,并列举了一些常见的单向散列函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单向散列函数——获取消息的指纹

单向散列函数(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比特的散列值



对单向散列函数的攻击


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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值