散列函数的应用及其安全性

一、散列函数的具体应用

Hash函数

1、Hash算法是把任意长度的输入数据经过算法压缩,输出一个尺寸小了很多的固定长度的数据,即哈希值。哈希值也称为输入数据的数字指纹(Digital Fingerprint)或消息摘要(Message Digest)等。Hash函数具备以下的性质:

2、给定输入数据,很容易计算出它的哈希值;

3、反过来,给定哈希值,倒推出输入数据则很难,计算上不可行。这就是哈希函数的单向性,在技术上称为抗原像攻击性;

4、给定哈希值,想要找出能够产生同样的哈希值的两个不同的输入数据,(这种情况称为碰撞,Collision),这很难,计算上不可行,在技术上称为抗碰撞攻击性;

5、哈希值不表达任何关于输入数据的信息。

1)数据校验

散列函数有类似数据冗余校验类似的功能,但是它比简单的冗余校验碰撞的概率要小得多,顾而在现在密码学中总是用HASH来做关键数据的验证。

我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

2)数字签名

Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

3)单向性的运用

利用HASH函数的这个特点,我们能够实现口令,密码等安全数据的安全存储。密码等很多关键数据我们需要在数据库中存储,但是在实际运用的过程中,只是作比较操作,顾而我们可以比较HASH结果。

4)碰撞约束以及有限固定摘要长度

数字签名正是运用了这些特点来提高效率的。我们知道非对称加密算法速度较低,通过HASH处理我们可以使其仅仅作用于HASH摘要上,从而提高效率。

5)可以运用HASH到随机数的生成和密码,salt值等的衍生中

因为HASH算法能够最大限度的保证其唯一性,故而可以运用到关键数据的衍生中(从一个随机的种子数产生,并且不暴露种子本身秘密)。

二、散列函数的安全性以及目前安全散列函数的发展

(结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。 参考链接:https://www.win.tue.nl/hashclash/)

1)生日攻击

利用“两个集合相交”问题的原理生成散列函数碰撞,达到目的的攻击称为生日攻击,也称为平方根攻击。生日攻击是利用概率论中的生日问题,找到冲突的Hash值,伪造报文,使身份验证算法失效。生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。这种攻击对Hash函数提出了一个必要的安全条件,即消息摘要必须足够长。

生日攻击原理:由此我们可以将它用在碰撞,得到不同Message有着相同tag。

假设:取样次数为N,M:M1-Mn,取值在tag:1-B中,并且假设分布随机均匀相互独立。

取样次数n与B的关系,n=1.2*B^0.5(这是生日悖论中最坏的情况。)

证明:M2不等于M1的概率为(B-1)/B,同理可得M3为(B-2)/B,M4为(B-3)/B...Mn为(B-n+1)/B。

因此,其中有碰撞的概率为:1-(1-1/B)(1-2/B).....(1-(k-1)/B)>= (1-e)^(-n^2/2B)

因为n=1.2*B^0.5,因此(1-e)^(-n^2/2B)=1-e^-0.72=0.53>50%

结论,因此使用生日攻击,我们只需2^(n/2)次寻找,就有50%概率能找到相同tag的两个不同Message。

防范方法:

使用安全的Hash算法:安全的Hash算法生成的Hash值有足够多的位数。这样,攻击者在寻找两个具有相同Hash值的文件时就会非常困难。

加盐:在为文件签名之前,先向文件添加一个随机值,然后计算Hash值,再将文件、签名和随机值一起发送给接收者。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。

改动文件:在为文件签名之前,对消息或文件做少许改动。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。

2)MD5安全性

MD5是一种不可逆的加密算法,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。

不过,由于MD5的弱点被不断发现以及计算机能力不断的提升,通过碰撞的方法有可能构造两个具有相同MD5的信息,使MD5算法在目前的安全环境下有一点落伍。从实践角度,不同信息具有相同MD5的可能性还是非常低的,通常认为是不可能的,通过碰撞的方法也很难碰撞出复杂信息的MD5数值。

3)SHA-1安全性

SHA(Security Hash Algorithm)是美国的NIST和NSA设计的一种标准的Hash算法,SHA用于数字签名的标准算法的DSS中,也是安全性很高的一种Hash算法,该算法的输入消息长度小于2^64bit,最终输出的结果值是160bit,SHA与MD-4相比较而言,主要增加了扩展变换,将前一轮的输出也加到了下一轮,这样增加了雪崩效应,而且由于其160bit的输出,对穷举攻击更具有抵抗性。

4)散列函数的安全性

(1)、单向性(原像稳固性):给定一个消息摘要y,很难找到符合h(x)=y的消息x。

(2)、第二原像稳固性:给定x,很难找到一个x’,满足h(x)=h(x’)。

(3)、碰撞稳固性:很难找到满足h(x)=h(x’)的二元组(x,x’)。

(4)、雪崩性:c=Hash(m),c的每一比特都与m的每一比特有关,并有高度敏感性。即每改变m的一比特,都将对c产生明显影响。md5算法在验证软件完整性时可能出现的问题

5)散列函数的发展

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。它的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。

SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。后四者有时并称为SHA-2。SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。但SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的散列算法。

三、md5算法在验证软件完整性时可能出现的问题

1. 前缀碰撞

构造前缀碰撞法可以让两个内容不同的文件,在发生前缀碰撞后,使得两个文件内容变得完全相同,也就是得到相同的MD5。第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的MD5消息摘要值相同,虽然这两个程序会在屏幕上打印出不同的字符,但是他们的MD5是一样的,说明MD5算法前缀碰撞法并不安全,MD5 算法不应再被用于任何软件完整性检查或代码签名的用途!。

2. md5算法在验证软件完整性时可能出现的问题

1)程序在屏幕上可能打印出不同的字符,但是它们的 MD5 都是一样的。

2)不能通过校验MD5来知道网站是否被黑客攻击或者植入病毒木马。

3)当软件过大时,在验证过程中所需的时间也会大大增加,第三方攻击的成功概率也会增加。

4)无法保证文件的完整性和正确性,文件可能被篡改或损坏。

转载于:https://www.cnblogs.com/BoscoJK/p/9030665.html

2016012013 王雪 散列函数的应用及其安全性相关推荐

  1. 2016012009 马佳欣 散列函数的应用及其安全性

            散列函数的应用及其安全性 马佳欣  2016012009 (1)散列函数的具体应用 由于散列函数的应用的多样性,它们经常是专为某一应用而设计的.例如,加密散列函数假设存在一个要找到具有 ...

  2. 2016012075 谢月月 散列函数的应用及其安全性

    散列函数的应用及其安全性 一.散列函数的应用 1.消息认证:       (1).消息认证的定义:消息认证是用来验证消息完整性的一项机制或服务.消息认证确保收到的数据确实和发送时的一样(即没有修改.插 ...

  3. 2016012026 管凌波 散列函数的应用及其安全性

    2016012026 管凌波 散列函数的应用及其安全性 一.散列函数是什么. 散列函数即为Hash函数,就是把任意长度的输入(预映射),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是 ...

  4. 2016012072+张济吨+散列函数的应用及其安全性

    一.散列函数的具体应用 1.消息认证         消息认证是用来验证消息完整性的一种机制或服务.消息认证确保收到的数据确实和发送时的一样(及没有修改.插入.删除或重放).此外,还要求消息认证机制确 ...

  5. 2016012056+陈逸璇+散列函数的应用及其安全性

    散列函数的应用及其安全性 一.散列函数的应用 1.错误校正 使用一个散列函数可以很直观的检测出数据在传输时发生的错误. 2. 语音识别 对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方 ...

  6. 散列函数的应用及其安全性

    一.散列函数的具体应用: 1.文件校验 我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏.M ...

  7. 2016012028 赵莉 散列函数的应用及其安全性

    目录: 一.散列函数的具体应用: 二.散列函数的安全性以及目前安全散列函数的发展: 三.md5算法来验证软件完整性时可能出现的问题. 一.散列函数的具体应用 密码学中,Hash函数被广泛应用于各种不同 ...

  8. 散列函数的应用及其安全性 付淅 2016012063

    题目内容要求:(1) 给出散列函数的具体应用.(2) 结合生日攻击.以及2004.2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散 ...

  9. 2016012025 童宇欣 散列函数的应用及其安全性

    一.散列函数的具体应用 密码学中,Hash函数被广泛应用于各种不同的安全应用和网络协议中.以下是散列函数的一些具体应用. 1.消息认证 (1)消息认证概念:消息认证是用来验证消息完整性的一种机制和服务 ...

  10. 丁小帅+2016012047+作业5

    散列函数的应用及其安全性 本次作业为扩展有关散列函数安全性的知识扩展. 作业题目:散列函数的应用及其安全性. 内容要求: (1) 给出散列函数的具体应用. (2) 结合生日攻击.以及2004.2005 ...

最新文章

  1. ORACLE 查询约束
  2. python数组转换为列表_python - 将一系列数组转换为单个列表 - SO中文参考 - www.soinside.com...
  3. python中如何打开csv文件_在Python中从CSV文件读取数据
  4. aspose java_Aspose.Cells for Java
  5. Oracle 数据类型及存储方式
  6. python出现的各种问题
  7. Linux学习笔记-使用管道通信实现cat /etc/passwd | grep root这条命令
  8. 有什么推荐的计算机视觉项目?来自微软亚研院的清单
  9. Hi3519V101开发环境搭建(一)
  10. linux 设备/dev
  11. Linux资源监控工具
  12. 如何把he_llo wo_rld 变成 HeLlo WoRld
  13. (转)姚期智:呼之欲出的量子计算机,和它漫长的最后一英里(全文)
  14. 统一软件开发过程(RUP)的概念和方法
  15. 周育如的音标口诀大全_一年级汉语音标口诀记忆方法
  16. wedo+scratch第一次上课
  17. [云原生专题-45]:Kubesphere云治理-基于Kubernetes 构建的企业级容器平台简介与总体架构
  18. DEDE自动调用轮播图/幻灯片
  19. python中的sort排序加换行_python中sort()排序的方法
  20. swift 2.0 ? ! 到底是什么意思

热门文章

  1. web基础、tomcat搭建
  2. 首字母变大写 --输入一个英文句子,将每个单词的第一个字母改成大写字母。
  3. rsync数据同步工具
  4. es6 modules 和commonjs
  5. [第四组]TOUCHBeta版本测试报告及发布说明
  6. Riemann映射定理
  7. ORCU浅析之安装和作用
  8. 借助 Resharper 和 StyleCop 让代码更整洁
  9. multiprocessing.manager管理的对象需要加锁吗_【极客思考】设计模式:你确定你真的理解了单例模式吗?...
  10. jsessionid 在谷歌一直变_谷歌相册也要收费,这次我全靠这些云盘救命