现代密码学第六章:单向函数和散列函数1(必修)
《应用编码与计算机密码学》第六章
6.1 散列函数概述
2. 寻找具有相同散列值的明文消息的困 难性 对于给定的明文消息m,要找到另一个 消息m’,使得
6.2 MD5算法 算法
MD5(Message Digest)算法 算法(RFC1321) 算法 是上世纪90年代由Rivest所设计的散列 函数算法。其中MD表示消息摘要,又称 报文摘要。 MD5不基于任何密码体制,它是直接构 造压缩函数与迭代。
6.2 MD5算法 算法
MD5算法的构造过程 算法的构造过程 第一步:将报文m分组 分组, 第一步:将报文 分组,填充尾部的比特 数目。 数目。 第二步:设计数列迭代值的4个缓存器 第二步:设计数列迭代值的 个缓存器 A,B,C,D。 。 第三步: 第三步:设计散列迭代
6.4 消息认证码
第4步:计算S0 = k ⊕ opad , 式中⊕表示模2 加(异或);opad为HMAC中规定的另一个 长度为b比特的比特模式串,它等于将十六 进制数5C(二进制表示为01011010)重复6~8 次后得到的比特串。
6.4 消息认证码
第5步:将第3步中散列函数H的输出H(si m)附加在S0的后面,并以得到的比特 串作为输入 ,使散列函数H计算其散列 码,得到n比特的输出。 第6步:将第5步中散列函数H的输出作为 HMAC算法的最终输出结果输出。
散列(Hash)函数 第六章 散列 函数
6.1 6.2 6.3 6.4 散列函数概述 MD5算法 算法 SHA-1算法 算法 消息认证码
第6章 现代密码学课件
单向散列函数主要用于提供信息的完整性验证
单向散列函数主要用于提供信息的完整性验证.已知单向散列函数h(x)=(3x 2 -2x+5) m
来解释这个单向散列函数.
单向散列函数是一种非常重要的数字摘要方法,它可以将任意长度的明文转换为固定长度的密文。
单向散列函数的一个重要的特性就是其唯一性,它可以将明文和密文唯一对应,从而保证信息被准确传输,但不能将密文转换成明文。
在这里,我们要讨论一个单向散列函数h(x)=(3x2-2x+5)m。
这个函数可以使用输入的任意数字x产生一个m位长度的散列值,它可以保证散列值的唯一性,从而保证信息的完整性。
举个例子,让我们考虑一个6位的数字,x=123456,如果m=8,则h(x)的结果为
h(x)=(3119244)8。
由于这个数字是唯一的,这可以用来回答以下问题:输入的数据是什么?
另外,单向散列函数还可以帮助检验数据的完整性。
例如,如果一个传输的数据出现了错误,那么对应的散列值也会有所不同。
在这种情况下,可以使用单向散列函数来检验处理后的数据是否与原始数据相同,如果不同,则证明数据出现了错误。
总之,单向散列函数h(x)=(3x2-2x+5) m是一种重要的数字摘要方法,它可以将输入的任意长度的明文转换为固定长度的密文,从而保证信息的完整性。
它还可以用于检测输入数据是否发生错误,对确保信息传输准确又非常有帮助。
密码学-散列函数
散列函数常用于报文鉴别和数字签名; 散列函数是一个多对一的函数;
因此在理论上,必定存在不同的报文对应同样的散列, 但这种情况在实际中必须不可能出现(计算上不可行)
散列函数本身不是保密的;
散列函数没有密钥的参与,散列值仅仅是报文的函数
1)攻击者对合法报文创建 2m/2 个变种,所有这些变种本质上都和 合法报文表示同样的意思;
2)同样,攻击者再对伪造报文创建 2m/2 个变种; 3)比较这两个集合,以期发现任意一对能产生相同散列值的报文
对(合法报文变种、伪造报文变种),根据生日悖论,找到这样一对 报文的概率Pr > 0.5; 4)攻击者向签名者出示合法报文变种,让签名者对合法报文变种 的散列值签名;然后攻击者用伪造报文变种代替合法报文变种, 并声称签名者对伪造报文变种签名了。由于这两个报文具有相同 的散列值,因此欺骗总能成功。
与此相对,如要求选择 K 个人,其中至少有一个人的 生日和某个指定的生日相同的概率大于 0.5,问 k 的最 小值是多少?(结论是 k >= 365/2 ≈183)
生日攻击
生日悖论实际上是如下问题的特例:已知一个在 1 到 n 之 间均匀分布的整数型随机变量,若该变量的一个 k 个取值 的集合中至少有两个取值相同的概率大于 0.5,则 k 至少 多大? 该问题的一般结论是:k≈1.18 * n1/2 例如对于生日悖论,有 n=365,因此 k ≈ 22.5。
在计算上不可行(强抗碰撞)。
不同安全特性的比较
显然,强抗碰撞特性包含弱抗碰撞特性; 另外可以证明,强抗碰撞特性包含单向特
性; 因此,散列函数满足强抗碰撞特性是充分
现代密码学第六章单向函数和散列函数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)对.
存在性伪造: 如果攻击者只能够对一个不由他控制的消息进行伪造, 那么这种伪造攻击称为存在性伪造攻击. 选择性伪造: 如果攻击者能够对由他选择的消息进行伪造,那么这种伪 造攻击称为选择性伪造攻击.
单向函数
密码应用中码体制,因为它的求逆困难,用它加密的信息谁都不能解密。但是,单 向函数在密码学领域里却发挥着非常重要的作用。一个最简单的应用就是口令保护。我们熟知的口令保护方法是 用对称加密算法进行加密。然而,对称算法加密一是必须有密钥,二是该密钥对验证口令的系统必须是可知的, 因此意味着验证口令的系统总是可以获取口令的明文的。这样在口令的使用者与验证口令的系统之间存在严重的 信息不对称,姑且不说系统提供者非法获取用户口令的情况,一旦系统被攻破,可能造成所有用户口令的泄露。 使用单向函数对口令进行保护则可以很好地解决这一问题。系统方只存放口令经单向函数运算过的函数值,验证 是将用户口令重新计算函数值与系统中存放的值进行比对。动态口令认证机制多是基于单向函数的应用来设计的。
一个最简单的、大家熟知的“侯选”单向函数就是整数相乘。
函数是一个单向函数当且仅当可以用一个多项式时间的算法计算,但是对于任意一个以为输入的随机化多项 式算法,任意一个多项式,和足够大,使得
陷门
显然,单向函数不能直接用作密码体制,因为如果用单向函数对明文进行加密,即使是合法的接收者也不能 还原出明文了,因为单向函数的逆运算是困难的。与密码体制关系更为密切的概念是陷门单向函数。一个函数称 为是陷门单向的,如果该函数及其逆函数的计算都存在有效的算法,而且可以将计算的方法公开,即使有计算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
在计算上是不可行的.
《现代密码学》散列函数与消息鉴别ppt课件
• SHA–1产生音讯摘要的过程类似MD5,如下图
填充位
L×512 bit= N×32 bit K bit
这一步为MD5的主循环,包括四轮。每个循环 都以当前的正在处置的512比特分组Yq和128比 特缓冲值ABCD为输入,然后更新缓冲内容。
3.MD5的输出
由A、B、C、D四个存放器的输出按低位字节在 前的顺序(即以A的低字节开场、D的高字节终 了)得到128位的音讯摘要。
• 单个512比特分组的MD5主循环处置:
对散列函数必需具有的性质的了解: 系统能够存在的伪造方式 伪造方式一:假设攻击者截获某一音讯摘要h,假
设H的逆函数H-1是易求的,可算出H-1(h)=m, 满足h=H(m)。为防止这一点,必需求求散列 函数H为单向的,即计算H的逆函数H-1在计算 上是不可行的。 伪造方式二:从一个有效签名(m,y)开场,此处y= sigk(H(m))。首先计算h=H(m),并企图找到一 个m’=m满足H(m’)=H(m)。假设做到这一点, 那么(m’,y)也将为有效签名。为防止这一点, 要求函数h具有弱抗冲突特性,即,对给定音 讯m,在计算上几乎找不到不同于m的m’ ∈ X 使H(m)=H(m’)。
(1)单向性:对任何给定的码h,寻觅m使得 H(m) = h在计算上是不可行的
(2)具有弱抗碰撞性〔week collision resistance〕 :对于任何给定的音讯m, 寻觅一个与m不同的音讯m’使得 H(m)=H(m’)在计算上不可行。
(3)具有强抗碰撞性〔 strong collision resistance 〕:寻觅恣意两个不同的音讯 m和m’使得使得H(m)=H(m’)在计算上不 可行。
对散列函数的生日攻击
• 假定其输出为m比特,那么寻觅一个音讯,使其散 列值与给定散列值一样那么需求计算2m次;而寻 觅两个音讯具有一样的散列值仅需求实验2m/2个 随机的音讯。
单向散列函数(HASH函数)基本原
单向散列函数(HASH函数)基本原
Hash函数H(m)也名单向散列函数,它是现代密码学的核心。
散列函数一直在计算机科学中使用,散列函数就是把可变的输入长度串转换成固定长度输出值(叫做散列值)的一种函数。
而单向散列函数是在一个方向上工作的散列函数,从预映射的值很容易计算机其散列值,但要使其散列值等于一个特殊值却很难。
好的散列函数也是无冲突的:难于产生两个预映射的值,使他们的散列值相同。
散列函数是公开的,对处理过程并不保密,单向散列函数的安全性是它的单向性,其输出不依赖于输入。
平均而言,预映射值的单个位的改变,将引起散列值中一半位的改变。
已知一个散列值,要找到预映射的值,使它的值等于已知的散列值在计算上是不可行的,可把单向散列函数看作是构成指纹文件的一种方法。
如果你验证某人持有一个特定的文件(你同时也持有该文件),但你不想他将文件传给你,那幺,就要通知他将该文件的散列值传给你,如果他传送的散列值是正确的,那幺可以肯定他持有那份文件。
散列函数可用于数字签名、消息的完整性检测、消息起源的认证检测等。
常见的散列算法有MD5、SHA、Snefru和HVAL等。
现代密码学第六章
如果p-1不含大素因子,很多情况下也是容易计算的,这时x=x mod p-1, 如果都是小因子,则可分别求出模小因子,再用CRT定理。
3/
(RSA)
第六章 公钥密码和离散对数
ElGamal密码体制与DH密钥交换
6.2 两个基本公钥密码体制
6.2.1 ElGamal密码体制
1. 密钥产生
(a,bGF(p),4a3+27b2(mod p)≠0)
因为=(a/3)3+(b/2)2=(4a3+27b2)/108是方程x3+ax+b=0的判别式,当 4a3+27b2 =0时方程有重根,设为x0,则点Q0=(x0,0)是方程(4-2)的重根 即x3+ax+b=(x-x0)3或者=(x-x0)2(x-x1),重根将使得一阶导数3x2+a在该 Q0点为0 令F(x,y)=y2-x3-ax-b,则F/x|Q0=F/y|Q0=0 所以dy/dx=-(F/x)/(F/y)=(3x2+a)/2y在Q0点无定义,即曲线 y2≡x3+ax+b在Q0点的切线无定义,因此点Q0的倍点运算无定义
算法的安全性基于求离散对数的困难性
假设p是大素数,g是p的本原根,p和g作为公开元素,协议如下: ① 用户Alice选择随机数x,计算a=gx mod p,保密x,发送a给Bob ② 用户Bob选择随机数y,计算b=gy mod p,保密y,发送b给Alice ③ Bob和Alice各自计算 k=bx mod p和k=ay mod p, 从而得到共享密钥k 这是因为k=bx mod p=(gy)xmod p=(gx)ymod p=ay mod p
密码学-散列函数
生日攻击
生日悖论实际上是如下问题的特例:已知一个在 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 单向散列函数简介密码学中使用的单向散列函数将任意长度的消息压缩到某一固定长度的消息摘要。
《现代密码学》教学大纲
动、答疑模块。
六、考核方式
闭卷笔试,课程作业、实验成绩、课堂表现、考勤。
七、成绩评定方法
期末笔试成绩占 80%,平时成绩占 20%(根据课程作业、实验成绩、课堂表现、
考勤等)。
八、主要参考书籍
1.谷利泽,郑世慧,杨义先. 现代密码学教程. 北京邮电大学出版社,2015.3
(教材)。
2.B. Schneier. Applied cryptograghy second edition: protocols, algorithms, and
题;
1.2 具有扎实的专业基础理论,包括信息论与编码、密码学原理、信息
目标 5 安全数学基础、计算机网络技术等,能够用其解决信息安全相关领域
H
的复杂工程问题;
4.5 能正确采集、整理实验和模拟数据,对实验及模拟结果进行关联、 M
建模、分析处理,获取果进行关联、 H
source code in C. NewYork: John Wiley & Sons, 1996. 中译本: 吴世忠, 祝世雄, 张文
政译。
3.马春光. 现代密码学教程, 哈尔滨工程大学自编讲义。
大纲编写者:方贤进,xjfang@, /~xjfang/crypto/
一、教学目标
通过本课程的理论教学及实验训练,使学生具备以下知识和能力:
目标 1:掌握密码学与信息安全的关系、信息安全的目标(5 要素);掌握现代
密码学的研究内容与体系结构;掌握保密系统的模型及安全性、认证系统的模型及
安全性。
目标 2:掌握古典密码体制中的两种方法:置换密码与代换密码;掌握古典密
码分析方法,能使用“拟重合指数法”对“多表代换加密”实行“唯密文攻击”。
(完整版)北邮版《现代密码学》习题答案
《现代密码学习题》答案第一章1、1949年,( A )发表题为《保密系统的通信理论》的文章,为密码系统建立了理论基础,从此密码学成了一门科学。
A、ShannonB、DiffieC、HellmanD、Shamir2、一个密码系统至少由明文、密文、加密算法、解密算法和密钥5部分组成,而其安全性是由( D)决定的。
A、加密算法B、解密算法C、加解密算法D、密钥3、计算和估计出破译密码系统的计算量下限,利用已有的最好方法破译它的所需要的代价超出了破译者的破译能力(如时间、空间、资金等资源),那么该密码系统的安全性是( B )。
A无条件安全B计算安全C可证明安全D实际安全4、根据密码分析者所掌握的分析资料的不通,密码分析一般可分为4类:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击,其中破译难度最大的是( D )。
A、唯密文攻击B、已知明文攻击C、选择明文攻击D、选择密文攻击5、1976年,和在密码学的新方向一文中提出了公开密钥密码的思想,从而开创了现代密码学的新领域。
6、密码学的发展过程中,两个质的飞跃分别指 1949年香农发表的保密系统的通信理论和公钥密码思想。
7、密码学是研究信息寄信息系统安全的科学,密码学又分为密码编码学和密码分析学。
8、一个保密系统一般是明文、密文、密钥、加密算法、解密算法 5部分组成的。
9、密码体制是指实现加密和解密功能的密码方案,从使用密钥策略上,可分为对称和非对称。
10、对称密码体制又称为秘密密钥密码体制,它包括分组密码和序列密码。
第二章1、字母频率分析法对(B )算法最有效。
A、置换密码B、单表代换密码C、多表代换密码D、序列密码2、(D)算法抵抗频率分析攻击能力最强,而对已知明文攻击最弱。
A仿射密码B维吉利亚密码C轮转密码D希尔密码3、重合指数法对(C)算法的破解最有效。
A置换密码B单表代换密码C多表代换密码D序列密码4、维吉利亚密码是古典密码体制比较有代表性的一种密码,其密码体制采用的是(C )。
散列函数(1)
杂凑函数
用途二: 用途二:简易的身份识别 设Bob拥有Alice的身份密号x2 。 现在Alice需要向 Bob证明自己的身份,即要向Bob证明自己知道 x2 。但必须通过不安全的公共信道来进行证明。 这就是说,信道上有攻击者Eve在截听。 两人使用一个公开的杂凑函数y=H(x)。方案如下:
杂凑函数
即用一个64位的数字表示数据的原始长度 b,把b用两个32位数表示。那么只取B的低64 位。 当遇到b大于2^64这种极少遇到的情况时, 这时,数据就被填补成长度为512位的倍数。 也就是说, 此时的数据长度是16个字(32位) 的整数倍数。用M[0 ... N-1]表示此时的数据, 其中的N是16 的倍数。
杂凑函数
局部置换性: 例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的“附近”寻找,搜索量远远低于穷举 搜索。
杂凑函数
(1)Alice计算y1=H(x1),并将y1发送给Bob。 (2)Bob计算y2=H(x2),并将y2发送给Alice 。 (3)Alice收到y2后,将x1发送给Bob。 (4)Bob收到y1后,将x2发送给Alice 。 (5)Alice收到x2后,检验是否y2=H(x2),若是则x2是真实的 中奖号码。 (6)Bob收到x1后,检验是否y1=H(x1),若是则x1是Alice的 真实的猜测号码。
现代密码学-第6章数字签名
11
5.6.2 数字签名的基本构造方法
基于Hash函数和双钥密码算法构造数字签名
12
5.6.2 数字签名的基本构造方法
具有保密作用的数字签名 双钥密码体制:SK是发送方的私钥,PK是发送方的公 钥, E1和D1分别是加密算法与解密算法。 单钥密码体制密钥:K是双方公用密钥,E2和D2分别是 对应的加密算法和解密算法。
假设签名者A采用先加密后签名的方案把消息x发送给接收 者B ,则他先用B的公开密钥eB对x加密, 然后用自己的私钥 dA签名.设A的模数为nA,B的模数为nB.于是A发送给B的数据 为: ( x eB mod nB ) d A mod nA .
如果B是不诚实的,那么B可能伪造A的签名.例如,假设B想 抵赖收到A发的消息x, 慌称收到的是x1.因为nB是B的模数, 所以B知道nB的分解,于是能够计算模nB的离散对数.即他能 找到k满足: ( x1 ) k x mod nB .
14
5.6.3 数字签名的安全需求
攻击者对数字签名系统的攻击目的 完全破译(total break) 攻击者E能确定签名者A的私钥K,因而能够计算签名 函数sigK,可以对任何消息产生有效的签名。 选择性伪造(selective forgery) 攻击者E能以某一个不可忽略的概率对另外某个人选 定的消息产生一个有效的签名。也就是说,如果给E 选定一个消息x,那么他能以一个正的概率找到x的签 名y=sigK(x),并且签名者A以前未对x签名。 存在性伪造(existential forgery) 攻击者E至少能够为一个消息产生一个有效的签名。 也就是说,E可能生成一个数据对(x,y),其中x是 消息,y=sigK(x)。签名者A以前未对x签名。
散列函数及其应用
散列函数及其应⽤散列函数 散列,英⽂Hash,也有直接⾳译为“哈希”的,就是把任意长度的输⼊(⼜叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。
这种转换是⼀种压缩映射,也就是,散列值的空间通常远⼩于输⼊的空间,不同的输⼊可能会散列成相同的输出,所以不可能从散列值来确定唯⼀的输⼊值。
简单的说就是⼀种将任意长度的消息压缩到某⼀固定长度的信息摘要的函数。
散列函数的应⽤ 在算法竞赛中,我所接触到的主要有字符串hash⽤于把字符串“索引”为⼀个值,然后对复杂字符串进⾏操作,来加快遍历速度,降低算法复杂度。
把字符串匹配转移到了值匹配。
但是散列函数属于⼀种“概率型算法”,对于模的取值有⼀定概率出现碰撞。
所以在算法竞赛中不常使⽤,或者要多次测验避免碰撞。
在信息安全⽅⾯的应⽤主要体现在以下的3个⽅⾯: 1)⽂件校验 我们⽐较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能⼒,它们⼀定程度上能检测并纠正数据传输中的信道误码,但却不能防⽌对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为⽬前应⽤最⼴泛的⼀种⽂件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2)数字签名 Hash 算法也是现代密码体系中的⼀个重要组成部分。
由于⾮对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了⼀个重要的⾓⾊。
对 Hash 值,⼜称"数字摘要"进⾏数字签名,在统计上可以认为与对⽂件本⾝进⾏数字签名是等效的。
⽽且这样的协议还有其他的优点。
3)鉴权协议 如下的鉴权协议⼜被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是⼀种简单⽽安全的⽅法。
散列函数的安全性 两个不同的输⼊,经过哈希算法后,得到了同样的哈希值,就叫做哈希碰撞。
单向散列函数
单向散列函数
单向散列函数是一种无法从散列值逆向计算出原始数据的函数,它将一个无限范围的输入转换成一个固定范围的输出。
它通常用于密码学中安全性能高的数据加密,以及实现数据校验,防止数据被篡改。
单向散列函数的优点在于其计算速度快且得到的散列值是唯一的,因此散列函数常用于很多日常加密技术,比如安全套接字、对称加密、数字签名等。
传统的散列函数有MD5、SHA-1等,它们的特点是将任意长度的消息转换成固定长度的消息摘要,同时也具有很好的安全性。
单向散列函数 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)。
1HASH函数和MAC(一)《现代密码学》第六讲2上讲内容回顾流密码(序列密码)的思想起源流密码的分类基于移位寄存器的流密码算法RC4算法3本章主要内容单向函数Hash函数的定义及发展现状hash函数的用途MD5算法SHA-256算法SHA-512和SHA-384算法消息鉴别码简介CBC-MAC算法HMAC算法4定义.函数若满足下列两个条件,则称之为强单向函数:1 计算是容易的,即是多项式时间可计算的;2 计算函数的逆是困难的,即对每一多项式时间概率算法,每一多项式和充分大的有:{0,1}*{0,1}*f →()f x ()f x f 1()f x −M ()p n 0()n n n >1P r{(())(())}1/()n n M f U f f U p n −∈<5注.1 可能有少量x 给出的f(x)可用多项式时间概率算法求逆;2 单向函数的存在性没有理论上的证明.6Hash函数定义消息是任意有限长度,哈希值是固定长度. Hash 的概念起源于1956年,Dumey 用它来解决symbol table question(符号表问题)。
使得数据表的插入、删除、查询操作可以在平均常数时间完成。
7单向性(抗原像):对干任意给定的消息,计算其哈希值容易. 但是,对于给定的哈希值h ,要找到M 使得H(M)=h 在计算上是不可行的.弱抗碰撞(抗二次原像):对于给定的消息M 1,要发现另一个消息M 2,满足H( M 1)=H(M 2)在计算上是不可行的.强抗碰撞:找任意一对不同的消息M 1,M 2,使H(M 1)=H(M 2 )在计算上是不可行的.随机性.8Hash 函数的分类改动检测码MDC (Manipulation Detection Code)不带密钥的哈希函数主要用于消息完整性消息认证码MAC (Message Authentication Code)带密钥的哈希函数主要用于消息源认证和消息完整性消息完整性检测Hash链用于口令认证数字签名(速度快;防止消息伪造)消息完整性和消息源认证(MAC)。
910不带密钥的哈希函数的发展M k M 1M 2…H 1H 2IV ……H k ff f l n n l n n nl message scheduleStep FunctionStep Function Step Function Step Function Iterate step functionM 2H 1H 21978年,Merkle和Damagad设计MD迭代结构1993年,莱学家和Messay改进为MD加强结构11散列算法MD 族是在90年代初由mit laboratory for computer science 和RSA data security inc 的Ron ・Rivest 设计的,MD 代表消息摘要(message-digest ). md2、md4和md5都产生一个128位的信息摘要. MD21989年开发出md2算法. 在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数. 然后,以一个16位的检验和追加到信息末尾。
MD41990年开发出md4算法. MD51991年,rivest 开发出技术上更为趋近成熟的md5算法. RIPEMD-128/160/320RIPEMD 由欧洲财团开发和设计.12SHA 系列算法是NIST 根据Rivest 设计的MD4和MD5开发的算法. 国家安全当局发布SHA 作为美国政府标准. SHA 表示安全散列算法. SHA-0SHA-0正式地称作SHA ,这个版本在发行后不久被指出存在弱点. SHA-1SHA-1是NIST 于1994年发布的,它与MD4和MD5散列算法非常相似,被认为是MD4和MD5的后继者. SHA-2SHA-2实际上分为SHA-224、SHA-256、SHA-384和SHA-512算法.13HAVAL1992年Yuliang Zheng 设计了HAVAL 函数,它与许多其他散列函数不同.GostGost 是一套苏联标准.14碰撞攻击复杂度15碰撞攻击复杂度1020304050607080901992199219941996199820002002200420062008MD4MD5SHA-0SHA-1Brute forceBrute force: 1 million PCs or US$ 100 000 hardware 不带密钥的哈希函数的发展16不带密钥的哈希函数的发展NESSIE 工程推荐使用的hash 算法有SHA-256/384/512和Whirlpool;日本密码研究与评估委员会推荐使用的算法有RIPEMD-160、SHA-256/384/512。
ECRYPT 也在hash 算法研究方面举办了一系列活动。
此外,NIST 于2008年启动新的hash 标准的征集活动。
除迭代结构以外的结构适用于任何平台的压缩函数2008年10月提交文档,收到64个算法,公开56个,51个进入第一轮评估2009年10月,第二轮评估开始,剩余14个算法17在众多Hash 算法中MD5(128位)和SHA(160位)是目前使用最广泛的两个算法。
Ron Rivest 于1990年设计了一个称为MD4的Hash 算法,该算法的设计没有基于任何假设和密码体制,这种直接构造法构造的Hash 算法因其运行速度快、非常实用等特点受到了人们的广泛亲睐. 但后来人们发现MD4存在安全性缺陷,于是,Ron Rivest 在1991年对MD4作了几点改进,改进后的算法就是MD5.18对于MD4的几点改进 从三轮改成四轮;第二轮函数从F(x,y,z)=(xΛy) v(xΛz) v(yΛz)改为(xΛz) v(yΛ┐z),以消弱对称性;改变第二轮和第三轮访问消息子分组的顺序,使其形式更不相似;改变每轮移位量以实现更快的雪崩效应;每步有唯一的加法常数t i ,消除任何输入数据的规律;每一步与上一步的结果相加,这将引起更快的雪崩效应.191 消息填充填充一个1和若干个0及64比特的(未填充)消息长度,使得总长度为512比特的整数倍.2 初始向量h0 = 0x67452301 h1 = 0xEFCDAB89 h2 = 0x98BADCFE h3 = 0x103254763 压缩函数的消息分组长度512比特,压缩函数分为4轮,每轮16步,共64步.4 输出散列值128比特.例如,消息“abc ”,其8比特的ASCII 表示:01100001,01100010,01100011,因此,首先填充一个“1”,再填充448-(24+1)=423个零,然后再填充一个长度l=24的64位的二进制,即可得一长度512位的消息块01100001 01100010 01100011 1 00…0000…011000“a”“b”“c”42364l=2420MD5的压缩函数2122MD5的步函数A <<< s M[j]非线性函数B C DT[i]A B C D23(,,)()()F X Y Z X Y X Z =∧∨¬∧(,,)()()G X Y Z X Z Y Z =∧∨∧¬(,,))H X Y Z X Y Z =⊕⊕(,,)()I X Y Z Y X Z =⊕∨¬非线性函数32[2(sin())]i t abs i =×其中的单位是弧度;[]表示取的整数部分.或与异或非24))),,((((),,,,,,(s t M d c b F a b a t s M d c b a FF i j i j 〈〈〈++++=表示)4695010,22,,,,,()83046130,17,,,,,()6247870,12,,,,,()0570,7,,,,,()10,22,,,,,()2420700,17,,,,,()756780,12,,,,,()478760,7,,,,,(76543210xfd M d c b a FF xa M d c b a FF a c x M d c b a FF faf c xf M d c b a FF bdceeee xc M d c b a FF db x M d c b a FF b c xe M d c b a FF aa xd M d c b a FF )40821490,22,,,,,()6794380,17,,,,,()9871930,12,,,,,()90112260,7,,,,,()78950,22,,,,,()150,17,,,,,()74480,12,,,,,()86980980,7,,,,,(15141312111098b x M d c b a FF e xa M d c b a FF xfd M d c b a FF b x M d c b a FF be cd x M d c b a FF bb xffff M d c b a FF af f b x M d c b a FF d x M d c b a FF MD5的第一轮25))),,((((),,,,,,(s t M d c b G a b a t s M d c b a GG i j i j 〈〈〈++++=表示)8370,20,,,,,()681180,14,,,,,()024414530,9,,,,,()105620,5,,,,,()7690,20,,,,,()5152650,14,,,,,()3400400,9,,,,,()2562610,5,,,,,(41510501161fbc d xe M d c b a GG e a xd M d c b a GG x M d c b a GG d f xd M d c b a GG aa c b xe M d c b a GG a e x M d c b a GG b xc M d c b a GG e xf M d c b a GG )84280,20,,,,,()9026760,14,,,,,()830,9,,,,,()905390,5,,,,,()144550,20,,,,,()875040,14,,,,,()6337070,9,,,,,()61210,5,,,,,(12721383149a c a d x M d c b a GG d f x M d c b a GG f xfcefa M d c b a GG e e xa M d c b a GG ed a x M d c b a GG d d xf M d c b a GG d xc M d c b a GG cde e x M d c b a GG MD5的第二轮26))),,((((),,,,,,(s t M d c b H a b a t s M d c b a HH i j i j 〈〈〈++++=表示)700,23,,,,,()60460,16,,,,,()940,11,,,,,()4440,4,,,,,()53800,23,,,,,()6122960,16,,,,,()68187710,11,,,,,()39420,4,,,,,(10741141185xbebfbc M d c b a HH b bb xf M d c b a HH bdecfa x M d c b a HH beea xa M d c b a HH c xfde M d c b a HH d d x M d c b a HH f x M d c b a HH xfffa M d c b a HH )566540,23,,,,,()82710,16,,,,,()59960,11,,,,,()039490,4,,,,,()05048810,23,,,,,()308540,16,,,,,()1270,11,,,,,()672890,4,,,,,(21512963013ac xc M d c b a HH cf fa x M d c b a HH e db xe M d c b a HH d d xd M d c b a HH d x M d c b a HH ef xd M d c b a HH fa xeaa M d c b a HH ec b x M d c b a HH MD5的第三轮27))),,((((),,,,,,(s t M d c b I a b a t s M d c b a II i j i j 〈〈〈++++=表示)1858450,21,,,,,()470,15,,,,,()92080,10,,,,,()3596550,6,,,,,()039930,21,,,,,()794230,15,,,,,()974320,10,,,,,()42922440,6,,,,,(11031251470dd x M d c b a II d xffeff M d c b a II ccc f x M d c b a II c b x M d c b a II a xfc M d c b a II a xab M d c b a II aff x M d c b a II xf M d c b a II )391860,21,,,,,()2720,15,,,,,()23530,10,,,,,()8275370,6,,,,,()1081140,21,,,,,()30143140,15,,,,,()0620,10,,,,,()48760,6,,,,,(92114136158d xeb M d c b a II bb d ad x M d c b a II af xbd M d c b a II e xf M d c b a II a e x M d c b a II xa M d c b a II e ce xfe M d c b a II f e fa x M d c b a II MD5的第四轮281.消息填充首先将比特“1”添加到消息的末尾,再添加k 个零,这里k 是方程l+1+k ≡448 mod 512 的最小的非负解. 然后再添加一个64比特长的块,其值等于消息M 的长度l 的二进制表示. 使得填充后的消息的长度为512比特的倍数.292 SHA-256的初始变量这些初值由计算前8个素数的平方根的小数部分的前32位(二进制)生成3 压缩函数的消息分组长度为512比特,压缩函数共64步变换.4 输出散列值长度为256比特.30SHA-256 压缩函数¾第(i-1)块的输出链接变量a、b、c、d、e、f、g和h分别赋值:¾for t=0 to 63¾计算第i个Hash值H(i):(1)(1)1(1)2(1)3(1)4(1)5(1)6(1)7iiiiiiiia Hb Hc Hd He Hf Hg Hh H−−−−−−−−========{256}{256}11{256}20112()(,,)()(,,)t t T h e C he f g K W T a M a j abch gg ff ee d Td cc bb aa T T=++++ =+====+====+∑∑()(1)00()(1)11()(1)22()(1)33()(1)44()(1)55()(1)66()(1)77i ii ii ii ii ii ii ii iH a HH b HH c HH d HH e HH f HH g HH h H−−−−−−−−=+=+=+=+=+=+=+=+需要临时寄存器T1和T23132SHA-256的消息编排当消息填充完成后,将消息块M (1),M (2),…,M (N)按序排列,然后执行以下步骤: For i=1 to N {()256256127015160151663()()i tt t t t t t M W t W W W W σσ−−−−⎧≤≤=⎨≤≤+++⎩33SHA-256使用了6个逻辑函数,设x,y 和z 为3个32比特长的自变量,输出结果都是32比特长的字,逻辑函数定义如下:34SHA-256的常数共使用了64个32位字长的常数,它们分别由最小的64个素数的三次方根的小数部分的前32位产生(二进制表示)428a2f98 71374491 b5c0fbcf e9b5dba5 3956c25b 59f111f1 923f82a4 ab1c5ed5d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deb1fe 9bdc06a7 c19bf174e49b69c1 efbe4786 0fc19dc6 240ca1cc 2de92c6f 4a7484aa 5cb0a9dc 76f988da 983e5152 a831c66d b00327c8 bf597fc7c6e00bf3 d5a79147 06ca6351 142929673527b70a85 2e1b2138 4d2c6dfc 53380d13 650a7354 766a0abb 81c2c92e 92722c85a2bfe8a1 a81a664b c24b8b70 c76c51a3 d192e819 d6990624 f40e3585 106aa07019a4c116 1e376c08 2748774c 34b0bcb5391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3748f82ee 78a5636f 84c87814 8cc70208 90befffa a4506ceb bef9a3f7 c67178f2填充消息M, 将消息填充到1024的整数倍.将填充消息分割为N 个1024比特长的消息块M (1),M (2),…,M (N).设置初始Hash 值H (0).迭代压缩,压缩函数消息分块长度为1024比特,压缩函数为80步运算.N 次迭代后的输出512比特链接变量作为消息散列值输出.36()()()()()()()()01234567N N N N N N N N HHHHHHHHSHA-384算法可用来Hash 任意l(0≤l ≤2128)位长的消息M 。