散列函数安全性扩展

一.散列函数的具体应用:

1,数据校验

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

2,单向性的运用

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

3,碰撞约束以及有限固定摘要长度

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

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

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

二.1散列函数的安全性:

生日攻击:是一个密码学的术语 ,广泛用于计算机领域 ,它来自于概率统计中的生日问题。生日问题:在n个人中随机选取k个人,当k为多大时能保证k个人中有两个人的生日是相同的?根据鸽笼原理(pigeon
hole principle),如果有366个人,那么其中两个人必定会在同一天过生日。

但其实,用统计学的方法来考虑生日问题之后,假设至少有两个人同一天生日的概率为P,那么P的否定(我们写做1-P)就是没有任何两个人在同一天过生日的概率。假设我们有k个人,那么这k个人中没有任何两个人在同一天过生日的概率就是:最后解出来,当k=70的时候,P=99.9%这就是生日问题。

那么生日攻击,我们来看一个计算机领域中经常用到的东西:Hash functions简而言之就是用来把一样东西经过特定运算转换成另一样东西,输出的结果类型一定是相同的,更加严谨一点,长度也是相同的。这有点像密码,把你要传递的信息通过一些办法变成密码,无论信息是多是少,最后得到的密文一定是同一种类型的。比如fn x = x就是一个hash function,但是它没什么用,因为给它什么它还是照原样吐出来。

更高级的hash
function有比如java中给字符串加密用的迭代方程一个hash
function的好坏,就在于它是否能够使输出的值尽量分散,减少输出值的碰撞(collision),这样就能避免两样东西得到同样的输出,比如fn x=0就是一个非常不好的hash function,因为所有东西都被输出成了0。在安全性方面,hash function必须做到够复杂,让人不能够通过简单的几组输入输出结果猜出来这个hash function用的是什么样的算法,比如给你f(2)=4, f(3)=6, f(17361)=34722,很容易猜出这个f是什么。

有两种方法可以攻击安全散列函数:密码分析法和暴力攻击法。散列函数抵抗暴力攻击的强度完全依赖于算法生成的散列码长度。Van Oorschot和Wiener曾经提出,花费1000万美元涉及一个被专门用来搜索MD5算法碰撞的机器,则平均24天内就可以找到一个碰撞。

2004年8月中国密码学家王小云教授等首次公布了提出一种寻找MD5碰撞的新方法。目前利用该方法用普通微机几分钟内即可找到MD5的碰撞。MD5已经被彻底攻破。

2017年2月23日,谷歌在blog上宣布实现了SHA-1的碰撞,将会在90天内公开算法。之前实现暴力破解需要12,000,000个gpu算一年,现在需要110个GPU算一年,破解效率大为提高。

SHA-1的安全性一直广受质疑,此次破解对于广泛使用SHA-1算法的协议如TTL,SSL,SSH都有影响。谷歌和微软已经在2016年停止了支持SHA-1的网站安全证书。那么此次破解都有些什么什么意义,对业界的影响有多大呢?

以SHA-1为例,其哈希结果长度为160bit。如果SHA-1本身没有漏洞,而攻击者想找到一组碰撞的话,最显然的方法是选取组不同的数据,依次计算它们的哈希结果。根据著名的抽屉原理,必然会出现一组数据,使得其哈希结果相同。此攻击方法需要调用次SHA-1,即计算量级大约为。

虽然这么寻找碰撞一定是可行的,但计算代价太大了。密码学上认为,如果能找到一种方法,能在计算时间小于的情况下,有超过生日攻击的概率下找到一组碰撞,则认为这个哈希函数就不安全了。

二.2安全散列函数的发展:

单向散列函数或者安全散列函数之所以重要,不仅在于消息认证(消息摘要,数据指纹),还有数字签名(加强版的消息认证)和验证数据的完整性。常见的单向散列函数有MD5和SHA

简单散列函数

所有的散列函数都按照下面的基本操作。把输入(消息、文件等)看成n比特块的序列。对输入用迭代方法处理一块,生成n比特的散列函数。

一种最简单散列函数的每一个数据块都按照比特异或。如下所示

Ci =
bi1⊕ bi2⊕ … ⊕ bim

其中:

Ci为散列码的第i比特,1<=  i <=n;

m为输入中n比特数据块的数目;

bij为第j块的第i比特;

⊕为异或操作

SHA安全散列函数

近些年,应用最广泛的散列函数是SHA。由于其他每一种被广泛应用的散列函数都已经被证实存在这密码分析学中的缺陷,接着到2005年,SHA或许仅存的安全散列算法。SHA由美国国家标准与技术研究院(NIST)开发。

● 1995年公布SHA-1

● 2002年,公布了SHA-2(SHA-256、SHA-384、SHA-512)

● 2008年,增加了SHA-224

三.早期的“前缀构造法”:以同一个给定的前缀程序A为基础,在尾部添加不同的附加数据,得到两个具有相同MD5的样本B和C。前缀构造法碰撞后的两个样本只有尾部少量字节不同,而程序代码是相同的。通过判断尾部数据的差异,两个样本可以执行不同的程序流程。由于这种碰撞手法是通过同一前缀程序碰撞生成的两个样本,如果其中有恶意代码流程则两个样本均包含恶意代码,所以比较容易被安全软件识别,隐蔽性较差。

而采用新型的MD5碰撞手法,得到两个MD5校验值相同的样本,一个是恶意程序,另一个则是正常程序,它们在功能和代码上完全不同。由两个不同的前缀程序A和B分别在尾部添加附加数据,构造出具有相同MD5的程序C和D,这一阶段,碰撞作者主要是通过正常程序与恶意程序两种不同程序碰撞相同的MD5来对抗安全软件。两款毫不相关的程序MD5值校验却可以神奇的一致

MD5算法验证软件完整性可能出现的问题:

1)无法保证正确性和完整性,黑客可能更改信息

2)黑客可能通过MD5快速碰撞生成器,伪造相同的MD5(但很大可能内容不同),对文件进行篡改。

goodbyworld.exe程序运行截图:

相关链接:

如何评价 2 月 23 日谷歌宣布实现了 SHA-1 碰撞?

https://www.zhihu.com/question/56234281/answer/148349930

网络安全-安全散列函数,信息摘要SHA-1,MD5原理

https://blog.csdn.net/hherima/article/details/36879321

抗碰撞性、生日攻击及安全散列函数结构解析

https://blog.csdn.net/jerry81333/article/details/52763070

MD5碰撞的演化之路

http://www.freebuf.com/articles/93780.html

MD5碰撞

http://www.cnblogs.com/A2008A/archive/2012/08/10/2631840.html

原文地址:https://www.cnblogs.com/2016SE_NENU/p/9029196.html

时间: 2024-08-30 13:09:23

散列函数安全性扩展的相关文章

作业5:有关散列函数安全性的知识扩展。

作业题目:散列函数的应用及其安全性. 内容要求: (1) 给出散列函数的具体应用. (2) 结合生日攻击.以及2004.2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展.问题2的回答可以参考下面给出的第一个链接. (3)结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法在验证软件完整性时可能出

第五次作业:散列函数安全性的知识扩展

散列函数的应用及其安全性 一.给出散列函数的具体应用 答: ①消息认证:是用来验证消息完整性的一种机制或服务,确保收到的数据确实和发送时的一样(没有修改.插入.删除或重放),通常还要求信息认证机制确保发送方声称的身份是真实有效的 消息认证中使用Hash函数的本质:发送者根据待发送的信息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去.接收者收到后对信息执行同样的Hash计算,并将结果与收到的Hash值进行对比,如果不匹配,则接收者推断出信息遭受到篡改 Hash函数用于消息认证的方

2016012099+陈杰+散列函数的应用及其安全性

作业五要求: 作业题目:散列函数的应用及其安全性.内容要求:(1) 给出散列函数的具体应用.(2) 结合生日攻击.以及2004.2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展.问题2的回答可以结合下面给出的第一个链接.(3)结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时

扩展方法(为那些已经写好不能修改源码的类添加方法)

参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/how-to-implement-and-call-a-custom-extension-method 本主题介绍如何实现 .NET Framework 类库 中任意类型的扩展方法,或是你想要扩展的任何其他 .NET 类型. 客户端代码可以通过以下方法使用扩展方法,添加包含这些扩展方法的 DLL 的引用,以及添加 usin

作业5散列函数

一. 散列函数的具体应用 1.消息认证 (1)消息认证概念:消息认证是用来验证消息完整性的一种机制和服务.消息认证确保收到的消息和发送时的一样的(即没有修改.插入.删除或重放).通常还要求消息认证机制确保发送方声称的身份是真实有效的,当Hash函数用于提供消息认证功能时,被称为消息摘要. (2)消息认证中使用Hash函数的本质:发送者根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去.接收者收到后对于消息执行同样Hash计算,并将结果与收到的Hash值进行对比.如果

散列函数及其应用

一.散列函数是什么? 1.中文名称:哈希函数    Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. 2.散列函数构造方法 1. 直接定址法:例

EAP认证

EAP信息交换: 上图中展示的是OTP(一次性密码)实现EAP交换过程,具体的EAP交换过程如下: 步骤1:请求方向认证方发送EAPOL-Start消息,通知对方已经做到了认证准备(注意:若会话由认证方发起,不需要该报文)步骤2:在检测到链路活动后(比如客户连接到SW端口),认证方向请求当发送EAP-Request/Identity消息步骤3:请求方给认证方回复EAP-Response/Identity消息,并由认证方转发给认证Server,请求方和认证Server之间也可以使用UDP     

Java Map hashCode深究

[Java心得总结七]Java容器下——Map 在自己总结的这篇文章中有提到hashCode,但是没有细究,今天细究整理一下hashCode相关问题 1.hashCode与equals 首先我们都知道hashCode()和equals()函数是java基类Object的一部分,我查阅了java7文档,其中对于两者的描述如下: 解读这里对hashCode的描述,不难发现: 首先hashCode必须是一个整数,即Integer类型的 其次满足一致性,即在程序的同一次执行无论调用该函数多少次都返回相同

【第4组】Touch组需求分析总文档 V7.0 2017/7/13

头脑风暴结果: 思路1:照片分类管理,制作成回忆录.回忆簿(3D街景回忆录.针对城市旅游回忆方面) 该软件的最主要功能为照片信息的提取并据此(一连串的时间.相近的地点)制作出相关照片的回忆录,尤其针对城市旅游回忆,可以通过3D街景技术再现过去美好的旅游回忆,触碰(touch)每个人心中最甜蜜的旅游记忆,带来美的精神享受! 该软件同时还应具有照片分类及基本照片查看功能,即按时间.地点分类和具体每一张照片的查看. 该软件可扩展面广,今后可以不止为旅游照片整理回忆,可以为各种各样的照片整理为回忆,例如