图解密码学单向散列函数

什么是单向散列函数(哈希函数)

单向散列函数就是一种特殊的函数,无论输入的内容的长度多少,它的输出长度都是固定的,而且其输出内容会随着输入内容的改变而改变,而且输入内容小小的改变就会引起输出内容的巨大改变,而且无法从输出内容恢复原来的输入内容。就是因为单项散列函数有如此特殊的特性,所以它一般用作文件完整性检验,软件完整性检验等等,保证内容没有被恶意篡改。

单向散列函数的应用

消息认证码:

消息认证码中也使用了单项散列函数,只不够单项散列函数的生成需要使用密钥。现在假设有A和B双方,A想要将信息发送给B,A在使用加密算法将自己的信息加密后发送给B的同时,还有使用密钥和单项散列函数生成消息认证码发送给B,B在收到密文后将其解密得到明文,然后使用密钥看一下是否能够将收到的消息认证码进行解密。如果无法使用密钥将消息认证码解密,那么就证明这个消息认证码是别人篡改的,如果正常解密出来了,那么就证明是正常的,如果解不出来,我们就不会接收本次传递的信息,因为它的消息认证码都被篡改了,我们无法确认该信息是谁发出的,而且正确性也无法保证,然后我们将明文进行同样的散列计算,如果得到的散列值和接收到的散列值相同,那么就证明它接收到的信息是正常的,如果对不上就说明这个信息在传输过程中被篡改。

密码加密

我们在linux的passwd文件中就会看见这种情况,我们不可能将用户的相关密码信息以明文的方式进行保存。所以linux就使用单项散列函数将用户的明文信息进行加密,然后进行保存,但是如果多个用户的密码都是相同的,单项散列函数根据多个相同的密码所产生出来的散列值也必定是相同的,所以这个时候就会在计算单项散列值前进行“加盐”的操作,这个操作就是在原有用户密码的基础上添加一些随机数,然后将添加随机数后的用户密码进行单项散列值的操作,这样passwd文件中即便有些用户的密码是相同的,在passwd文件中也以不同的形式出现。

伪随机生成器

利用单向散列函数的“雪崩效应”,即微小的内容引起巨大的改变,我们可以利用这个特性去进行随机数的生成。

一次性口令

我们同样可以利用单项散列函数进行一次性口令的生成,同样利用了它的雪崩效应

单向散列函数也有不安全的地方

单向散列函数不安全的地方称作“碰撞”,什么是碰撞?碰撞即两个不同的内容拥有相同的散列值,如果一个散列函数经常出现不同的内容具有相同的散列值,那么这个散列函数就不是一个合格的散列函数,一个厉害的散列函数应该具有高强度的抗碰撞性。如果一个散列函数具备碰撞性,一些不法分子通过暗自改写内容,保证修改后的内容计算出来的散列值依然不变,这样不法分子修改了内容,还没有被人发现,这就造成了不利的影响。

单向散列函数的具体例子

MD4

MD4是一种固定输出128比特的散列函数,但是已经被找到碰撞的方法,所以不安全不再使用了

MD5

MD5是一种固定输出128比特的散列函数,它的强抗碰撞性也被攻破,所以它也不安全了

SHA-1

SHA-1是一种固定输出160比特的散列函数,它的强抗碰撞性在2005年就被攻破了,除了一些兼容性情况,我们也不使用它。SHA-1的长度上限是2^64-1

SHA-256、SHA-384、SHA-512

这三种散列函数被统称为SHA-2,它们后面的数字代表了它们输出的散列值的比特数,SHA-2的长度上限是2^128-1

PIREMD-160

PIREMD-160是一种固定输出160比特的散列函数,这一系列的还有PIREMD-128,PIREMD-256,PIREMD-320等一些版本。PIREMD-160已经被攻破,所以不建议使用。

SHA-3

SHA-3背后的计算算法也是通过NIST组织进行大规模的筛选而选出来的。最后选中的算法名称叫Keccak。

Keccak选中的理由:

SHA-3标准中总共规定了SHA3-224,SHA-3-256,SHA-3-384,SHA-3-512,和上面一样SHA-3后面跟的数字的含义同样代表着SHA-3散列函数最终输出散列值的比特。在输入长度上限方面,SHA-1的长度上限是2^64-1,SHA-2的长度上限是2^128-1,而SHA-3没有长度限制。

我们要使用哪些散列函数

SHA-2、SHA-3,其他被破解的散列函数就不推荐使用了,但是像在路由器上路由协议的邻居验证,还是有使用像md5这样的散列函数,这是为什么呢?其实想一下就知道了,因为路由协议的邻居认证要求不像其他场景那样,路由协议的邻居认证的基本原理就是预共享密钥,然后路由器使用这些预共享密钥生成md5散列值,最后将散列值放在报文中去进行邻居认证,其他路由器接收到报文判断md5是否正确,如果正确就代表是一个允许的邻居,如果不正确就代表不是一个允许的邻居。中间人并不能从散列值中还原密码,它能做的就是修改报文中的散列值的内容去影响邻居的建立。所以在这种情景下,md5这类计算比较快速的散列函数依然还有在使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mllllk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值