第3章_单向散列函数讲义
单向散列函数(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
2018学年高一数学人教A版必修一 课件 第三章 函数的应用 3 章末高效整合 精品
解析:
(1)依题意得 y=6t,0≤t≤1,
-23t+230,1<t≤10.
(2)设第二次服药时在第一次服药后 t1 小时,则-23t1+230=4,解得 t1=4, 因而第二次服药应在 11∶00.
设第三次服药在第一次服药后 t2 小时,则此时血液中含药量应为前两次服 药后的含药量的和,即有-23t2+230-23(t2-4)+230=4,解得 t2=9 小时,故第三 次服药应在 16∶00和 y=x+a 的图象如图:结合 图象可知方程|ax|=x+a 有两个解时,有 a>1.
答案: (1)C (2)A
用二分法求函数的零点或方程的近似解 用二分法求方程近似解注意的问题: (1)看清题目的精确度,它决定着二分法的结束. (2)根据 f(a0)·f(b0)<0 确定初始区间,高次方程要先确定有几个解再确定初始 区间. (3)初始区间的选定一般在两个整数间,不同初始区间结果是相同的,但二 分的次数相差较大. (4)取区间中点 c 计算中点函数值 f(c),确定新的零点区间,直到所取区间(an, bn)中,an 与 bn 按精确度要求取值相等,这个相等的近似值即为所求近似解.
(1.625,1.75) 1.687 5 -0.561 8
(1.687 5,1.75) 1.718 75 -0.170 7
由于|1.75-1.687 5|=0.062 5<0.1,
所以可将 1.75 作为函数零点的近似值.
函数模型及应用 1.函数模型的应用实例主要包含三个方面: (1)利用给定的函数模型解决实际问题; (2)建立确定性函数模型解决实际问题; (3)建立拟合函数模型解决实际问题.
4.不同函数增长模型的对比 “直线上升”“指数爆炸”“对数增长”分别反映了一次函数、指数函数、 对数函数的增长趋势,幂函数的增长介于指数函数与对数函数之间.即总会存在 一个 x0,使得当 x>x0 时,有 logax<xn<ax(a>1,n>0).
散列函数(1).
杂凑函数
例3:设函数y=H(x)具有局部置换性: x的第一个比特总等于y的 第三个比特,无论x为何值。这样的函数不能作为杂凑函数。 取x1并计算y1=H(x1)。 取y为将y1改变第三个比特。求一个x使得y=H(x),可以取为将x1 改变第一个比特。 例4:设函数y=H(x)具有某种连续性:当 y1与y2 “距离很近”时, 存在 x1与x2 “距离很近” ,且y1=H(x1), y2=H(x2) 。这样的函 数不能作为杂凑函数。 取x1并计算y1=H(x1)。取y2与y1“距离很近”。 寻找一个x2使 y2=H(x2),只需要在x1的“附近”寻找,搜索量远远低于穷举 搜索。
杂凑函数
散列编码的用途
用途一:公平提交方案 Alice猜测了一个号码x1,但不知道中奖号码x2; Bob设置了中奖号码x2,但不知道Alice猜测的号码x1。 Alice希望首先获得x2,然后重新确定x1使得x1=x2。 Bob希望首先获得x1,然后重新确定x2使得x2≠x1。 防止两人作弊的方案称为“公平提交方案”。 两人使用一个公开的杂凑函数y=H(x)。方案如下:
杂凑函数
例1:设函数y=H(x)具有可加性:对任意的 x1,x2, H(x1)+H(x2)=H(x1+x2)。这样的函数不能作为杂凑函数。 取x1并计算y1=H(x1);取x2并计算y2=H(x2)。 记y=y1+y2。求一个x使得y=H(x),可以取x=x1+x2。 例2:设函数y=H(x)具有线性:对任意的 x,a,aH(x)=H(ax)。 这样的函数不能作为杂凑函数。 取x1并计算y1=H(x1)。 记y=ay1。求一个x使得y=H(x),可以取x=ax1。
能用于任何大小的消息;
能产生定长输出; 寻找任意的M和M’,会满足H(M)=H(M’)很难。
密码学-散列函数
生日攻击
生日悖论实际上是如下问题的特例:已知一个在 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) , 在计算上不可行(强抗碰撞)。
【C#集合】Hash哈希函数散列函数摘要算法
【C#集合】Hash哈希函数散列函数摘要算法希函数定义哈希函数(英語:Hash function)⼜称散列函数、散列函数、摘要算法、单向散列函数。
散列函数把消息或数据压缩成摘要,使得数据量变⼩,将数据的格式固定下来。
该将数据打乱混合,重新创建⼀个(哈希函数返回的值)称为指纹、哈希值、哈希代码、摘要或散列值(hash values,hash codes,hash sums,或hashes)的指纹。
散列值通常⽤⼀个短的随机字母和数字组成的字符串来代表。
好的散列函数在输⼊域中很少出现。
完美哈希函数就是指没有冲突的哈希函数。
如今,散列算法也被⽤来加密存在数据库中的(password)字符串,由于散列算法所计算出来的散列值(Hash Value)具有不可逆(⽆法逆向演算回原本的数值)的性质,因此可有效的保护密码。
使⽤哈希函数为哈希表编制索引称为哈希或分散存储寻址。
单向散列函数(one-wayhash function),也就是通俗叫的哈希函数。
第⼀个特点:输⼊可以任意长度,输出是固定长度第⼆个特点:计算hash值的速度⽐较快第三个特点,冲突特性(Collision resistance):找出任意两个不同的输⼊值 x、y,使得 H (x)= H (y)是困难的。
(这⾥称为「困难」的原因,是消息空间是⽆穷的,⽽是有限的,因此⼀定会存在碰撞,只是对寻找碰撞的算⼒需要有难度上的约束以哈希函数SHAI (输出为 160-bit)为例:其输出空间为(0,2^160),假设输出范围⼀万亿个哈希值,发⽣碰撞的概率仅为 3×10-25。
被碰撞的概率太低,⼏乎不可能。
第四个特点:隐藏性(Hiding)或者叫做单向性(one-way):哈希函数的单向性意味着,给定⼀个哈希值,我们⽆法(很难)逆向计算出其原像输⼊。
第五点:谜题友好(puzzlefriendly)HashTable定义哈希表时保存数据的表。
通过哈希函数使得数据和存储位置之间建⽴⼀⼀对应的映射关系。
应用密码学 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 。
散列函数及其应用
散列函数及其应⽤散列函数 散列,英⽂Hash,也有直接⾳译为“哈希”的,就是把任意长度的输⼊(⼜叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。
这种转换是⼀种压缩映射,也就是,散列值的空间通常远⼩于输⼊的空间,不同的输⼊可能会散列成相同的输出,所以不可能从散列值来确定唯⼀的输⼊值。
简单的说就是⼀种将任意长度的消息压缩到某⼀固定长度的信息摘要的函数。
散列函数的应⽤ 在算法竞赛中,我所接触到的主要有字符串hash⽤于把字符串“索引”为⼀个值,然后对复杂字符串进⾏操作,来加快遍历速度,降低算法复杂度。
把字符串匹配转移到了值匹配。
但是散列函数属于⼀种“概率型算法”,对于模的取值有⼀定概率出现碰撞。
所以在算法竞赛中不常使⽤,或者要多次测验避免碰撞。
在信息安全⽅⾯的应⽤主要体现在以下的3个⽅⾯: 1)⽂件校验 我们⽐较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能⼒,它们⼀定程度上能检测并纠正数据传输中的信道误码,但却不能防⽌对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为⽬前应⽤最⼴泛的⼀种⽂件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2)数字签名 Hash 算法也是现代密码体系中的⼀个重要组成部分。
由于⾮对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了⼀个重要的⾓⾊。
对 Hash 值,⼜称"数字摘要"进⾏数字签名,在统计上可以认为与对⽂件本⾝进⾏数字签名是等效的。
⽽且这样的协议还有其他的优点。
3)鉴权协议 如下的鉴权协议⼜被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是⼀种简单⽽安全的⽅法。
散列函数的安全性 两个不同的输⼊,经过哈希算法后,得到了同样的哈希值,就叫做哈希碰撞。
单向散列函数算法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,由此完成一次循环。
单向散列函数 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位表示附加在填充后的消息后面。
摘要函数单向散列函数
产生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 )
网络安全-安全散列函数,信息摘要SHA-1,MD5原理
⽹络安全-安全散列函数,信息摘要SHA-1,MD5原理-----------------------------------------------欢迎查看⽹络安全连载博客--------------------------------------------------------------------------------------------------------------------------------------------------------本⽂绝⼤部分内容来⾃《⽹络安全基础——应⽤与标准》第五版——清华⼤学出版社。
当中蓝⾊部门是⾃⼰加⼊安全散列函数单向散列函数或者安全散列函数之所以重要,不仅在于消息认证(消息摘要。
数据指纹)。
还有数字签名(加强版的消息认证)和验证数据的完整性。
常见的单向散列函数有MD5和SHA散列函数的要求散列函数的⽬的是⽂件、消息或者其它数据块产⽣“指纹”。
为满⾜在消息认证中的应⽤,散列函数H必须具有下列性质:(1)H可适⽤于随意长度的数据块。
(2)H能够⽣成固定长度的输出。
(2)对于随意给定的x,计算H(x)相对easy,⽽且能够⽤软/硬件实现。
(4)对于随意给定的h,找到满⾜H(x)=h的x在计算上不可⾏。
满⾜这⼀特性的散列函数称之为:具备抗原像攻击性。
(5)对于随意给定的数据块x,找到满⾜H(y)=H(x)的y ≠ x在计算上是不可⾏;满⾜这⼀特性的散列函数称之为:抗弱碰撞性。
(6)找到满⾜H(x) = H(y)的随意⼀对(x,y)在计算上是不可⾏的。
满⾜这⼀特性的散列函数称之为:抗碰撞性。
前三个性质是使⽤散列函数进⾏消息认证的实际可⾏要求。
第四个属性,抗原像攻击,防⽌攻击者能够回复秘密值。
抗弱碰撞性保证了对于给定的消息。
不可能找到具有同样散列值的可替换消息。
满⾜上⾯前5个性质的散列函数称之为弱散列函数。
假设还满⾜第6个性质则称之为强散列函数。
第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算法
第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函数是单向函数 多的关系) 只有通过枚举, 多的关系) ,只有通过枚举,在现有的计算环境下是不 可行的。 可行的。
单向散列函数的原理_实现和在密码学中的应用
收稿日期: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 单向散列函数简介密码学中使用的单向散列函数将任意长度的消息压缩到某一固定长度的消息摘要。
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)。
散列方法散列函数
2005-5-12
2005 Spring Data Structures by Haiyan Zhao
23
数字分析法
计算各位数字中符号分布的均匀度 k 的公
式: r
λ k
(αki n / r )2
i 1
其中,αki 表示第 i 个符号在第 k 位上出现的次
2005-5-12
2005 Spring Data Structures by Haiyan Zhao
22
数字分析法
设有 n 个 d 位数,每一位可能有 r 种不同的符 号
这 r 种不同的符号在各位上出现的频率不一定 相同
可能在某些位上分布均匀些,每种符号出现的 几率均等
在某些位上分布不均匀,只有某几种符号经常 出现
缺点:分布不均匀 如果偶数关键码比奇数关键码出现的概率 大,那么函数值就不能均匀分布 反之亦然
2005-5-12
2005 Spring Data Structures by Haiyan Zhao
16
除余法
若把M设置为2的幂
那么,h(x)=x mod 2k 仅仅是x(用二进制表 示)最右边的k个位(bit)
12361, 07251, 03309, 30976 采用的散列函数为 h(x) = x % 73 则有 h(12361) = h(07251) = h(03309) = h(30976)
2005-5-12
2005 Spring Data Structures by Haiyan Zhao
9
散列法的要素
若把M设置为10的幂
那么,h(x)=x mod 10k 仅仅是x(用十进制 表示)最右边的k个十进制位(digital)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(Collision)的条件:要找到两个随机的消息M和M',使 H(M)=H(M')很难。
1) 附加填充位
2) 附加长度64
填充位
消息长度(K mod 264)
L 512bit N 32bit
Kbit 消息
100…0
512bit Y0
512bit
Y1
…
512bit YL-1
IV 128
512
HMD5
CV1 128
512
HMD5
…
CVL-1 128
图3-2 MD5算法
512 HMD5
3
Network and Information Security
第3章 单向散列函数
Hash函数的良好性质
• ( 1 )广泛的应用性 • Hash函数能用于任何大小的消息。 • ( 2 ) 定长输出 • 将消息集合∑中的任意长度的消息M映射为长度为m的
消息摘要。 • ( 3 ) 实现性 • 对Hash函数的一个非常重要的要求是简单易实现性。 • ( 4 ) 单向性质 • 要求Hash函数是单向函数。给定h值,求信息M (是一对
第3章 单向散列函数
3) 初始化MD缓冲区 初始化用于计算消息摘要的128位缓冲区。这个缓冲
区由四个32位寄存器A、B、C、D表示。寄存器的初始 化值为(按低位字节在前的顺序存放):
A: 01 23 45 67 B: 89 ab cd ef C: fe dc ba 98 D: 76 54 32 10 4) 按512位的分组处理输入消息 这一步为MD5的主循环,包括四轮,如图3-3所示。 每个循环都以当前的正在处理的512比特分组Yq和128 比特缓冲值ABCD为输入,然后更新缓冲内容。
可行的。 注:以上两种,哪一种更容易找? ( 7 ) 独立性 哈希函数值“不依赖输入信息”,从某种程度上说是由算法决定的。 ( 8 )抗近冲突 Hash函数满足独立性,输入信息某一位的变化,应该引起平均一半
的输出位的变化。 (9 ) 安全性 在很广泛的条件下, Hash值H(M)的分布是均匀分布的.
填充消息长度=512-(k+64) mod 512 2) 附加长度
将原消息长度的64位表示附加在填充后的消息后面。 当原消息长度大于264时,用消息长度mod 264填充。这时, 总长度恰好是512的整数倍。令M[0 1…N−1]为填充后消 息的各个字(每字为32位),N是16的倍数。
9
Network and Information Security
3.2 MD5 算 法
3.2.1 算法
MD表示消息摘要(Message Digest)。 MD5是MD4的改进版,该算法对输入的 任意长度消息产生128位散列值(或消息 摘要) 。MD5算法可用图3-2表示。
7
Network and Information Security
第3章 单向散列函数
4) 按512位的分组处 理输入消息
128位消息摘要
3) 初始化MD 缓冲区
8
图3-2 MD5算法
5) 输出
Network and Information Security
第3章 单向散列函数
由上图可知,MD5算法包括以下五个步骤。 1) 附加填充位
首先填充消息,使其长度为一个比512的倍数小64位的 数。填充方法:在消息后面填充一位1,然后填充所需数 量的0。填充位的位数从1~512。
• 单向散列函数是数字签名中的一个关键环节,可以大大 缩短签名时间并提高安全性,另外在消息完整性检测, 内存的散布分配,软件系统中帐号口令的安全存储单向 散列函数也有重要应用。
2
Network and Information Security
第3章 单向散列函数
3.1 单向散列函数概述
• 所谓的单向散列函数(Hash Function,又称哈希函数、杂 凑函数),是将任意长度的消息M映射成一个固定长度散列 值h(设长度为m)的函数H: • h=H(M)
5
Network and Information Security
第3章 单向散列函数
散列函数工作模式
消息分组1 消息分组2 …
消息分组n 填充位
压缩
IV
函数
压缩
函数
…
压缩 函数
函数值
图3-1 单向散列函数工作模式
6
Network and Information Security
第3章 单向散列函数
第3章 单向散列函数
第3章 单向散列函数
3.1 单向散列函数概述 3.2 MD5算法 3.3 SHA-1算法 3.4 消息认证码(MAC) 3.5 对单向散列函数的攻击
1
Network and Information Security
第3章 单向散列函数
• 随着以Internet为基础的电子商务技术的迅猛发展,以 公钥密码、数字签名等为代表的加密安全技术已成为 研究的热点。
第3章 单向散列函数
10
Network and Information Security
第3章 单向散列函数
Yq CVq
A
+
A
B第
第
第
第
C一
二
三
四
轮
轮
轮
轮
+ +
B
C
CVq+ 1
D
+D
图3-3 单个512比特分组的MD5主循环处理
11
Network and Information Security
第3章 单向散列函数
图3-3中,四轮的操作类似,每一轮进行16次操作。 各轮的操作过程如图3-4所示。
a
a
Mj
T[i]
b b
c
非线性函数 +
+
+
<<<s +
c
ቤተ መጻሕፍቲ ባይዱ
d d
j:0—15, i:1—64(共四轮, 每一轮用的都不同)
图3-4 MD5某一轮的1次执行过程
12
Network and Information Security
多的关系) ,只有通过枚举,在现有的计算环境下是不 可行的。
4
Network and Information Security
第3章 单向散列函数 ( 5 ) 抗弱对抗性
确定与x有相同位数的y,使H(x)=H(y), 在现有的计算环境下是不可 行的。
( 6 ) 抗强对抗性 找到两个不同位数信息x,y,使H(x)=H(y),在现有的计算环境下是不