散列函数的应用及其安全性
一、 散列函数
散列函数、即曾在数据结构中接触到的哈希函数,这里引用wiki对其的介绍:“散列函数是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。”
二、散列函数的应用
第一个要提到的是散列函数在数据结构课程中介绍的有关数据查找的应用。其基本思想便是用散列函数建立存储位置与查找关键字之间的对应关系,从而更加快捷的进行查找操作。
第二个提到的哈希函数的课程是计算机组成原理。在计算机组成原理中介绍了哈希函数错误校正的功能,但并没有过多赘述。应用的是类似的思想,但在计算机组成原理这门课程中并没有详细的提到哈希函数。
第三个应用便是本节课课程中哈希函数在加密方面的应用。在密码学中哈希函数主要应用与加密,身份验证与确保信息的完整性。利用“散列函数是一种从任何一种数据中创建小的数字“指纹”的方法“这种特性来对信息进行加密,也可利用生成的”指纹“来对原数据进行校验。
三、散列函数的安全性以及目前安全散列函数发展
无论是生日攻击,还是MD5安全性问题的讨论,都无不指出了哈希函数的一个问题:它的定义域远大于它的值域。纵使人们将哈希函数设计的尽可能的复杂(类似于MD5加密),哈希函数依旧无法避免出现偶尔的碰撞现象(在数据结构中成为冲突)。
而目前SHA的做法,我个人的看法就是还是去增大哈希函数的值域,或者减小碰撞发生的几率。第一代SHA-0的破解历经6年,人们才将碰撞所需的计算复杂度从2^80降至2^39。在SHA-1的破解中,研究人员依旧是去攻击哈希函数的根本性问题——碰撞。SHA-2的资料不多,在wiki百科中显示的是,加密算法的开发人员依旧在继续让用于加密的哈希函数越来越复杂(当然,SHA本身也就是安全散列函数的缩写),看来在未来的一段时间安全散列函数的发展还会继续朝着越来越复杂的散列函数走去。
四、MD5算法在验证软件完整性时可能出现的问题
正如我在上文阐述散列函数的安全性时提到的那样,由于碰撞(亦或者冲突吧…)的存在,攻击者可以利用选择前缀碰撞去构建一个拥有与你源文件相同的恶意软件。而在验证该软件的完整性时MD5算法并不能去发现这个恶意软件,即它并不能做到验证该软件的完整性。
最后附上http://www.win.tue.nl/hashclash/SoftIntCodeSign/ 站中对该问题阐述的机翻版本。
文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览35110 人正在系统学习中 相关资源:WinAPI技巧:恶意软件使用或滥用的各种WINAPI技巧功能的集合-其它…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!