单向散列函数的原理_实现和在密码学中的应用
- 格式:pdf
- 大小:99.71 KB
- 文档页数:3
4)单向散列函数介绍(Hash Function,哈希函数):将任意长度的消息M映射/换算成固定长度值h(散列值,或消息摘要MD, Message Digest),最大的特点为其具有单向性。
h=H(M)Hash函数用于消息认证(或身份认证)以及数字签名。
特性:(1)给定M,可算出h.(2)给定h,根据H(M)=h反推出M是非常困难的。
(3)给定M,要找到另外一个消息M*,使其满足H(M*)=H(M)=h 是非常困难的。
注(见参考E,p75):-从理论上说,有很多消息能生成相同的消息摘要。
因为消息的长度是任意的,而摘要的长度是固定的。
-对于固定1000 bit的消息和固定128 bit的摘要,平均来说,有2872个消息与之对应,测试似乎不可能成功。
-对于一个128 bit的消息摘要算法,大约需要尝试2128个(长短不一的)消息,才能找到一个消息摘要与给定的摘要数值相吻合(作为攻击,当然该消息可为经篡改后的消息)。
注:这里是用无数次的“尝试”,而非简单从h反推出M。
-对于一个128 bit的消息摘要算法,需要尝试264个消息才能找到两个具有相同摘要的消息。
-为什么将消息摘要定为128 bit? 因为消息摘要为m bit,任何人想要得到两个具有相同摘要的消息,大约需要尝试2m/2个消息。
若m=64, 则需检查232个消息,这在计算上是可行的。
所以使m=128, 检查264个消息目前在计算上是不可行的。
应用举例讲解:(i)存储于银行计算机内的用户密码采用散列值,用于保密。
(ii)Alice要Bob写一份关于解雇Fred的报告,而Bob是Fred的朋友,想做“双面人”。
(iii)为文档和程序生成“指纹”或“DNA”。
在实际应用中,Hash函数是基于压缩函数的。
(RefC_p42_Hash函数)给定任意长度的消息,Hash函数输出长度为m的散列值(即消息摘要)。
压倒函数的输入为(1)明文消息分组Mi。
(2)前一压缩数据的输出CV i-1(Compressed Vector)。
单向散列算法的应用场景一、介绍单向散列算法单向散列算法(Hash算法)是一种将任意长度的消息压缩成固定长度摘要的函数。
它具有不可逆性、唯一性和抗碰撞等特点,可以广泛应用于数据完整性校验、数字签名、密码学等领域。
二、数据完整性校验数据完整性校验是指在数据传输或存储过程中,通过计算消息摘要来验证数据是否被篡改。
单向散列算法可以生成唯一的消息摘要,并且即使对原始数据进行微小修改也会导致完全不同的摘要值,从而保证了数据的完整性。
三、数字签名数字签名是指通过将消息摘要用私钥进行加密来实现对消息的认证和防篡改。
接收方可以使用公钥来解密摘要并验证其真实性。
单向散列算法可以生成唯一的消息摘要,并且只有私钥持有者才能对其进行加密,从而保证了数字签名的安全性。
四、密码学密码学是指利用数学和计算机科学技术来保护信息安全和隐私。
单向散列算法可以用于密码哈希函数中,将用户密码转换为唯一的哈希值,并存储在数据库中。
当用户登录时,系统会将输入的密码进行哈希运算,并与数据库中存储的哈希值进行比对,从而验证用户身份。
五、网络安全网络安全是指保护计算机网络和其相关设备免受非法访问、攻击和破坏。
单向散列算法可以用于生成消息摘要,从而验证数据的完整性和防止篡改。
此外,也可以用于数字签名和密码学等领域,增强网络安全性。
六、总结单向散列算法具有不可逆性、唯一性和抗碰撞等特点,可以广泛应用于数据完整性校验、数字签名、密码学和网络安全等领域。
在实际应用中,需要根据具体场景选择合适的算法,并且注意加强密钥管理和防止攻击。
加盐加密的原理及应用场景加盐加密是一种常用的密码学技术,可以在保护用户信息的同时,对数据进行安全加密。
它的原理比较简单,但是在应用过程中却需要注意一些细节。
下面我们来了解一下加盐加密的原理及应用场景。
一、加盐加密的原理加盐加密采用了“单向散列函数”的原理。
所谓单向散列函数,就是将明文数据经过特定的数学运算处理后,生成一串不可逆的密文。
这个密文与原来的明文之间没有任何确定的规律,一般只能通过“暴力破解”的方式来得到明文。
因此,单向散列函数可以有效地保护用户的隐私信息。
但是,在使用单向散列函数时,如果只是对原文进行加密,那么由于同样的原文会得到同样的密文,因此容易被攻击者通过预计算出密文库的方式进行破解。
这时,加盐技术就可以派上用场了。
加盐实际上是在原文的基础上,加上一些随机生成的字符串,然后再进行加密,最后将盐值和密文一起存储。
这样,相同的明文经过加盐加密后,得到的密文就不同了,从而提高了安全性。
二、应用场景1.用户密码加密在用户注册时,将用户输入的密码进行加盐加密处理,并将盐值和密文存储到数据库中。
当用户登录时,再根据输入的密码和数据库中存储的盐值进行加密,判断加密后的密文是否与数据库中存储的一致。
这样可以有效地保护用户隐私,防止密码被破解。
2.数据文件加密在对数据文件进行加密时,可以使用加盐加密的方法。
将文件内容和随机生成的盐值一起进行加密,然后存储到加密文件中。
当需要解密时,再使用同样的盐值进行解密即可。
3.消息认证码生成在网络通信中,消息认证码(MAC)可以用来验证消息的完整性和真实性。
使用加盐加密的方法可以生成更加安全可靠的MAC码。
将消息内容和随机生成的盐值一起进行加密,生成一个MAC码。
在接收方收到消息后,再使用同样的盐值生成一个MAC码,判断是否与发送方发来的MAC码一致,以此来验证消息的真实性。
综上所述,加盐加密是一种有效的密码保护技术。
通过在加密过程中加入随机的盐值,可以避免被攻击者通过预计算出密文库的方式进行破解。
散列函数应⽤⼀、给出散列函数的具体应⽤。
Hash算法在信息安全⽅⾯的应⽤主要体现在以下的3个⽅⾯: 1)⽂件校验 我们⽐较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能⼒,它们⼀定程度上能检测并纠正数据传输中的信道误码,但却不能防⽌对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为⽬前应⽤最⼴泛的⼀种⽂件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2)数字签名 Hash 算法也是现代密码体系中的⼀个重要组成部分。
由于⾮对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了⼀个重要的⾓⾊。
对 Hash 值,⼜称"数字摘要"进⾏数字签名,在统计上可以认为与对⽂件本⾝进⾏数字签名是等效的。
⽽且这样的协议还有其他的优点。
3)鉴权协议 如下的鉴权协议⼜被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是⼀种简单⽽安全的⽅法。
⼆、结合⽣⽇攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及⽬前安全散列函数的发展。
⽣⽇攻击:⽣⽇攻击是利⽤概率论中的⽣⽇问题,找到冲突的Hash值,伪造报⽂,使⾝份验证算法失效。
2004、2005年王晓云教授有关MD5安全性:MD5就是这样⼀个在国内外有着⼴泛的应⽤的杂凑函数算法。
然⽽,王⼩云教授发现,可以很快的找到MD5的“碰撞”,就是两个⽂件可以产⽣相同的“指纹”。
这意味着,当你在⽹络上使⽤电⼦签名签署⼀份合同后,还可能找到另外⼀份具有相同签名但内容迥异的合同,这样两份合同的真伪性便⽆从辨别。
王⼩云教授的研究成果证实了利⽤MD5算法的碰撞可以严重威胁信息系统安全,这⼀发现使⽬前电⼦签名的法律效⼒和技术体系受到挑战。
017年Google公司SHA-1的安全性:SHA-1,安全哈希算法1,⼀个⾮常流⾏的加密散列函数设计于1995年由美国国家安全局,正式死亡后,⼀组研究⼈员从⾕歌和CWI研究所在阿姆斯特丹宣布今天提交了第⼀次成功的SHA-1碰撞攻击。
单向散列函数(HASH函数)基本原
Hash函数H(m)也名单向散列函数,它是现代密码学的核心。
散列函数一直在计算机科学中使用,散列函数就是把可变的输入长度串转换成固定长度输出值(叫做散列值)的一种函数。
而单向散列函数是在一个方向上工作的散列函数,从预映射的值很容易计算机其散列值,但要使其散列值等于一个特殊值却很难。
好的散列函数也是无冲突的:难于产生两个预映射的值,使他们的散列值相同。
散列函数是公开的,对处理过程并不保密,单向散列函数的安全性是它的单向性,其输出不依赖于输入。
平均而言,预映射值的单个位的改变,将引起散列值中一半位的改变。
已知一个散列值,要找到预映射的值,使它的值等于已知的散列值在计算上是不可行的,可把单向散列函数看作是构成指纹文件的一种方法。
如果你验证某人持有一个特定的文件(你同时也持有该文件),但你不想他将文件传给你,那幺,就要通知他将该文件的散列值传给你,如果他传送的散列值是正确的,那幺可以肯定他持有那份文件。
散列函数可用于数字签名、消息的完整性检测、消息起源的认证检测等。
常见的散列算法有MD5、SHA、Snefru和HVAL等。
收稿日期:2001204228基金项目:国家重点科技项目(攻关)计划资助课题(20002A31201205)单向散列函数的原理、实现和在密码学中的应用3辛运帏,廖大春,卢桂章(南开大学信息技术科学学院,天津300071)摘 要:简要介绍了单向散列函数的有关理论及实现情况,并且以密码学中广泛应用的单向散列函数M D5为例,详细介绍了它的原理和实现过程。
最后简要介绍了单向散列函数在当前的应用,并且提出了一种利用单向散列函数实现的新的用户密钥管理方案。
关键词:单向散列函数;密码学;邮摘散列算法;M D5中图法分类号:TP309.3 文献标识码:A 文章编号:100123695(2002)022******* The Principle and Implement of One 2way Hash Functions andTheir Cryptographic ApplicationXI N Y un 2wei ,LI AO Da 2chun ,LU G ui 2zhang(College o f Information Technology &Science ,Nankai Univer sity ,Tianjin 300071,China )Abstract :The paper introduces the theory and im plement of one 2way hash functions ,and using the M D5Alg orithm which is extensively used in cry ptography as an exam ple ,introduces its principle and im plement in detail.At last ,we research the application of them ,and pre 2sent a new schedule of user key management.K ey w ords :One 2way Hash Function ;Cry ptography ;Message Digest Hash Alg orithm ;M D51 单向散列函数简介密码学中使用的单向散列函数将任意长度的消息压缩到某一固定长度的消息摘要。
单向散列函数又称为单向Hash 函数,它不是加密算法,却在密码学中有着广泛的应用,与各种加密算法有着密切的关系。
它的模型为:h =H (M )。
其中,M 是待处理的明文,可以为任意长度;H 是单向散列函数,h 是生成的报文摘要,它具有固定的长度,并且和M 的长度无关。
其中H 具有以下的单向性质:①给定H 和M ,很容易计算h ;②给定h 和H ,很难计算M ,甚至得不到M 的任何消息;③给定H ,要找两个不同的M 1和M 2,使得H (M 1)=H (M 2)在计算上是不可行的。
根据单向散列函数的安全水平,可以将单向散列函数分成两类:强碰撞自由的单向散列函数和弱碰撞自由的单向散列函数。
上面描述的是强碰撞自由的单向散列函数的性质。
如果将第③条改为:给定h 和一个已知的消息M ,找另外一个不同的消息M 1,使得h (M )=h (M 1)在计算上是不可行的,就叫做弱碰撞自由的单向散列函数。
显然强碰撞自由的单向散列函数比弱碰撞自由的单向散列函数安全性要高。
因为弱碰撞自由的单向散列函数随着重复使用次数的增加安全性逐渐降低,强碰撞自由的单向散列函数则不会因其重复使用而降低安全性。
因此在实际中要求使用强碰撞自由的单向散列函数。
除此之外,在实际应用中还要求单向散列函数具有如下特点:(1)单向散列函数能够处理任意长度的明文(至少是在实际应用中可能碰到的长度的明文),其生成的消息摘要数据块长度具有固定的大小,而且,对同一个消息反复执行该函数总是得到相同的信息摘要。
(2)单向散列函数生成的信息摘要是不可预见的,消息摘要看起来和原始的数据没有任何的关系。
而且,原始数据的任何微小变化都会对生成的信息摘要产生很大的影响。
(3)具有不可逆性,即通过生成的报文摘要得到原始数据的任何信息在计算上是完全不可行的。
单向散列函数在密码学中有着非常广泛的应用,它被广泛地应用于数字签名、消息的完整性鉴别、消息的起源认证等,另外也和各种密码算法一起构成混合密码系统。
2 实现综述实现一个安全的单向散列函数并不是一件容易的事・52・第2期辛运帏等:单向散列函数的原理、实现和在密码学中的应用 情。
单向散列函数是建立在压缩函数基础上的,它的一般原理与实现过程是:单向散列函数按分组处理输入的消息。
在分组之前,首先将待处理的消息进行填充,使得它的长度恰好是分组长度的整数倍。
一般为了避免不同长度的消息散列后得到相同的散列值,填充的部分需要包含原来消息长度的信息。
将消息分组后对各分组分别处理,压缩函数的输入是上一个变换的输出加上本分组的消息,即:h i =f (M i ,h i 21)。
第i 21个散列值和第i 个消息分组一起,作为第i 轮函数的输入。
最后一个分组的散列值即成为整个消息的散列值。
目前在密码学上已经设计出了大量的单向散列函数,如:Rabin Hash 方案、M erkle Hash 方案、N 2Hash 算法、M D2算法、M D4算法、M D5算法和SH A 等。
通过考察发现,实际系统中用得最多的单向散列函数是消息摘要算法M D5(M essage Digest 5)和安全散列算法SH A (Security Hash Alg orithm )。
它们具有相似的原理和实现方法,下面就以M D5为例详细分析它的实现过程。
3 MD5的原理和实现过程M D5(M essage Digest 5)是著名密码学家R on Rivest 在M D4基础上进行改进得到的一种单向散列函数,它对任意一个文件进行散列,得到128bit 的散列值。
它的大致流程如图1所示。
图1 M D5的实现过程在处理过程中需要一个MD5C ontext 结构,该结构包含了每一次需要处理的一个明文块(512bit )和计算出来的散列值(128bit )。
在散列的整个过程中,它的作用非常重要,各个明文块计算出来的散列值都是通过它来传递的。
计算散列时用到四个32bit 的变量(它们称为链接变量),在计算之前对它们进行初始化如下:A =0x1234567B =0x89abcdefC =0x fedcba98D =0x76543210接着进行算法的主循环,循环的次数是消息中512bit 消息分组的数目。
再将上述四个变量复制到另外的四个变量中:A 到a ,B 到b ,C 到c ,D 到d 。
主循环有四轮,每一轮都很相似,如图2所示。
每一轮进行16次操作。
每一次操作对a ,b ,c ,d 中三个作一次非线性运算,然后将所得到的结果加上第四个变量、文本的一个子分组和一个常数。
再将所得到的结果向右环移一个不定数,并加上a ,b ,c ,d 中的一个。
最后用结果取代a ,b ,c ,d 中的一个,如图3所示。
图2 M D5的主循环 图3 M D5的一次执行过程在每一次操作中用到了四个非线性函数(每一轮一个):F (X ,Y,Z )=(X ∧Y )∨((?X )∧Z )G (X ,Y,Z )=(X ∧Z )∨(Y ∧(?Z ))H (X ,Y,Z )=X Y ZI (X ,Y,Z )=Y (X ∨(?Z ))因为MD5中只用到了以上函数,因此运算速度非常快。
而且,最新的密码分析学表明,到目前为止,在实际中仍然还没有针对它的有效攻击方法,这就是它在目前得到广泛应用的根本原因。
安全散列算法SH A (Security Hash Alg orithm )是由美国NIST 和NS A 一起作为联邦信息处理标准(FIPS )提出的,该标准被用来与数字签名标准(DSS )一起使用。
该算法对于输入的长度小于264bit 的消息(实际中很少有大于此长度的消息),都可以得到160bit 的散列值。
该算法的设计思想和MD5相似,但是比MD5具有更长的散列值,因此更能够抵抗穷举攻击和生日攻击,当然其速度比MD5要慢一些。
关于SH A 算法的更详细介绍,可以参考文献[3]。
4 在密码学中的实际应用我们在这里简要介绍当前单向散列函数在密码学中的几个应用。
411 数字签名技术随着电子商务的逐渐普及,数字签名技术正逐步被接受。
许多发达国家,包括美国、日本和欧洲诸国都已经承认数字签名的法律效力。
其实数字签名是一种身份确认的方式,传统签名用手写识别,数字鉴名用密码确认,两者在交往中的作用并无区别。
但多年不变的传统签名却已赶不上电子商务的形势,特别是对从事国际间B to B (企业对企业)电子商务的企业,迫切需要实现安全的数字签名技术。
与传统签名相比较,数字签名具有安全、快速、高效的特点。
图4是用H ash函数进行数字签名的过程。
图4 使用Hash 函数的数字签名方案・62・ 计算机应用研究2002年利用单向散列函数计算出需要签名的消息的邮摘,再用签名算法对邮摘签名来代替直接对原来的消息进行签名,可有效地提高签名的效率和速度,也减少了传输的信息量,节约了网络的带宽,其优点是显而易见的。
412 消息的完整性认证文件的所有者为了保证一个文件的完整性,通常需要进行文件的完整性验证。
通常的做法是:文件的所有者用Hash 算法计算出文件的Hash 值,自己保存这个Hash 值的一份拷贝,然后他可以把文件存放在一个公开的地方。
每当他需要验证文件的完整性时(如他需要使用这个文件时),他就用同一个Hash 算法计算存储文件的Hash 值,和原来他自己保存的Hash 值相比较,如果相等,则文件是完整的,没有被改动;否则文件已经被改动。
实际中用得最多的是在网络上利用Hash 函数进行完整性鉴别,它的模型和图4类似。
这种方法实现了在不安全的通信信道上的完整性认证,被广泛地使用在电子商务的认证系统中。
413 一种改进的用户密钥管理方案在现有的大多数系统软件和应用软件中(如在Unix ,Linux 下),用户的口令是用DES (或3DES )算法加密后存放在机器中的。
由于DES 算法对被加密的数据的长度有一定的要求,因而一般的系统对用户密钥的长度有一定的限制,即用户不能够输入过长的密钥,这就给系统安全造成了一定的隐患。
同时,由于计算能力的提高,DES 的56bit 密钥已经难以满足用户的需求了。
我们利用单向散列函数提出了一种改进的安全用户密钥管理方案(见图5)。
方案如下:如果K=E (H (P1)),则说明用户请求合法,应该允许其登录,否则拒绝。
图5 改进的用户密钥管理方案本方案的几点说明:(1)在用户输入口令处加入一个口令过滤的模块,是为了防止用户输入过于简单的不安全的口令,现有的许多系统都是如此(如Unix ,Linux )。