单向散列函数的性质

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/82813519

一 根据任意长度计算出固定长度的散列值

首先,单向散列函数的输入必须能够是任意长度的消息。其次,无论输入多长的消息,单向散列函数必须都能够生成长度很短的散列值,如果消息越长生成的散列值越长的话就不好用了。从使用方便的角度,散列值的长度最好是短且固定的。

二 能够快速计算出散列值

计算散列值花费的时间必须要短。尽管消息越长,计算散列值的时间也会越长,但如果不能在现实的时间内完成计算就没有意义了。

三 消息不同,散列值也不同

为了能够确认完整性,消息中哪怕只有1比特的改变,也必须有很高的概率产生不同的散列值。如下图所示:

如果单向散列函数计算出的散列值没有发生变化,那么消息很容易就会被篡改,这个单向散列函数就无法用于完整性的检查。两个不同的消息产生同一个散列值的情况称为碰撞。如果要将单向散列函数用于完整性的检查,则需要确认在事实上不可能被人为地发现碰撞。

难以发现碰撞的性质为抗碰撞性。密钥技术中所使用的单向散列函数,都需要具备抗碰撞性。

下面以Alice用单向散列函数来检查文件完整性的场景为例,说明什么是抗碰撞性。

假设Alice所使用的单向散列函数不具备抗碰撞性。

Alice在回家之前得到下面的散列值:

Alice在睡觉的时候,主动攻击者Mallory入侵了Alice的计算机,并改写了Alice的文件。

由于我们假设Alice的单向散列函数不具备抗碰撞性,因此Mallory能够找到一种改写文件的方法,使得改写后文件的散列值不发生变化。于是,虽然Mallory改写了文件,但散列值没有发生变化。

第二天早上,Alice重新计算散列值,得到下面的结果。

这个结果和昨晚散列值一致,Alice松了一口气。但是,实际上Mallory已经改写了文件,Alice将Mallory改写的文件复制出来制成了母盘。

这里所说的抗碰撞性,指的是难以找出另外一条具备特定散列值的消息。当给定某条消息的散列值时,单向散列函数必要确保要找到和该条消息具有相同散列值的另外一条消息是非常困难的。这一性质称为弱抗碰撞性。单向散列函数都具备弱抗碰撞性。

和弱抗碰撞性相对的,还有强抗碰撞性。所谓强抗碰撞性,是指要找到散列值相同的两条不同的消息时非常困难的这一性质。在这里,散列值可以是任意的。

密码技术中所使用的单向散列函数,不仅要具备弱抗碰撞性,还必须具备强抗碰撞性。

四 具备单向性

单向散列函数必须具备单向性,单向性指的是无法通过散列值反向算出消息的性质。根据消息计算散列值可以很容易,但这条单行路是无法反过来走的。

根据消息计算出散列值很容易,但根据散列值却无法反算出消息。

尽管单向散列函数所产生的散列值是和原来的消息完全不同的比特序列,但是单向散列函数并不是一种加密,因此无法通过解密将散列值还原成原来的消息。 

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/82813519
今日推荐