第11章 密码学Hash函数
密(研)11-密码学Hash函数

第11章 密码学Hash函数Crytographic Hash Functions课程内容大纲1. 引言第一部分:对称密码2. 传统加密技术第三部分:密码学数据完整性算法11.密码学Hash函数3. 分组密码与数据加密标准(DES) 12.消息认证码(MAC) 4. 数论与有限域的基本概念 13.数字签名 5. 高级加密标准(AES) 6. 分组密码的工作模式 7. 伪随机数的产生和流密码第四部分:相互信任14.密钥管理与分发 15.用户认证第二部分:公钥密码8. 数论入门 9. 公钥密码学与RSA 10. 密钥管理和其他公钥密码体制讲课内容11.1 密码学Hash函数的应用 11.2 两个简单的Hash函数 11.3 需求和安全性、安全Hash函数结构 11.4 基于分组密码链接的Hash函数 11.5 安全Hash算法(SHA) 补充:Hash函数MD511.1 密码学Hash函数的应用Hash函数定义• (单词"hash"的翻译:哈希、杂凑、散列、… ) • Hash函数H是一公开函数,用于将任意长的消息 M映射为较短的、固定长度的一个值H(M)。
称函 值H(M)为杂凑值、杂凑码或消息摘要 M → h = H(M)• 在安全应用中使用的Hash函数称为密码学Hash 函数(cryptographic hash function)Hash函数特点• Hash值 H(M) 是消息中所有 比特的函数,因此提供了一 种错误检测能力,即改变消 息中任何一个比特或几个比 特都会使杂凑码发生改变。
Hash函数的应用(1)消息认证 (2)数字签名 (3)其它一些应用Hash函数应用之一:消息认证• 消息认证是用来验证消息完整性的一种机制或服务 完整性 • 当Hash函数用于提供消息认证功能时,Hash函数 值通常称为消息摘要(message digest)• 一般地,消息认证是通过使用消息认证码(MAC) 实现的,即带密钥的Hash函数。
密码学--HASH函数

A
H(mA)(m为口令)
A
H (m A )
'
H(mA)
A:口令m’
=
是 接受
否
拒绝
Hash函数在银行应用举例采用Hash函数,银行操作人员不能获取到用户的密码
THE END!
由m计算H(m)容易
H
由H(m)计算上m不容易
HASH函数的安全性要 求
② 抗弱碰撞性:对于任何给定消息及其散列 值,不可能找到另一个能映射出该散列值的 消息; input
M m H output
m’
给定H(M)
HASH函数的安全性要 求
③ 抗强碰撞性:对于任何两个不同的消息, 它们的散列值必定不同,很难找到两条消息m 和m’,使得H(m)=H(m’)。 input M m m’ H(m)=H(m’) H output
YL-1
b n
CVi-1
f
n
CVi
压缩函数基本结构
HASH填充
在生成散列值之前,对输入消息进行分 组时,如果最后一块报文不足分组长度 要求,就要进行填充。
全部填充0
填充比特 的最高位为 1,其余为0
HASH函数的应用
Hash算列函数由于其单向性和随机性的特点, 主 要运用于提供数据完整性 ( 包括数字签名、以及与 数字签名联系起来的数字指纹的应用 ) 知识证明、 密钥推导、伪随机数生成等方面。 1.数字签名的应用
HASH函数的概念
对于Hash函数H有下面六个要求:
任意长度
m 消息
(1)能够接受任意长度的消息作为输入;
(2)能够生成较短的固定长度的输出; (3)对任何消息输入都应该能够容易和快速
HASH函数简介

② 弱单向性:已知x,找出x’ (x’ ≠x),使得 h(x’ )= h(x) 在计算上是不可行的,满足这一 性质的单向散列函数称为弱单向散列函数。
Hash函数的安全性
问题 碰撞
实例:Hash函数h:X → Y
找出:x,x’∈X使得x’ ≠x,并且h(x’ )= h(x) ③ 强单向性:找出任意两个不同的输入x,x’ 使得h(x’ )= h(x)在计算上是不可行的,满足 这一性质的单向散列函数,则称其为强单向 散列函数
它适用在32位字长的处理器上用高速软件实 现--它是基于 3ash算法:
MD5:1992年4月Ron Rivest公布的MD4的改 进RFC 1321称为MD5 它对输入仍以512位分组,其输出是4个32位 字的级联,与 MD4 相同。MD5比MD4来得 复杂,并且速度较之要慢一点,但更安全, 在抗分析和抗差分方面表现更好。
Hash算法
从密码分析的角度来看,MD5被认为是易受 攻击的 2004年山东大学王小云教授破译了MD5, 采用”比特追踪法”(模差分方法)可以很 快的找到一个碰撞。而且这种攻击已经部 分的可实用化,即找到有意义的碰撞。
Hash算法
著名的Hash算法:
SHA1:安全杂凑算法(secure hash algorithm,
Hash函数
Hash函数
在实际的通信保密中,除了要求实现数 据的保密性之外,对传输数据安全性的 另一个基本要求是保证数据的完整性。 密码学中的Hash函数可为数据完整性提 供保障
数据的完整性是指数据从 发送方产生后,经过传输 或存储以后,未被以未授 权的方式修改的性质。
Hash函数
Hash函数通用来构造数据的短“指纹”(函 数值);一旦数据改变,指纹就不再正确。 即使数据被存储在不安全的地方,通过重新 计算数据的指纹并验证指纹是否改变,就能 够检测数据的完整性。
第十讲 密码Hash函数

本讲提要
分类与架构 基本构造 修改发现码(MDC) 消息认证码(MAC)
1 分类与架构
1.1 基本性质与定义 定义1 Hash函数(在不严格意义下)是至少满 足下列两条性质的函数h。 (1) 压缩:h将任意有限比特长度的输入x映 射为固定长度为n的输出h(x)。 (2) 容易计算:给定h和输入x,容易计算出 h (x )。
1.1 基本性质与定义(续) 定义 3 单向 Hash 函数 (OWHF) 是满足定义 1 以 及定义2中(1)和(2)的Hash函数。 定义4 抗碰撞Hash函数(CRHF)是满足定义1以 及定义2中(2)和(3)的Hash函数。 # 虽然几乎所有实际使用的 CRHF 都有抗原像 攻击的性质,但由于技术原因定义 4 并未给出。
定义 2 修改发现码 (MDC) 是 Hash 函数 h ,对于输入 x 和x以及相应输出y和y满足如下性质: (1) 原像不可逆:对于几乎所有的 Hash 输出不可能 计算出其的Hash输入。也就是,在不知道输入的情 况下给定任意一个输出y,找到任意一个输入x满足 h(x)=y是计算不可能的。 (2) 二次原像不可逆:对于任何一个给定的输入 x, 找到另一个输入 xx ,且满足 h(x)=h(x) ,在计算上 不可能。 (3) 抵抗碰撞:找到两个不同的输入 x 和 x ,满足 h(x)=h(x),在计算上不可能(注意:这里两个输入可 以自由选择)。
1 分类与架构(续)
1.4 其他应用
MDC的其他应用 (1) 知识确认。 (2) 密钥产生。 (3) 伪随机数发生。 # 这些MDC可能需要满足一些超过之前定 义的附加性质。
2 基本构造
2.1 迭代结构的一般模型
高级视图
任意长度输入
哈希函数.ppt

k*k(k<=m/2)称二次探测再散列,用公式表达如下:
例:在长度为11的哈希表中已填有关键字分别17,60,29的 记录,现有第四个记录,其关键字为38,由哈希函数得到 地址为5,若用线性探测再散列,如下:
哈希函数 哈希表中的元素是由哈希函数确定的。将
数据元素的关键字K作为自变量,通过一定的函数关系 (称为哈希函数)计算出的值,即为该元素的存储地址。 表示为:
Addr = H(key) 这个函数就是哈希函数
二、冲突及冲突处理
由于哈希函数是一个压缩映像,因此,在一般情况下, 很容易产生“冲突”现象
在哈希元素(地址)求解过程中,不同关键字值对应到同一 个存储地址的现象称为冲突。即关键字K1 K2, 但哈希函 数值 H(K1)= H(K2)。 均匀的哈希函数可以减少冲突,但不能避免冲突。发生冲突 后,必须解决;也即必须寻找下一个可用地址。 处理冲突是建立哈希表过程中不可缺少的一部分。
0 1 2 3 4 5 6 7 8 9 10
(a)插入前
60 17 29
0 12 3 4 5
6
7
8
9 10
(b)线性探测再散列
60 17 29 38
0 1 2 3 4 5 6 7 8 9 10 38 60 17 29
(c)二次探测再散列
0123
45
6
7
8 9 10
38
60 17 29
(d)伪随机探测再散列,伪随机数列为9,5,3,8,1...
解题思路:首先,明确一下几格概念:什么是hash表、 什么是hash函数、什么是线性探查法、冲突在哪里; 其次逐一求余;最后找出冲突,利用线性探查法解决 问题。
HASH函数

A
MD4 (1990年10月作为RFC1320发表) by Ron Rivest at MIT
• MD4的设计目标 • 安全性: • 速度:32位体系结构下计算速度快. • 简明与紧凑:易于编程. • 有利的小数在前的结构(Intel 80xxx, Pentium ) • MD4与MD5的区别 • MD4用3轮,每轮16 步,MD5用4轮,每轮16步. • MD4中第一轮没有常量加;MD5中64步每一步用了一 个不同的常量 T[i]; • MD5用了四个基本逻辑函数,每轮一个;MD4用了三 个. • MD5每轮加上前一步的结果;MD4没有.
y 取 k 个随机值得到函数的 k 个输出中至少有一个 等于h(x)的概率为 1-[1-1/n]k 由(1+x)k≈1+kx,其中|x|<<1,可得
1-[1-1/n]k≈1-[1-k/n]=k/n
给定 h(x) ,如果对 h 随机取 k 个输入,至少有一个 输入 y 使得 h(y)=h(x) 的概率为 1-[1-1/n]k≈1-[1-k/n]=k/n • 若使上述概率等于0.5,则 k=n/2。特别地,如果 h 的输出为 m 比特长,即可能的输出个数 n=2m,则 k=2m-1。
• 生日攻击(基于生日悖论) 在k个人中,找一个与某人生日相同的人的 概率超过0.5时,只需k>183; 而在此人群中, 至少有两个人生日相同的概率超过0.5,只 需k>23.
将生日悖论推广为下述问题:已知一个在1到n 之间均匀分布的整数型随机变量,若该变量的 k 个 取值中至少有两个取值相同的概率大于0.5,则k至 少多大? n! P(n, k ) 1 与上类似, (n k )!n k 令P(n, k)>0.5,可得 k 1.18 n n 若取 n=365,则
Hash算法实验原理及哈希函数简介

任务一 MD5算法111111*********一.哈希函数简介信息安全的核心技术是应用密码技术。
密码技术的应用远不止局限于提供机密性服务,密码技术也提供数据完整性服务。
密码学上的散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。
Hash函数常用来构造数据的短“指纹”:消息的发送者使用所有的消息产生一个附件也就是短“指纹”,并将该短“指纹”与消息一起传输给接收者。
即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹是否改变,就能够检测数据的完整性。
这是因为一旦数据在中途被破坏,或改变,短指纹就不再正确。
散列函数是一个函数,它以一个变长的报文作为输入,并产生一个定长的散列码,有时也称为报文摘要,作为函数的输出。
散列函数最主要的作用于是用于鉴别,鉴别在网络安全中起到举足轻重的地位。
鉴别的目的有以下两个:第一,验证信息的发送者是真正的,而不是冒充的,同时发信息者也不能抵赖,此为信源识别;第二,验证信息完整性,在传递或存储过程中未被篡改,重放或延迟等。
二.哈希函数特点密码学哈希函数(cryptography hash function,简称为哈希函数)在现代密码学中起着重要的作用,主要用于对数据完整性和消息认证。
哈希函数的基本思想是对数据进行运算得到一个摘要,运算过程满足:z压缩性:任意长度的数据,算出的摘要长度都固定。
z容易计算:从原数据容易算出摘要。
z抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的摘要都有很大区别。
z弱抗碰撞:已知原数据和其摘要,想找到一个具有相同摘要的数据(即伪造数据),在计算上是困难的。
z强抗碰撞:想找到两个不同的数据,使它们具有相同的摘要,在计算上是困难的。
三.针对哈希函数的攻击与传统密码体制的攻击方式相比,对散列函数的攻击方法主要有两种:z穷举攻击:它可以用于任何类型的散列函数的攻击,最典型的方式就是所谓的“生日攻击”。
Hash函数

第3轮 以 [ABCD k s i]表示如下操作 A = B + ((A + H(B,C,D) + X[k] + T[i]) <<< s). Do the following 16 operations. [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
3、强无碰撞hash函数是单向的。 总之,Hash函数应该满足 1)由自变量求函数是容易的,反之是困难的。 2)寻找碰撞是困难的
四、Hash函数实例 MD5
MD:Merkle-Damgard结构 输入:任意长度的消息 输出:128位消息摘要 处理:以512位输入数据块为单位
L×512 bits=N ×32bits × K bits 报文
填充 (1 to 448 bits)
100…0
报文长度 (K mod 264)
512 bits
512 bits
512 bits
512 bits
Y0
512
Y1
512
Yq
512
YL-1
512
128
128 128 128
HMD5
IV CV1
HMD5
CVq
HMD5
CVL-1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 步骤4:以1024比特的分组(16个字)为单位 处理消息。算法的核心是具有80轮运算的模块。 每一轮,如t,使用一个64比特的值Wt,该值 由当前被处理的1024比特消息分组Mi导出。每 一轮还使用附加的常数Kt,其中0≤t≤79,用来 表示轮数。这些常数如下获得:前80个素数取 三次根,取小数部分的前64比特。 • 步骤5:输出。所有的N个1024比特分组都处 理完以后,从第N阶段输出的是512比特的消 息摘要。 Ho=IV Hi=SUM 64(Hi-1,abcdefghi) MD=HN
11.5.3 示例
• 略 • 说明:SHA-512有良好的雪崩效应。
11.6 SHA-3
NIST在2007后宣布公开征集新一代NIST的Hash函 数标准,称其为SHA-3。 • 算法要求如下: (1)能直接替代SHA-2。 (2)保持SHA-2的在线处理能力 • 评估准则: (1)安全性。 SHA-3能抵抗已有或潜在的对于 SHA-2函数的攻击方法。实际上意味着SHA-3的 设计蔌者结构上,或者在数学函数上或者两者兼 有,要与以前的算法有本质的不同 (2)效率。 (3)算法和实现特性。
散列函数应满足的条件:
散列函数的目的是为需认证的数据产生一 个“指纹”。为了能够实现对数据的认 证,散列函数应满足以下条件:
1)函数的输入可以是任意长。 2)压缩性:函数的输出是固定长,如MD5输出 128bit,SHA-1输出160 bit。具有压缩性。 3)已知X,求H(x)较为容易,可用硬件或软件实 现。 4)抗原像攻击(单向性):已知h,求使得 H(x)=h的x在计算上是不可行的,这一性质称为函 数的单向性,称H(x)为单向散列函数。
512 1
512 0
其中: t : 步骤数,0≤t≤79 Ch(e,f,g)= (e AND f)⊕(NOT e AND g) Maj(a,b,c)= (a AND b)⊕(a AND c) ⊕(b AND c)
512 0
a =ROTR28(a)⊕ROTR34(a)⊕ROTR39(a)
512
1
图11.8 SHA-512生成消息摘要
这个过程包含下列步骤: • 步骤1:附加填充位。填充消息使其长度模 1024与896同余,即使消息已经满足上述长 度要求,仍然需要进行填充,因此填充位 数在1到1024之间。填充由一个1和后续的0 组成。 • 步骤2:附加长度。在消息后附加一个128比 特的块,将其看做是128比特的无符号整数, 它包含填充前消息的长度。
(c)
(d)
11.1.2 数字签名
11.1.3其他应用
• 产生单向口令文件:
如操作系统存储口令的Hash值而不是 口令本身。 • 入侵检测和病毒检测: 将每个文件的Hash值H(F)存储在安全系统 中,随后就能够通过重新计算H(F)来判断 文件是否被修改过。
• 构建随机函数(PRF)或用做伪随机发生器。
作业: 1.思考题:P255 11.1 11.2 11.3 11.5 2.习题: 11.8 11.9 11.10
• 步骤3:初始化散列缓冲区。散列函数的中间 结果和最终结果保存于512比特的缓冲区中, 缓冲区用8个64比特的寄存器(a,b,c,d,e,f,g,h) 表示,并将这些寄存器初始化为下列64比特的 整数: a=6A09E667F3BCC908 e=510E527FADE682D1 b=BB67AE8584CAA73B f=9B05688C2B3E6C1F c=3C6EF372FE94F82B g=1F83D9ABFB41BD6B d=A54FF53A5F1D36F1 h=5BE0CD19137E2179
5)抗弱碰撞性:已知x,找出y(y≠x)使得 H(y)=H(x)在计算上是不可行的。 如果单向散列函数满足这一性质,则称其 是抗弱碰撞的。 6)抗强碰撞性:找出任意两个不同的输入x、y, 使得H(x)=H(y)在计算上是不可行的。如果 单向散列函数满足这一性质,则称其是抗 强碰撞的。 7)伪随机性:H的输出满足伪随机性测试标准
第11章 密码学Hash函数
在数字签名方案中也要用到散列函数。对需 要签名的消息用一个函数,产生一个固定 长度的消息摘要(Message Digest),最 后对消息摘要进行签名,得到确定长度的 签名消息。 散列(hash)
11.1.1消息认证 消息认证是用来验证消息完整性的一种机制 或服务。消息认证确保收到的数据确实和 发送时的一样(即没有修改、插入、删除 或重放),且发送方声称的身份是真实有 效的。
图11.9 SHA-512对单个1024位分组的处理
11.5.2
SHA-512轮函数
图11.10
基本的SHA-512运算(单轮)
T1=h+Ch(e,f,g)+( e )+Wt+Kt T2=( a )+Maj(a,b,c) a= T1 +T2 b=a c=b d=c e=d+ T1 f=e g=f h=g
11.3 需求与安全性
• 原像:对于Hash函数h=H(x),称x为H原像。
• 碰撞:因为H是多对一映射,所以对于任意
给定的Hash值h,对应有多个原像。如果满 足x≠y且H(x)=H(y),则称出现碰撞。 假设函数H的输入消息或数据块长度是b位, 输出的长度为n位,且b>n,则平均每个 Hash值对应2b/n个原像。
抗弱碰撞攻击
抗原像攻击
抗强碰撞攻击
Hash函数安全特性之间的联系
11.5安全Hash算法(SHA)
安全散列算法(SHA)是由美国标准与技术协会 (NIST)设计,并于1993年作为联邦信息处理标准 (FIPS 180)发布,修订版于1995年发布(FIPS 180-1),通常称之为SHA-1。 SHA-1产生160比特的 散列值。 2002年,NIST发布了修订版2,FIPS180-2,其中给 出了三种新的SHA版本,散列值长度依次为256,384 和512比特。分别称为SHA-256,SHA-384, SHA512,这些算法被统称为SHA-2。这些新的版本和 SHA-1具有相同的基础结构,使用了相同的模算术和 二元逻辑运算。2005年,NIST宣布了逐步废除SHA-1 的意图,到2010年,逐步转而依赖SHA的其他版本。 2008年发布了修订版FIPS 180-3,增加了224位版本。
SHA1
消息摘要长度 160
SHA- SHA-256 224
224 256
SHA-384
384
SHA-512
512
消息长度 分组长度
<264 512
<264 512
<264 512
<2128 1024
<2128 1024
字长度
步骤数
32
80
32
64
32
64
64
80
64
80
所有的长度以比特为单位。
11.5.1 SHA-512逻辑
e = ROTR14(e) ⊕ROTR18(e) ⊕ROTR41(e)
ROTRn(x):对64比特的变量x循环右移n比特 Wt: 64比特字,从当前的512比特输入分组导出 Kt: 64比特附加常数 +: 模264加
图11.11为SHA处理单个分组而产生的80字输入序列
前16个Wt直接取自当前分组的16个字。余下 的值按如下方式导出: Wt=σ1512(Wt-2)+Wt-7+σ0512 (Wt-15)+ Wt-16 其中: σ0512 (x) = ROTR1(x) ⊕ROTR8(x)⊕SHR7(x) σ1512(x)= ROTR19(x) ⊕ROTR61(x)⊕SHR6(x) SHRn(x): 对64比特变量x向左移动n位,右边 填充0