博客
关于我
单向散列函数的性质
阅读量:222 次
发布时间:2019-02-28

本文共 1154 字,大约阅读时间需要 3 分钟。

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

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

二 能够快速计算出散列值

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

四 具备单向性

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

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

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

你可能感兴趣的文章
navicat:2013-Lost connection to MySQL server at ‘reading initial communication packet解决方法
查看>>
Navicate for mysql 数据库设计-数据库分析
查看>>
Navicat下载和破解以及使用
查看>>
Navicat中怎样将SQLServer的表复制到MySql中
查看>>
navicat创建连接 2002-can‘t connect to server on localhost(10061)且mysql服务已启动问题
查看>>
Navicat可视化界面导入SQL文件生成数据库表
查看>>
Navicat向sqlserver中插入数据时提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
查看>>
Navicat因导入的sql文件中时间数据类型有参数而报错的原因(例:datetime(3))
查看>>
Navicat如何连接MySQL
查看>>
navicat导入.sql文件出错2006- MySQLserver has gone away
查看>>
Navicat导入海量Excel数据到数据库(简易介绍)
查看>>
Navicat工具Oracle数据库复制 or 备用、恢复功能(评论都在谈论需要教)
查看>>
navicat工具查看MySQL数据库_表占用容量_占用空间是多少MB---Linux工作笔记048
查看>>
navicat怎么导出和导入数据表
查看>>
Navicat报错connection is being used
查看>>
Navicat报错:1045-Access denied for user root@localhost(using passwordYES)
查看>>
Navicat控制mysql用户权限
查看>>
navicat操作mysql中某一张表后, 读表时一直显示正在载入,卡死不动,无法操作
查看>>
Navicat连接mysql 2003 - Can't connect to MySQL server on ' '(10038)
查看>>
Navicat连接mysql数据库中出现的所有问题解决方案(全)
查看>>