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

作业五要求:

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

一.散列函数的具体应用

散列函数应用

由于散列函数的应用的多样性,它们经常是专为某一应用而设计的。例如,加密散列函数假设存在一个要找到具有相同散列值的原始输入的敌人。一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。为加密散列为目的设计的函数,如MD5,被广泛的用作检验散列函数。这样软件下载的时候,就会对照验证代码之后才下载正确的文件部分。此代码有可能因为环境因素的变化,如机器配置或者IP地址的改变而有变动。以保证源文件的安全性。
错误监测和修复函数主要用于辨别数据被随机的过程所扰乱的事例。当散列函数被用于校验和的时候,可以用相对较短的散列值来验证任意长度的数据是否被更改过。

错误校正

使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余校验。
对于错误校正,假设相似扰动的分布接近最小(a distribution of likely perturbations is assumed at least approximately)。对于一个信息串的微扰可以被分为两类,大的(不可能的)错误和小的(可能的)错误。我们对于第二类错误重新定义如下,假如给定 H(x) 和 x+s,那么只要s足够小,我们就能有效的计算出x。那样的散列函数被称作错误校正编码。这些错误校正编码有两个重要的分类:循环冗余校验和里德所罗门码。

语音识别
对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数——例如MD5,但是这种方案会对时间平移、CD读取错误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感。使用一些类似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的音频文件,但是要找到全部相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了。
那些并不紧随IT工业潮流的人往往能反其道而行之,对于那些微小差异足够鲁棒的散列函数确实存在。现存的绝大多数散列算法都是不够鲁棒的,但是有少数散列算法能够达到辨别从嘈杂房间里的扬声器里播放出来的音乐的鲁棒性。有一个实际的例子是Shazam[1]服务。用户可以用电话机拨打一个特定的号码,并将电话机的话筒靠近用于播放音乐的扬声器。该项服务会分析正在播放的音乐,并将它于存储在数据库中的已知的散列值进行比较。用户就能够收到被识别的音乐的曲名(需要收取一定的费用)

信息安全
Hash算法在信息安全方面的应用主要体现在以下的3个方面:
(1)文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
(2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
(3) 鉴权协议
如下的鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

二. 结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以结合下面给出的第一个链接。

1.散列函数的安全性需求有七个:

(1)输入长度可变:H可应用于任意大小的数据块

(2)输出长度固定:H产生定长的输出

(3)效率:对任意给定的x,计算H(x)比较容易,用硬件和软件均可实现

(4)抗原像攻击(单向性):对任意给定的Hash码h,找到满足H(y)=h的y在计算上是不可行的

(5)抗第二原像攻击(抗弱碰撞性):对任意给定的分块x,找到满足y!=x且H(x)=H(y)的y在计算上是不可行的

(6)抗碰撞攻击(抗强碰撞性):找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的

(7)伪随机性:H的输出满足伪随机性测试标准

生日攻击的原理证明了只需要相对很少的数据量就能产生两个哈希值相同的不同文件,在这个原理之上,王晓云教授给出了在可计算时间内破解md5的方法,让md5不满足散列函数安全性需求的(6),而之后再密码学从事人员的不断努力和计算机计算能力的不断提高,这之中包括链接一中的Marc Stevens,他研究结果是可以在的计算量内找到sha-1算法下的一组哈希碰撞。而谷歌在2017年对sha-1的破解采用了stevens之前的计算量的方法。这些都证明着破解这些散列函数已经越来越容易。事实上,随着破解方法的不断改进和机器计算能力的不断提高,这些散列函数也确实越来越不安全,而需要更好的是散列函数来代替。

正是基于这些背景,安全散列函数也在不断发展中。

目前使用最多的散列函数有MD系列和SHA系列,1990年Ronald L. Rivest 设计的MD4通过3圈的操作将任意长度的消息变换成128位的哈希值。而MD4的前两圈已被Dobbertin等人攻破。之后的MD5是Rivest于1991年对MD4的改进版本。MD5算法被王晓云教授证明是可攻破的,因此已经不安全了。在MD4和MD5的基础上,HAVAL,SHA1,SHA256,SHA384,SHA512等散列算法不断出现对散列函数的安全性有着不断的提高,不过可以预见的,这些散列函数在将来也很有可能随着破解方法的进步和机器计算能力的提升而面临被破解的风险。

三.结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题。

md5算法的选择前缀可以在使用相同前缀的情况下更改少部分内容仍能使两个文件得到相同的md5,而第二个链接中两个内容不同的exe文件却有着相同的md5,为md5的不安全性提供了实例,在王晓云教授研究结果的基础上,密码学研究者已经研究出了改进版本“构造前缀碰撞法”,并且编写出了快速MD5碰撞生成器,使MD5的破解速度可以达到几秒钟这样的速度。

故用md5算法验证软件完整性会出现如下的问题:

(1)不能确保得到的软件是否被修改过或者被替换

(2)不能确保得到的软件中间被人获取过

(3)在软件过大时,会使验证时间过长而导致攻击者的成功率增加

原文地址:https://www.cnblogs.com/CJFQT/p/9019630.html

时间: 2024-10-11 00:00:28

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

陈杰:无服务器架构,让云端开发更纯粹

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 在微服务还方兴未艾的时候,无服务架构就以其弹性伸缩.按需付费以及无维护等特点得到了很多开发者的青睐.腾讯架构平台部技术专家陈杰表示,云函数的核心理念就是给整个服务提供一种公共的架构,针对性解决服务的接入.安全.扩容.容灾.分布等一系列问题. 腾讯架构平台部技术专家陈杰 据介绍,云函数价值主要体现在四个方面.一是简化架构,云函数是以函数粒度来组织的服务,是一种天生的微服务架构:而是简化代码开发,用户无须编写网络服务,鉴权,分布,容灾,扩

团队作业(刘畅,陈杰,杨有存,唐祎琳,王晓哲,邵汝佳)

一.团队介绍 1.团队构成: 2.队名: Daily target,我们的口号是Target your day! 3.团队项目描述: 我们计划写一个用于老师发布任务,学生接受任务的安卓app.教师安排课程,发布课后作业和测验.考试:学生完成教师发布的各项任务,并且也可以给自己安排日程. 初步的功能如下: (1)课程(老师端和学生端): <1> 教师端:发布教学资料以及作业,测验,考试安排,发布通知 <2> 学生端:下载教师的教学资料,提交作业和测验报告,查看老师发布的安排与通知,可

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

散列函数的应用及其安全性 一.散列函数的具体应用 Hash(散列函数),一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. 由于散列函数的应用的多样性,它们

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

散列函数的应用及其安全性 一.给出散列函数的具体应用. 1.消息认证 (1)概念:消息认证是用来验证消息完整性的一种机制和服务.消息认证确保收到的消息和发送时是一样的,同时.此外,还要确保发送方声称的身份是真实有效的,当Hash函数用于提供消息认证功能时,被称为消息摘要. (2)使用本质:发送者根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去.接收者收到后对于消息执行同样Hash计算,并将结果与收到的Hash值进行对比.如果不匹配,则接收者推断出消息(也可能是Ha

2016012010 赵瑞雪 散列函数的应用及其安全性

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

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

散列函数的应用及其安全性 一.散列函数的具体应用 Hash函数 1.Hash算法是把任意长度的输入数据经过算法压缩,输出一个尺寸小了很多的固定长度的数据,即哈希值.哈希值也称为输入数据的数字指纹(Digital Fingerprint)或消息摘要(Message Digest)等.Hash函数具备以下的性质: 2.给定输入数据,很容易计算出它的哈希值: 3.反过来,给定哈希值,倒推出输入数据则很难,计算上不可行.这就是哈希函数的单向性,在技术上称为抗原像攻击性: 4.给定哈希值,想要找出能够产生

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

2016012026 管凌波 散列函数的应用及其安全性 一.散列函数是什么. 散列函数即为Hash函数,就是把任意长度的输入(预映射),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. 因此,一个"好"的Hash函数具有这样的特点:对于大的输入集合使用该函数,产生的输出结果均匀分

2016012030+王超超+散列函数的应用及其安全性

一.散列函数的具体应用 1.单向散列函数在密码学中的应用     A.数字签名技术       a. 利用单向散列函数计算出需要签名的消息的邮摘,再利用签名算法对邮摘签名来代替直接对原来的消息进行签名.        b.有效地提高了签名的效率和速度,也减少了传输的信息量,节约了网络的带宽.     B.消息的完整性认证        a.通常做法是文件的所有者用Hash算法计算出文件的Hash值,自己保存Hash值的一份拷贝,然后把文件存放在一个公开的地方.需要验证一个           文

2016011998 张舒凯 散列函数的应用及其安全性

1.散列函数的具体应用 (1)消息认证:散列函数用于消息认证---消息认证是用来验证消息完整性的一种机制和服务,函数值称为消息摘要,确保收到的数据和发送时的一样(即没有修改.插入.删除或重放),发送者根据待发送的消息使用散列函数f计算一组散列值,再把散列函数值和消息发送出去:接受者收到后统一进行计算,并进行比对,具体方法: 1.使用对称密码算法加密消息和散列码: 2.使用对称密码算法只对散列码进行加密: 3.不使用加密算法,仅使用散列函数: 4.将整个消息和散列值加密. (2)数字签名:散列函数