单向散列函数的原理_实现和在密码学中的应用
4)单向散列函数介绍(Hash解读

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碰撞攻击。
第3章 单向散列函数

第3章 单向散列函数
第3章 单向散列函数
第3章 单向散列函数
第3章 单向散列函数
第3章 单向散列函数
5.输出 由A、B、C、D四个寄存器的输出按低位字节在前的顺 序(即以A的低字节开始、D的高字节结束)得到128位的消息 摘要。 以上就是对MD5算法的描述。MD5算法的运算均为基 本运算,比较容易实现且速度很快。
图3-7 HMAC
第3章 单向散列函数 由图可知,HMAC执行的是如下操作:
第3章 单向散列函数
HMAC算法可以和任何密码散列函数结合使用,而且对 HMAC实现作很小的修改就可用一个散列函数H代替原来的 散列函数H′。
第3章 单向散列函数
参考文献
[1] R Rivest. The MD5 Message-Digest Algorithm. RFC 1321,April 1992
第3章 单向散列函数
(2) 初始化:
(3) 主循环:利用2.1.1中描述的过程对字块1(本例只有 一个字块)进行处理。变量a、b、c、d每一次计算后的中间 值可根据参考文献[1]提供的C源代码得到,这里不详细列出。
(4) 输出:消息摘要 = 90015098 3cd24fb0 d6963f7d 28e17f72
IV 128
512
HMD5
CV1 128
512 HMD5
……
512 bits YL-1
CVL-1 128
512 HMD5
128 位消息摘要
图3-2 MD5算法
现代密码学第六章单向函数和散列函数2

HASH函数和MAC(二)
1
上节内容回顾
单向函数 Hash函数的定义 hash函数的用途 MD5算法 SHA-256算法
2
本节主要内容
消息鉴别码定义 CBC-MAC HMAC CCT认证加密标准
3
消息鉴别码
消息鉴别码又称为带密钥的hash
发送方
消息
接收方
密钥K
Hash函数
消息
公开信道
Hash函数 消息
密钥K
认证码 消息摘要
认证码
消息摘要
相等 是 认证有效
否
认证无效
4
消息鉴别码
消息认证码MAC(Message Authentication Code)是一 种消息认证技术。
发送方A和接收方B共享密钥K,若A向B发送消息M,则A计 算利用C=F (K, M)计算MAC值;然后将原始消息M和C一起 发送给接收方。 接收方B对收到的消息M用相同的密钥K进行相同的计算得 出新的MAC值C’。并将接收到的C与其计算出的C’进行比较 , 若相等,则: (1) 接收方可以相信消息未被修改。 (2) 接收方可以确信消息来自真正的发送方。
F是MAC函数,它利用密钥K和任意长度的消息M来 生成一个固定长度的短数据块C。
5
消息鉴别码
攻击目的
1 伪造攻击: 攻击者在没有密钥K的情况下,伪造一个未经过 认证的(M,Mac)对.
存在性伪造: 如果攻击者只能够对一个不由他控制的消息进行伪造, 那么这种伪造攻击称为存在性伪造攻击. 选择性伪造: 如果攻击者能够对由他选择的消息进行伪造,那么这种伪 造攻击称为选择性伪造攻击.
第7讲 单向散列函数

单向散列函数还经常用于消息认证(防篡改)、数字签名。
本章将介绍两种常用的单向散列函数。
第7章
单向散列函数
7.3 MD5 算 法
MD表示消息摘要(Message Digest)。MD5是MIT的 Rivest教授设计的,是MD4的改进版,该算法对输入的 任意长度消息产生128位散列值(或消息摘要)。
第7章
单向散列函数
单向散列函数的安全性要求
对Hash函数的最直接的攻击就是攻击者在得到数据的x 的Hash值后,试图寻找一个数据 x’≠x,使h(x’)=h(x)。 因此,密码学中的Hash函数必须满足一定的安全要求。 这些要求主要有三个方面:单向性、弱抗碰撞性、强 抗碰撞性。 单向性是指对Hash函数h而言,由x计算h(x)是容易的, 但从h(x)计算x是不可行的。
第7章
单向散列函数
由不带密钥的Hash函数和带密钥的Hash函数各自提供 的数据完整性保证是有区别的。用不带密钥的Hash函 数时,消息摘要必须安全地存放,不能被篡改。
目前不带密钥的Hash函数使用最广泛,主要用于数字
签名等领域。
第7章
单向散列函数
7.1 单向散列函数的概念
散列函数(Hash)函数是将任意长的数字串M映射成一 个较短的定长输出数字串H的函数,以h表示,h(M)为 M的杂凑值,也称杂凑码、杂凑结果等,或简称杂凑。 这个H无疑打上了输入数字串的烙印,因此又称为输入 M的数字指纹(Digital Finger Print)。 h是多对一映射,因此我们不能从H 求出原来的M,但 可以验证任一给定序列M’是否与M具有相同的杂凑值, 从而以很大的概率判断M’ 和M是否相同。
第7章
单向散列函数
给定一任意长度的消息输入,单向函数输出长为m的
单向函数

密码应用中码体制,因为它的求逆困难,用它加密的信息谁都不能解密。但是,单 向函数在密码学领域里却发挥着非常重要的作用。一个最简单的应用就是口令保护。我们熟知的口令保护方法是 用对称加密算法进行加密。然而,对称算法加密一是必须有密钥,二是该密钥对验证口令的系统必须是可知的, 因此意味着验证口令的系统总是可以获取口令的明文的。这样在口令的使用者与验证口令的系统之间存在严重的 信息不对称,姑且不说系统提供者非法获取用户口令的情况,一旦系统被攻破,可能造成所有用户口令的泄露。 使用单向函数对口令进行保护则可以很好地解决这一问题。系统方只存放口令经单向函数运算过的函数值,验证 是将用户口令重新计算函数值与系统中存放的值进行比对。动态口令认证机制多是基于单向函数的应用来设计的。
一个最简单的、大家熟知的“侯选”单向函数就是整数相乘。
函数是一个单向函数当且仅当可以用一个多项式时间的算法计算,但是对于任意一个以为输入的随机化多项 式算法,任意一个多项式,和足够大,使得
陷门
显然,单向函数不能直接用作密码体制,因为如果用单向函数对明文进行加密,即使是合法的接收者也不能 还原出明文了,因为单向函数的逆运算是困难的。与密码体制关系更为密切的概念是陷门单向函数。一个函数称 为是陷门单向的,如果该函数及其逆函数的计算都存在有效的算法,而且可以将计算的方法公开,即使有计算f的 完整方法也不能推导出其逆运算的有效算法。其中,使得双向都能有效计算的秘密信息叫做陷门(trap door)。
第一个陷门单向函数与上面介绍过的第二个单向函数候选类似:固定指数和模数的模指数运算。不同的是这 次是固定指数和模数,前面是固定基数和模数。设和是整数,同上,关于指数和模的模指数运算函数,由,定义。 又与实数域上概念类似,其逆运算也叫作求模的次根,即:给定整数、和,求整数使得成立(如果这样的a存在的 话)。例如,5就是16模21的4次根,因为 mod 21=16。显然,2也是16模21的4次根。大家可以尝试着求出16模21 的另一个4次根,或者求一个整数,它模21没有4次根。
现代密码学第6讲:单向函数和散列函数1

x 0 0 1 1 x 0 0 1 1
y 0 1 0 1 y 0 1 0 1
x∧y 0 0 0 1 x⊕y 0 1 1 0
x 0 0 1 1 x 0 1
y 0 1 0 1
x∨y 0 1 1 1 ¬x 1 0
ti [2 abs(sin(i ))]
32
异或
非
其中i的单位是弧度; [x]表示取x的整数部分.
消息认证码 MAC (Message Authentication Code)
带密钥的哈希函数 主要用于消息源认证和消息完整性
9
Hash函数的用途
消息完整性检测 Hash链用于口令认证 数字签名(速度快;防止消息伪造) 消息完整性和消息源认证(MAC) 。。。。。。
10
Hash函数的用途
数分为4轮,每轮16步,共64步. 01100001 01100010 01100011 00…011000 4 输出散列值128比特. 1 00…00
“a” “b” “c”
l=24
23
MD5算法
消息M
填充使分组恰好512位
M1
初 始 值
M2 f
。。。
Mt f
哈 希 值
f
。。。
注:填充方法是附一个1在消息后面,后接所要求的多个 0,然后在其后附上64位的消息长度(填充前)。
据表的插入、删除、查询操作可以份证
h
1A3FD4128A198FB3CA345932
6
Hash函数的定义
单向性(抗原像):对干任意给定的消息,计算其哈希值
容易. 但是,对于给定的哈希值h,要找到M使得H(M)=h
在计算上是不可行的.
单向散列函数(HASH函数)基本原

单向散列函数(HASH函数)基本原
Hash函数H(m)也名单向散列函数,它是现代密码学的核心。
散列函数一直在计算机科学中使用,散列函数就是把可变的输入长度串转换成固定长度输出值(叫做散列值)的一种函数。
而单向散列函数是在一个方向上工作的散列函数,从预映射的值很容易计算机其散列值,但要使其散列值等于一个特殊值却很难。
好的散列函数也是无冲突的:难于产生两个预映射的值,使他们的散列值相同。
散列函数是公开的,对处理过程并不保密,单向散列函数的安全性是它的单向性,其输出不依赖于输入。
平均而言,预映射值的单个位的改变,将引起散列值中一半位的改变。
已知一个散列值,要找到预映射的值,使它的值等于已知的散列值在计算上是不可行的,可把单向散列函数看作是构成指纹文件的一种方法。
如果你验证某人持有一个特定的文件(你同时也持有该文件),但你不想他将文件传给你,那幺,就要通知他将该文件的散列值传给你,如果他传送的散列值是正确的,那幺可以肯定他持有那份文件。
散列函数可用于数字签名、消息的完整性检测、消息起源的认证检测等。
常见的散列算法有MD5、SHA、Snefru和HVAL等。
第03章 单向散列函数

信息安全技术
27
3.3 消息认证码(MAC)
与密钥相关的单向散列函数通常 称为MAC,即消息认证码: MAC=CK(M)
源端A M K K C CK(M) Ⅱ 目的端B M C 比较
信息安全技术
28
3.3 消息认证码(MAC)
HMAC 全 称 为 Keyed-Hash Message Authentication Code, 它用一个秘密密钥来 产生和验证MAC。 HMAC 算法可以和任何密码散列函数结 合使用,而且对 HMAC 实现作很小的修改就 可用一个散列函数 H 代替原来的散列函数 H' 。
信息安全技术
4
3.1 单向散列函数概述 散列函数要具有单向性,则必须满足如下 特性:
给定M,很容易计算h。 给定h,根据H(M)=h反推M很难。 给 定 M , 要 找 到 另 一 消 息 M ’ 并 满 足 H(M)=H(M’)很难。
在某些应用中,单向散列函数还需要满足 抗碰撞(Collision)的条件:要找到两个随机 的消息M和M',使H(M)=H(M')满足很难。
信息安全技术
15
3.2 MD5算法
5) 输出 由A、B、C、D四个寄存器的输出按低位字 节在前的顺序 ( 即以 A 的低字节开始、 D 的高字
节结束)得到128位的消息摘要。
信息安全技术
16
大字节序:把高有效位放在低地址段,例如在按字节寻址
的存储器中存放值 0x12345678
地址 0x0004 0x0003 0x0002 0x0001 地址 0x0004 0x0003 0x0002 0x0001 数值 0x78 0x56 0x34 0x12 数值 0x12 0x34 0x56 0x78
密码学-散列函数

生日攻击
生日悖论实际上是如下问题的特例:已知一个在 1 到 n 之 间均匀分布的整数型随机变量,若该变量的一个 k 个取值 的集合中至少有两个取值相同的概率大于 0.5,则 k 至少 多大? 该问题的一般结论是:k≈1.18 * n1/2 例如对于生日悖论,有 n=365,因此 k ≈ 22.5。 通过“生日悖论”可以引出对散列函数的生日攻击法 通过这种方法,只要对超过 n1/2 个随机元素(n 是散列 函数输出集合的大小,如散列函数的输出为 m bit,则 n=2m)计算散列值,那么将有 0.5 的概率出现一个碰 撞。
生日攻击可能的实施步骤
可用如下方法对散列函数进行生日攻击(假设散列函数的 输出长度为 m bit):
1)攻击者对合法报文创建 2m/2 个变种,所有这些变种本质上都和 合法报文表示同样的意思; 2)同样,攻击者再对伪造报文创建 2m/2 个变种; 3)比较这两个集合,以期发现任意一对能产生相同散列值的报文 对(合法报文变种、伪造报文变种),根据生日悖论,找到这样一对 报文的概率Pr > 0.5; 4)攻击者向签名者出示合法报文变种,让签名者对合法报文变种 的散列值签名;然后攻击者用伪造报文变种代替合法报文变种, 并声称签名者对伪造报文变种签名了。由于这两个报文具有相同 的散列值,因此欺骗总能成功。
2、散列函数的需求
1、H能用于任意长度的数据分组; 2、H产生定长的输出; 3、对任意给定的X,H(X)要容易计算; 4、对任何给定的h,寻找 x 使得H(x)=h,在计算 上不可行(单向特性); 5、对任意给定的分组 x,寻找不等于 x 的 y,使 得 H(x)=H(y), 在计算上不可行(弱抗碰撞); 6、寻找任意的一对分组(x,y), 使得 H(x)=H(y) , 在计算上不可行(强抗碰撞)。
单向散列函数的原理_实现和在密码学中的应用

收稿日期: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算法一种将任意长度的消息压缩到某一

单向散列函数算法(Hash算法):一种将任意长度的消息压缩到某一固定长度(消息摘要)的函数(过程不可逆),常见的单向散列算法有MD5,SHA.RIPE-MD,HAVAL,N-Hash由于Hash函数的为不可逆算法,所以软件智能使用Hash函数作为一个加密的中间步骤MD5算法:即为消息摘要算法(Message Digest Algorithm),对输入的任意长度的消息进行预算,产生一个128位的消息摘要简易过程:1、数据填充..即填出消息使得其长度与448(mod 512)同余,也就是说长度比512要小64位(为什么数据长度本身已经满足却仍然需要填充?直接填充一个整数倍)填充方法是附一个1在后面,然后用0来填充..2、添加长度..在上述结果之后附加64位的消息长度,使得最终消息的长度正好是512的倍数..3、初始化变量..用到4个变量来计算消息长度(即4轮运算),设4个变量分别为A,B,C,D(全部为32位寄存器)A=1234567H,B=89abcdefH,C=fedcba98H,D=7654321H4、数据处理..首先进行分组,以512位为一个单位,以单位来处理消息..首先定义4个辅助函数,以3个32为双字作为输入,输出一个32为双字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))其中,^是异或操作这4轮变换是对进入主循环的512为消息分组的16个32位字分别进行如下操作:(重点)将A,B,C,D的副本a,b,c,d中的3个经F,G,H,I运算后的结果与第四个相加,再加上32位字和一个32位字的加法常数(所用的加法常数由这样一张表T[i]定义,期中i为1至64之中的值,T[i]等于4294967296乘以abs(sin(i))所得结果的整数部分)(什么是加法常数),并将所得之值循环左移若干位(若干位是随机的??),最后将所得结果加上a,b,c,d之一(这个之一也是随机的?)(一轮运算中这个之一是有规律的递增的..如下运算式),并回送至A,B,C,D,由此完成一次循环。
应用密码学 5 单向散列函数和消息认证

Hash函数按是否需要密钥可分为以下两类:
(1)不带密钥的Hash函数,它只有一个被通常称为消息的输入参数。 (2)带密钥的Hash函数,它有两个不同的输入,分别称为消息和密钥。
5.1 单向散列函数基础
按设计结构,散列算法可以分为三大类:标准Hash、基于分组
加密Hash、基于模数运算Hash。 标准Hash函数有两大类:MD系列的MD4,MDS,HAVAL, RIPEMD,RIPEMD-160等;SHA系列的SHA-l,SHA-256, SHA-384,SHA-512等,这些Hash函数体现了目前主要的Hash 函数设计技术。
5.1 单向散列函数基础
5.1.2 Hash函数的性质 H 必须满足以下性质。 从应用需求上来说,Hash函数 (1) H 能够应用到任何大小的数据块上。 (2) H 能够生成大小固定的输出。 (3)对任意给定的 x , H ( x ) 的计算相对简单,使得硬件和软件的实现可行。 从安全意义上来说,Hash函数H应满足以下特性: (1)对任意给定的散列值h ,找到满足 H ( x) h 的 x 在计算上是不可行的。 (2)对任意给定的 x ,找到满足H ( x) H ( y)而 x y 的 y 在计算上是不可行 的。 (3)要发现满足 H ( x) H ( y) 而 x y的对 ( x, y )是计算上不可行的。
第 5章 单向散列函数和消息认证
Logo
5.单向散列函数和消息认证
5.1 单向散列函数基础
5.2 MD5算法
5.3 SHA-1算法
5.4 SM3算法
5.5 消息认证
5.1 单向散列函数基础
所谓的单向散列函数(Hash Function,又称哈希函数、杂凑函数) , 是将任意长度的消息映射成一个固定长度散列值 (设长度为 )的函数 : 散列函数要具有单向性,则必须满足如下特性: (1)给定 M,很容易计算 h 。
摘要函数单向散列函数

产生160-位消息摘要 是目前最好的散列函数
3.2 安全散列函数保密(SHA)
算法:1-4 步骤 P47
SHA-1 Processing of single 512-Bit Block
2:初始化MD缓冲区 •5个32位寄存器 •(A,B,C,D,E) •A=67452301 •B=EFCDAB89 •C=98BADCFE •D=10325476 •E= C3D2E1F0
SHA-1 Processing of single 512-Bit Block
3(2):80个步骤运算方式: •For t=0 to 79 • temp=(A<<<5)+ft(b,c,d)+e+Wt+Kt • e=d • d=c • c=b<<<30 • b=a • a=temp •(其中,+表示mod 232的模运算)
SHA-1 Processing of single 512-Bit Block
3(1):压缩函数f1f2f3f4 •512字节块分割16X32 •Wt=Mt 0<=t<=15 •Wt=Wt-3 Wt-8 • Wt-14 Wt-16 • 16<=t<=79 •f1f2f3f4非线性函数 •Kt为常数
HMAC
按Internet 标准 RFC 2104 定义:
HMACK = Hash[(K0 XOR opad) || Hash[(K0 XOR ipad)||M)]]
K0 是填充至b字节的密钥 opad, ipad 是常数 MD5, SHA-1, RIPEMD-160 可以使用
HMAC Structure
( k = 1, …16 )
单向函数的密码学应用

单向函数的密码学应用费如纯【摘要】This paper discusses the definition, security and cryptographic application of one-way function, involving symmetrical key cryptography algorithms, message digest algorithms and public key cryptography algorithms, and illuminates the basic idea of cryptosystem: if a one-way function with strong security is constructed, a cryptosystem with strong security can be designed on the basis of the constructed one-way function.%文章讨论了单向函数的定义、安全性要求以及单向函数在密码学中的应用,涉及对称钥密码算法、报文算法及公开钥密码算法,进一步阐明了密码系统的基本思想:只要构造出足够安全的单向函数,就可以以之为基础构造足够安全的密码系统.【期刊名称】《辽宁科技学院学报》【年(卷),期】2017(019)001【总页数】3页(P1-3)【关键词】单向函数;对称钥算法;报文摘要算法;公开钥算法【作者】费如纯【作者单位】辽宁科技学院曙光大数据学院,辽宁本溪 117004【正文语种】中文【中图分类】TP309.3随着计算机网络的不断发展,信息技术已经深入到社会生活的方方面面,然而网络攻击和信息窃取事件也越来越成为人们关注的焦点。
信息安全关系国计民生,不容忽视。
信息安全的基础是密码学,而密码学则基于计算复杂性理论。
合法用户对重要信息进行加密以及合法的授权用户对信息进行解密应该是能够快速完成的,即多项式时间可计算的;而非法用户要窃取机密信息则必须对已经加密的信息进行解密,这要求他必须为非法破译付出不可思议的巨大计算代价,即攻击者即使具有庞大的计算资源,他在现有科技条件下完成破译工作也要花费指数时间,这样就使得机密信息成为计算安全的。
第3章 单向散列函数

Network and Information Security
第3章 单向散列函数
• 所谓的单向散列函数(Hash Function,又称哈希函数、杂 所谓的单向散列函数(Hash Function,又称哈希函数、 单向散列函数 凑函数) 是将任意长度的消息 映射成一个固定长度散列 任意长度的消息M 凑函数),是将任意长度的消息M映射成一个固定长度散列 设长度为m)的函数H m)的函数 值h(设长度为m)的函数H: • h=H(M) • 散列函数要具有单向性,则必须满足如下特性: 散列函数要具有单向性,则必须满足如下特性: • • • 给定M 很容易计算h ● 给定M,很容易计算h。 给定h 根据H(M)=h反推M很难。 H(M)=h反推 ● 给定h,根据H(M)=h反推M很难。 给定M 要找到另一消息M'并满足H(M)=H(M')很难。 M'并满足H(M)=H(M')很难 ● 给定M,要找到另一消息M'并满足H(M)=H(M')很难。
第3章 单向散列函数
Hash函数的良好性质 Hash函数的良好性质
• ( 1 )广泛的应用性 • Hash函数能用于任何大小的消息。 Hash函数能用于任何大小的消息。 函数能用于任何大小的消息 • ( 2 ) 定长输出 • 将消息集合∑中的任意长度的消息M映射为长度为m的 将消息集合∑ 中的任意长度的消息M 映射为长度为m 消息摘要。 消息摘要。 • ( 3 ) 实现性 • 对Hash函数的一个非常重要的要求是简单易实现性。 Hash函数的一个非常重要的要求是简单易实现性。 函数的一个非常重要的要求是简单易实现性 • ( 4 ) 单向性质 • 要求Hash函数是单向函数。给定h值,求信息M (是一对 要求Hash函数是单向函数。给定h 求信息M Hash函数是单向函数 多的关系) 只有通过枚举, 多的关系) ,只有通过枚举,在现有的计算环境下是不 可行的。 可行的。
单向散列函数 Hash 函数

单向散列函数简单散列函数每个分组按比特异或(简单奇偶校验):改进:针对可预测数据,每次循环左移一位将数据和散列值再异或。
结果:随机化、去格式化i i1i2imC b b ...b =⊕⊕⊕单向散列函数:Hash Function ,哈希函数、杂凑函数将任意长度的消息M 映射成一个固定长度散列值h 的函数:h=H(M)其中,h 的长度为m 。
用途:消息认证、数字签名。
单向散列函数散列函数要具有单向性,则必须满足如下特性:●给定M,很容易计算h,便于软硬件实现。
●给定h,根据H(M)=h反推M很难。
(单向性)●给定M,找到另一M’满足H(M)=H(M’)很难。
(弱抗攻击性)在某些应用中,单向散列函数还需要满足抗碰撞(Collision)的条件:要找到两个随机的消息M和M’,使H(M)=H(M’)满足很难。
(强抗攻击性)还要求:能产生定长输出;寻找任意的M和M’,会满足H(M)=H(M’)很难。
实现:单向散列函数是建立在压缩函数之上的:…MD 表示消息摘要(Message Digest),单向散列函数输入:给定一任意长度的消息输出:长为m 的散列值。
压缩函数的输入:消息分组和前一分组的输出(对第一个函数需初始化向量IV);输出:到该点的所有分组的散列,即分组M i 的散列为h i =f (M i , h i −1)循环:该散列值和下一轮的消息分组一起作为压缩函数下一轮的输入,最后一分组的散列就是整个消息的散列。
3.1 MD5 算法3.1.1 算法MD5对输入的任意长度消息产生128位散列值:填充位消息长度(K mod 264)…MD5算法五个步骤:1) 附加填充位2) 附加长度3) 初始化MD 缓冲区处理1) 附加填充位填充消息,使其长度为一个比512的倍数小64位的数。
填充方法:在消息后面填充一位1,然后填充所需数量的0。
填充位的位数从1~512。
2) 附加长度将原消息长度的64位表示附加在填充后的消息后面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期: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 )。