第五章 消息认证与散列函数
信息安全原理与技术第3版习题答案
《信息安全》习题参考答案第1章1.1主动攻击和被动攻击是区别是什么?答:被动攻击时系统的操作和状态不会改变,因此被动攻击主要威胁信息的保密性。
主动攻击则意在篡改或者伪造信息、也可以是改变系统的状态和操作,因此主动攻击主要威胁信息的完整性、可用性和真实性。
1.2列出一些主动攻击和被动攻击的例子。
答:常见的主动攻击:重放、拒绝服务、篡改、伪装等等。
常见的被动攻击:消息内容的泄漏、流量分析等等。
1.3列出并简单定义安全机制的种类。
答:安全机制是阻止安全攻击及恢复系统的机制,常见的安全机制包括:加密机制:加密是提供数据保护最常用的方法,加密能够提供数据的保密性,并能对其他安全机制起作用或对它们进行补充。
数字签名机制:数字签名主要用来解决通信双方发生否认、伪造、篡改和冒充等问题。
访问控制机制:访问控制机制是按照事先制立的规则确定主体对客体的访问是否合法,防止未经授权的用户非法访问系统资源。
数据完整性机制:用于保证数据单元完整性的各种机制。
认证交换机制:以交换信息的方式来确认对方身份的机制。
流疑填充机制:指在数拯流中填充一些额外数据,用于防止流量分析的机制。
路由控制机制:发送信息者可以选择特殊安全的线路发送信息。
公证机制:在两个或多个实体间进行通信时,数据的完整性、来源、时间和目的地等内容都由公证机制来保证。
1.4安全服务模型主要由几个部分组成,它们之间存在什么关系。
答:安全服务是加强数拯处理系统和信息传输的安全性的一种服务,是指信息系统为英应用提供的某些功能或者辅助业务。
安全服务模型主要由三个部分组成:支撑服务,预防服务和恢复相关的服务。
支撑服务是英他服务的基础,预防服务能够阻止安全漏洞的发生,检测与恢复服务主要是关于安全漏洞的检测,以及采取行动恢复或者降低这些安全漏洞产生的影响。
1.5说明安全目标、安全要求、安全服务以及安全机制之间的关系。
答:全部安全需求的实现才能达到安全目标,安全需求和安全服务是多对多的关系,不同的安全服务的联合能够实现不同的安全需求,一个安全服务可能是多个安全需求的组成要素。
散列函数与消息认证码
第七讲散列函数与消息认证码马春光machunguang@计算机科学与技术学院哈尔滨工程大学1 /•网络安全威胁:–被动攻击(Passive Attack):敌手通过侦听和截获等手段获取数据;–主动攻击(Active Attack):敌手通过伪造、重放、篡改、乱序等手段改变数据;图1 无线网络中的四种通信安全威胁(a)监听;(b)篡改;(c)伪造;(d)阻断2 /•消息认证(Message Authentication)的目的:–验证消息的完整性,确认数据在传送和存储过程中未受到主动攻击。
•消息认证的方式:–消息加密函数:加密整个消息,以消息的密文文件作为认证,可使用对称密码或公钥密码体制进行加密;–散列函数(Hash):将任意长度的消息变换为定长的消息摘要,并加以认证;–消息认证码(MAC):依赖公开的函数(密钥控制下)对消息处理,生成定长的认证标识,并加以认证;3 /提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5•2 消息认证码–2.1 MAC函数–2.2 MAC的安全性–2.3 CBC-MAC•作业4 /提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5• 2 消息认证码•作业5 /散列函数的定义•散列函数H 是一个公开的函数,它将任意长度的消息M变换为固定长度的散列码h 。
•h=H (M)–M:变长消息,H(M):定长的散列值•散列函数是一种算法,算法的输出内容称为散列码或者消息摘要。
•消息摘要要唯一地对应原始消息,如果原始消息改变并且再次通过散列函数,它将生成不同的消息摘要,因此散列函数能用来检测消息地完整性,保证消息从建立开始到收到为止没有被改变和破坏。
•运行相同算法的接受者应该收到系统的消息摘要,否则保温是不可信的。
•散列函数又称为:哈希(Hash )函数、数字指纹(Digital fingerprint)、压缩(Compression)函数、数据认证码(DataAuthentication Code)等6 /散列函数的要求•H 能用于任意大小的分组;•H 能产生定长的输出;•对任何给定的x,H(x)要相对易于计算,使得硬件和软件实现成为实际可能;•对任何给定的码h ,寻找x 使得H(x)=h 在计算上是不可行的,即单向性(one-way);•对任意给定的分组x,寻找不等于x 的y,使得H(x)=H(y)在计算上是不可行的,即弱抗冲突性(Weak Collision-free);•寻找对任意的(x, y) 对使得H(x)=H (y) 在计算上是不可行的,即强抗冲突性(Strong Collision-free);7 /提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5• 2 消息认证码•作业8 /2.2 Hash函数的通用结构•由Ron Rivest于1990年提出MD4•几乎被所有Hash函数使用•具体做法:–把原始消息M分成一些固定长度的块Y i–最后一块padding 并使其包含消息M长度–设定初始值CV0–压缩函数f, CV i=f(CV i-1, Y i-1)–最后一个CV i为Hash值9 //提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5• 2 消息认证码•作业11 /MD5 描述•1989年,Merkle提出Hash function模型•1990年,Ron Rivest提出MD4•1992年, Ron Rivest完成MD5 (RFC 1321) –/rfcs/rfc1321.html•在最近数年之前,MD5是最主要的Hash算法•现行美国标准SHA-1以MD5的前身MD4为基础•MD5(Message Digest)–输入:任意长度的消息–输入分组长度:512 bit–输出:128 bit 消息12 /(4)(3)13 /14/MD5 描述-(1)•消息填充•对消息进行填充,使其比特数与448模512同余,即填充长度为512的整数倍减去64,留出64比特在(2)中使用:•填充方法:填充比特串的最高位为1,其余各位均为0。
信息安全概论第五章消息认证与数字签名
5.1.1 信息加密认证
信息加密函数分两种,一种是常规的对称密钥加密函数, 另一种是公开密钥的双密钥加密函数。下图的通信双方 是,用户A为发信方,用户B为接收方。用户B接收到信 息后,通过解密来判决信息是否来自A, 信息是否是完 整的,有无窜扰。
1.对称密码体制加密: 对称加密:具有机密性,可认证,不提供签名
通常b>n
24
5.2.3
MD5算法
Ron Rivest于1990年提出了一个称为MD4的散列函数。 他的设计没有基于任何假设和密码体制,不久,他的 一些缺点也被提出。为了增强安全性和克服MD4的缺 陷, Rivest于1991年对MD4作了六点改进,并将改进 后的算法称为MD5. MD5算法:将明文按512比特进行分组,即MD5中的 b=512bit,经填充后信息长度为512的倍数(包括64 比特的消息长度)。 填充:首位为1,其余补0至满足要求,即填充后的比 特数为512的整数倍减去64,或使得填充后的数据长 度与448模512同余。
18
通过以下方式使用散列函数常提供消息认证
(1)使用对称加密算法对附加消息摘要的报文进行加密 A B: EK(M||H(M)) 提供保密、认证 (2)使用对称加密方法对消息摘要加密 A B: M||EK(H(M)) 提供认证 (3)使用发方的私钥对消息摘要进行加密 A B: M||EKRa(H(M)) 提供数字签名、认证 (4)在(3)的基础上,使用对称加密方法进行加密 A B: EK(M||EKa(H(M)) ) 提供数字签名、认证和保密 (5)假定双方共享一个秘密值S,与消息M串接,计算散 列值 A B: M||(H(M||S)) 提供认证 (6)假定双方共享一个秘密值S,使用散列函数,对称加 密方法 A B: EK(M||H(M||S)) 提供数字签名、认证和保密19
消息鉴别和散列函数
网络与信息安全第七讲消息鉴别与散列函数陈钟教授北京大学信息科学技术学院软件研究所--信息安全研究室chen@2008-2009年度北京大学研究生课程2009/03/30 NISC-07 ©CZ@PKU回顾与总结•对称密码算法–运算速度快、密钥短、多种用途(随机数产生、Hash函数)、历史悠久–密钥管理困难(分发、更换)•非对称密码算法–只需保管私钥、可以相当长的时间保持不变、需要的数目较小–运算速度慢、密钥尺寸大、历史短信息安全的需求•保密性(Confidentiality)•完整性(Integrity)–数据完整性,未被未授权篡改或者损坏–系统完整性,系统未被非授权操纵,按既定的功能运行•可用性(Availability)•鉴别(Authenticity)–实体身份的鉴别,适用于用户、进程、系统、信息等•不可否认性(Non-repudiation)–防止源点或终点的抵赖•……讨论议题•消息鉴别(Message Authentication)•散列函数(Hash Functions)定义•消息鉴别(Message Authentication):是一个证实收到的消息来自可信的源点且未被篡改的过程。
•散列函数(Hash Functions):一个散列函数以一个变长的报文作为输入,并产生一个定长的散列码,有时也称报文摘要,作为输出。
•数字签名(Digital Signature)是一种防止源点或终点抵赖的鉴别技术。
通信系统典型攻击1)窃听2)业务流分析3)消息篡改内容修改:消息内容被插入、删除、修改。
顺序修改:插入、删除或重组消息序列。
时间修改:消息延迟或重放。
4)冒充:从一个假冒信息源向网络中插入消息5)抵赖:接受者否认收到消息;发送者否认发送过消息。
两个概念•鉴别(Authentication):真伪性•认证(Certification)资格审查消息鉴别•鉴别的目的•鉴别模型•鉴别函数鉴别的目的•鉴别的主要目的有二:第一,验证信息的发送者是真正的,而不是冒充的,此为信源识别;第二,验证信息的完整性,在传送或存储过程中未被篡改,重放或延迟等。
3消息认证和Hash函数
若要提供认证,则A用其私钥对消息加密,而B用A的 公钥对接收的消息解密。因为只有A拥有PRa,能产 生用PUa可解密的密文,所以该消息一定来自A。 同样,对明文也必须有某种内部结构以使接收方能 区分真实的明文和随机的位串。
源A 宿B D E(PRa, M) PUa M
M
E PRa
(c) 公钥加密:认证和签名
其中:M=输入消息, C=MAC函数 K=共享的密钥,MAC=消息认证
消息认证码
1. 2.
3.
发送方将消息和MAC一起发送给接收方。接收方对 收到的消息用相同的密钥K进行相同的计算得出新 的MAC,并将接收到的MAC与其计算出的MAC进行 比较。 如果我们假定只有收发双方知道密钥K,那么若接 收到的MAC与计算得出的MAC相等,则: 接收方可以相信消息未被修改。 接收方可以相信消息来自真正的发送方。 如果消息中含有序列号,那么接收方可以相信消息 顺序是正确的。
MAC的性质
性质2:C(k,M)应是均匀分布的,即对任何随 机选择的消息M和M’, C(k,M) = C(k,M’)的概率 是2-n,其中n是MAC的位数。
该要求是为了阻止基于选择明文的穷举攻击,也就 是说,假定攻击者不知道K,但是他可以访问MAC 函数,能对消息产生MAC,那么攻击者可以对各种 消息计算MAC,直至找到与给定MAC相同的消息为 止。如果MAC函数具有均匀分布的特征,那么穷举 方法平均需要2n-1步才能找到具有给定MAC的消息。
消息认证码的基本用法
提供认证
(a)消息认证 (b)消息认证和保密性:与明文有关的认证 (c)消息认证和保密性:与密文有关的认证
提供认证和保密性
清华大学出版社第5章 散列函数和消息鉴别
生日悖论
我们来考虑这样一个有趣的问题:在一个教室中最少应有多少学 生才使得至少有两个学生的生日在同一天的概率大于0.5?计算与此 相关的概率被称为生日悖论问题。
3/27
第5章 散列函数与消息鉴别
• 散列函数的应用
散列函数的主要应用有以下三个方面: 1)保证数据的完整性 2)单向数据加密 3)数字签名 应用散列函数实现数据完整性保护的模型:
注:实际应用中,未必一定是如h(m‖k)的计算方式,明文与密钥k的 组合方式因不同的实现可以不同。
4/27
第5章 散列函数与消息鉴别
20/27
第5章 散列函数与消息鉴别 (4)结合使用公钥密码体制和对称密码体制,这种方法用发送方的私钥 对散列值进行数字签名,用对称密码体制加密消息M和得到的数字签名, 如图5.16(d)。 (5)这种方法使用了散列算法,但未使用加密算法。 (6)在方法(5)的基础上,使用对称密码体制对消息M和生成的散列值 进行保护,如图5.16(f)。
Ⅲ.SHA-1的压缩操作 SHA-1压缩函数操作过程,如图5.9所示(下页),是处理一个512位 分组的4次循环中每一循环的基本压缩操作流程。 Ⅳ.示例 【例5.1】计算字符串“abc”的SHA-1散列值。 字符串“abc”的二进制表示为:01100001 01100010 01100011,共 有24位的长度。按照SHA-1的填充要求,应该填充一个“1”(界符)和423 个“0”,最后有两个字“00000000 00000018”(十六进制),表明原始消 息的长度为24位。本例中共只有一个分组。
第5章散列函数与消息鉴别讲义
表可避免以明文的形式保存口令,至今仍然在许多系统中得 到广泛的使用。
(3)数字签名。
四川大学电子信息学院
4/40
二. 散列函数的构造与设计
2.1 简单的散列函数: 数字通信中的一些校验码能否作散列函数,如累加和校
验、纵向奇偶校验、CRC循环冗余校验等等? 如纵向奇偶校验: 设输入分组序列为:M =X1|| X2 ||…… || XN
Hash函数是一种将任意长度的消息M映射为较短的、固 定长度的一个值H(M)的函数 ,称函数值H(M)为消息摘要 MD ( Message Digest )或散列码。
散列函数的目的是为文件、报文或其他的分组数据产生 “数字指纹”,主要用于报文鉴别和数字签名。
2/40
1. 散列函数的基本性质
散列函数H必须具有如下性质:
(Xi为n bit分组) 则输出散列码为:H(M)=X1⊕X2⊕ …… ⊕XN ( 按位异或) 特点: (1)简单、对输入为随机数据的完整性检查有效; 存在的问题: 容易产生碰撞
四川大学电子信息学院
5/40
若H( M ) = X1 ⊕ X2 ⊕ …… ⊕ XN ,有报文篡改方案:
原报文:M = X1|| X2|| …… || XN ,传送报文M || Ek[H(M)]被攻
四川大学电子信息学院
3/40
2. 散列函数的主要应用
(1)保证数据的完整性; 例如,为保证数据的完整性,可以使用单向散列函数对
数据生成并保存散列值,然后,每当使用数据时,用户将重 新使用单向散列函数计算数据的散列值,并与保存的数值进 行比较,如果相等,说明数据是完整的,没有经过改动;否 则,数据已经被改动了。
网络安全-安全散列函数,信息摘要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个性质则称之为强散列函数。
信息安全原理与技术ch05Hash函数和数字签名
PPT文档演模板
2020/11/4
信息安全原理与技术ch05Hash函数 和数字签名
• 首先k个人的生日排列的总数目是365k。这样, k个人有不同生日的排列数为:
• 因此,k个人有不同生日的概率为不重复的排列 数除以总书目,得到:
• 则,k个人中,至少找到两个人同日出生的概率 是:
PPT文档演模板
PPT文档演模板
2020/11/4
信息安全原理与技术ch05Hash函数 和数字签名
生日攻击(Birthday Attack)
• 如果攻击者希望伪造消息M的签名来欺骗接收者, 则他需要找到满足H(M’)=H(M)的M’来替代M。 对于生成64位散列值的散列函数,平均需要尝 试263次以找到M’。但是建立在生日悖论上的生 日攻击法,则会更有效。
PPT文档演模板
2020/11/4
信息安全原理与技术ch05Hash函数 和数字签名
Yuval的生日攻击(续)
• (3) 攻击者在上述两个消息集合中找出可以产生相同 散列值的一对消息。根据“生日悖论”理论,能找 到这样一对消息的概率是非常大的。如果找不到这 样的消息,攻击者再产生一条有效的消息和伪造的 消息,并增加每组中的明文数目,直至成功为止。
• 设消息M=(X1||X2||…||Xm),即由64位分组Xi联结而成。定义
Δ(M)=X1X2… Xm
Ck(M)=EK[Δ(M)] 攻击者可以用任何期望的Y1至Ym-1替代X1至Xm-1,用Ym替代 Xm来进行攻击,其中Ym如下计算的:
Ym=Y1Y2…Ym-1Δ(M) 攻击者可以将Y1至Ym-1与原来的MAC连结成一个新的消息M’, 接收方收到(M’, Ck(M))时,由于Δ(M’)= Y1 Y2… Ym =Δ(M),因此Ck(M)=EK[Δ(M’)],接受者会认为该消息是真实。 用这种办法,攻击者可以随意插入任意的长为64(m-1)位的 消息。
应用密码学 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 。
信息安全实际原理及具体应用第5章消息认证
消息认证码的基本用途
• 只提供消息认证,不提供保密性。(见前) • 提供消息认证和保密性:
A
B
MKC||KE KDCM KC 比较 1
2 2 EK2[M || CK1 (M )]
– 与消息认证码不同的是, hash码的产生过程中并不使用 密钥。
– Hash码是所有消息的函数,改变消息的任何一位或多位, 都会导致hash码的改变。
– Hash算法通常是公开的。 – 又称为:哈希函数、数字指纹(Digital finger print)、压
缩(Compression)函数、紧缩(Contraction )函数、 数据鉴别码DAC(Data authentication code)、篡改 检验码MDC(Manipulation detection code)
• 平均来讲,若k=x*n,则需x次循环才能找到正确的密钥。 • 所以,用穷举法攻破MAC比攻破加密算法要困难得多。
对MAC的攻击—攻击算法
• 考虑下面的算法:
消息M=(X1‖X2‖…‖Xm)是由64比特长的分组Xi(i=1,…,m)链接而成 MAC算法是:
(M ) X1 X2 Xm
CK (M ) EK (M )
消息认证码用于认证
MMCKA比C 较
• A和B共享密钥K • A计算MAC=Ck(M),
• M和MAC一起发送
到B
• B对收到的M,计算 MAC,比较两个 MAC是否相同。
如果两个MAC相等,则:
1. 接收方可以相信消息未被修改,因为如果攻击者改变了消 息,由于不知道k,无法生成正确的MAC。
散列函数、消息摘要与数字签名
散列函数、消息摘要与数字签名⼀,散列函数(Hash function)散列函数:任何⼀种能将任意⼤⼩数据映射为固定⼤⼩数据的函数,都能被称为散列函数。
散列函数的返回值称为散列值、散列码,摘要或者简单散列。
也就是说散列函数能将任意长度的输⼊变换成固定长度的输出,该输出就是散列值。
散列值空间通常远⼩于输⼊的空间。
散列函数的⼀些特性:消息的长度不受限制确定性:对于相同的输⼊(根据同⼀函数),它必须始终⽣成相同的散列值,如果两个散列值是不相同的,那么这两个散列值的原始输⼊也是不相同的,但是对于不同的输⼊可能会散列成相同的输出(哈希碰撞),所以不可能从散列值来确定唯⼀的输⼊值。
均匀性:良好的散列函数应该输⼊尽可能均匀的映射到输出范围上。
单向性:在加密应⽤程序中,通常期望散列函数实际上是不可逆的。
⼆,散列函数的应⽤1. 散列表散列函数通常与散列表(hash table)结合使⽤,使⽤散列表能够快速的按照关键字查找数据记录。
具体地,散列函数会先将关键字映射到地址集合中的某⼀个位置,然后通过这个地址来查找数据记录(也就是将关键字通过散列函数转换的地址来查找表中的数据)2. 加密散列函数由于散列函数的多样性,它们经常是专门为某⼀应⽤⽽设计的,⽐如为加密和验证信息完整性⽽设计的散列函数(⼜被称为单向散列函数、杂凑函数或者消息摘要函数),这种散列函数是⼀个“单向”操作:对于给定的散列值,没有实⽤的⽅法可以计算出⼀个原始输⼊,也就是说很难伪造,⽐如 MD5 这种散列函数,被⼴泛⽤作检测⽂件的完整性。
2.1 验证消息的完整性安全hash的⼀个重要应⽤就是验证消息的完整性:发送者将原⽂与摘要⼀起发送给接受者,然后接收者⽤同⼀个hash函数对收到的原⽂产⽣⼀个摘要,与发送者的摘要信息对⽐,如果相同,则说明收到的信息是完整的。
验证流程如下:在上述流程中,信息收发双发在通信前已经商定了具体的散列算法,并且该算法是公开的,如果消息在传递过程中被篡改,则该消息不能与已获得的数字指纹相匹配。
第5章 散列函数与消息鉴别
容易产生碰撞
四川大学电子信息学院
5/40
若H( M ) = X1 ⊕ X2 ⊕ …… ⊕ XN
,有报文篡改方案:
原报文:M = X1|| X2|| …… || XN ,传送报文M || Ek[H(M)]被攻 击者截获. ( 将Ek[H(M)] 作为报文鉴别码) 伪报文:M’ = Y1|| Y2|| …… || YN-1 || YN ;( 显然M’不等于M) 其中, Y1 、 Y2 、 …… YN-1可为任意报文分组。 而YN则按以下方式构造, 计算: H( M ) = X1 ⊕ X2 ⊕ …… ⊕ XN 使 YN = Y1 ⊕ Y2 ⊕ …… ⊕ YN-1 ⊕ H( M ) 攻击者传送报文 : M’ || Ek[H(M)] ;报文鉴别码不变 接收方解密Ek[H(M)]得报文摘要: H( M ) 接收方验证: H( M’ ) 问题原因: = Y1 ⊕ Y2 ⊕ …… ⊕ YN-1 ⊕ YN (1) M 为明文; = Y1⊕Y2⊕ …… ⊕ YN-1 ⊕Y1⊕Y2⊕……⊕YN-1⊕H(M) (2) 算法太简单。 = H( M ) ∴接收者不能发现报文已被篡改。
设报文 M = M0||M1|| … ||ML-1
M0 M1 ML-1 b n f 散列函数输出 n CVL=MD (160bit)
IV=CV0
CV1
n
b
f n
CVL-1 …
b f
图中:b=512 n=160 对每个分组使用四次循环,每次循环20步,共80步。
四川大学电子信息学院 14/40
1. 基本算法
第5 章
散列函数与消息鉴别
鉴别服务是用来提供对通信中实体和数据原发(数据源)的鉴别。 鉴别协议是能使通信各方证实对方身份或消息来源的通信协议。 (ISO/IEC 7498-2)
《现代密码学》散列函数与消息鉴别_OK
MD5算法的逻辑程序
1.初始化MD5缓冲区 初始化用于计算消息摘要的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. 攻击者提供一个对A签名有效的变种。该签名被 附加在这个带有欺诈性报文上发往原来的接收 者。因为这两个报文变种具有相同的散列码, 故它们能产生相同的签名;即使不知道加密密 钥,攻击者也肯定获得成功
15/66
对散列函数的生日攻击
• 假定其输出为m比特,那么寻找一个消息,使其 散列值与给定散列值相同则需要计算2m次;而寻 找两个消息具有相同的散列值仅需要试验2m/2个随 机的消息。
8/66
散列函数的应用
• 数字签名 将散列函数应用于数字签名,一般方法是不 直接对消息m签名,而对m对应的散列码h 进行签名,这样可以提高签名的速度 (|h|<|m|),且不泄露签名所对应的信息,因 此散列函数在数字签名中应用广泛。
9/66
散列函数的一般结构
• 目前使用的大多数散列函数,其结构都是迭代 型的。将输入的消息m分成t个分组 ( m1 ,,m2,…,mt),每组固定长度为b位。如 果最后一个分组的长度不够,需要对其进行填 充。通常的填充方法是保证最后一个分组的最 后64位为m的总长度,然后在中间填充。
26/66
MD5的安全性
• 山东大学的王小云教授在2004年美洲密码年 会上做了攻击MD5等四个算法的报告,并 给出了一个具体的MD5的碰撞的例子。这 清楚表明了MD5不是强抗碰撞的,MD5的 安全性受到了严重的威胁。
现代密码学-第5章Hash函数与消息认证习题与解答-20091202
第5章 Hash 函数与消息认证习题及参考答案1. 指出强抗碰撞H ash 函数与弱抗碰撞H ash 函数之间的区别。
答:弱抗碰撞H ash 函数是任给一个消息x,寻找另一个不同的消息x ,使得他们的H ash 函数值相等是不可行;强抗碰撞Hash 函数是同时寻找两个不同的消息使得他们的Hash 函数值相等是计算上不看行的,可以看出强抗碰撞Hash 函数一定是弱抗碰撞的。
2. 考虑Gibson Hash 函数h 。
设p 、q 是两个素数,N =p ⨯q ,g 是(Z N )*的生成元。
N 作为公钥,p 与q 作为签名者的私钥。
对任意消息m ,其摘要定义为:h (m )= g m mod N 。
(1) 令N =4897,g =2231。
分别计算消息m =132748,m '=75676的摘要。
(2) 证明:如果得到了两个碰撞的消息,那么就可以求出N 的分解。
(3) 证明:如果得到了N 的分解,那么就可以找到碰撞的消息。
解:(1)由h (m )= g m mod N 。
所以h (132748)=2231132748mod4897=2611 h(75676)=2611(2)证明:若h (m)= h (m ')则有g m mod N= g m ' mod N假设 N 的分解为 N=p*q 所以代入 然后根据中国剩余定理可以解得 p ,q 。
3. 设p 是一个素数,g 1、g 2是(Z p )*的两个生成元,使得离散对数p g g mod log21的计算是困难的。
对任意消息m =(m 1, m 2),定义H ash 函数h 的摘要为:p g g m m h m m mod ),(212121⨯=。
(1) 设p =65867,g 1=11638,g 2=22770。
分别计算消息m =(33123, 11789),m '=(55781, 9871)的摘要。
(2) 证明:求解H ash 函数h 的碰撞等价于计算离散对数p g g mod log21。
消息认证和散列(Hash)函数
消息认证和散列(Hash)函数1 散列函数1.1散列函数的概念1.2 简单散列函数的构造1.3 作为消息认证的散列函数应具有的特性2 基于散列函数的消息认证方式2.1 对称密钥加密方式2.2 公开密钥与对称密钥结合的加密方式2.3公共秘密值方式在网络通信环境中,可能存在下述攻击:1.泄密:将消息透露给没有合法密钥的任何人或程序。
2.传输分析:分析通信双方的通信模式。
在面向连接的应用中,确定连接的频率和持续时间;在面向业务或无连接的环境中,确定双方的消息数量和长度。
3.伪装:欺诈源向网络中插入一条消息,如攻击者产生一条消息并声称这条消息是来自某合法实体,或者非消息接受方发送的关于收到或未收到消息的欺诈应答。
4.内容修改:对消息内容的修改,包括插入、删除、转换和修改。
5.顺序修改:对通信双方消息顺序的修改,包括插入、删除和重新排序。
6.计时修改:对消息的延时和重放。
7.发送方否认:发送方否认发送过某消息。
8.接收方否认:接收方否认接收到某消息。
其中,对付前两种攻击的方法属于消息保密性范畴;对付第3种至第6种攻击的方法一般称为消息认证;对如第7种攻击的方法属于数字签名;对付第8种攻击需要使用数字签名和为抗此种攻击而涉及的协议。
这样归纳起来,消息认证就是验证所收到的消息确实来自真正的发送方且未被修改的消息,它也可验证消息的顺序和及时性。
任何消息认证在功能上基本可看做有两层。
下层中一定有某种产生认证符的函数,认证符是一个用来认证消息的值;上层协议中将该函数作为原语使接收方可以验证消息的真实性。
产生认证符的函数类型通常可以分为以下三类:1.消息加密:整个消息的密文作为认证符。
2.Hash函数:它是将任意长的消息映射为定长的hash值得公开函数,以该hash 值作为认证符。
3.消息认证码(MAC):它是消息和密钥的公开函数,它产生定长的值,以该值作为认证符。
实际上消息认证码也属于Hash函数的范畴,它是带密钥的Hash函数。
散列函数与消息认证
认证:认证函数 认证函数
认证系统的工作原理 发送方利用底层的认证函数产生一个用来认证的认证标识; 消息接收方利用上层的认证协议基于认证标识验证真实性。 认证函数的分类 加密函数:用整个消息的密文作为消息认证的认证标识; 加密函数 消息认证码(MAC):指消息被一密钥控制的公开函数作用后产 消息认证码 生的、用作认证符的、固定长度的数值,也称为密码校验和 密码校验和; 密码校验和 散列函数:一个不需要密钥的公开函数,将任意长度的输入消 散列函数 息映射成一个固定长度的输出值,并以此值作为认证标识别。
Page: 17 2010-12-16
HASH函数:生日攻击 生日攻击
攻击过程(Alice发送消息给 发送消息给Bob) 攻击过程 发送消息给 Alice用自己的私钥对消息的HASH值加密,加密结果作为对消息 的签名连同明文消息一起发送给接收者; 敌手对Alice发送的消息m以及一个假冒的消息m‘产生出2|m|/2 个变 形的消息,每个变形的消息本质上的含义与原消息相同; 敌手在产生的两个消息集中找出HASH值相同的一对消息m,m’, 直到成功为止(由上述讨论可知敌手成功的概率大于0.5); 敌手将m’提交给Alice签名,由于m和m’的HASH值相同,所以可 将Alice对m’的签名当成m的签名,将签名m’与一起发给接收者。
Page: 19
2010-12-16
HASH函数:迭代型 迭代型HASH函数 迭代型 函数
迭代型HASH函数的设计思想 函数的设计思想 迭代型 将输入M分为L个分组:Y0, Y1, …, YL-1。每一个分组的长度为b比 特,最后一个分组不足则填充,且最后一个分组还包括整个输 入的长度值; 重复使用一个压缩函数 (两个输入一个输出,算法指定初值 压缩函数f 两个输入一个输出 算法指定初值IV) 压缩函数 两个输入一个输出,
05 消息鉴别
512 bit YL-1 512 HMD5
1) 附加填充位 2) 附加长度 3) 初始化MD缓冲区 4) 按512位的分组处理 5) 输出
128
128位消息摘要
安全散列函数(SHA)
SHA是美国NIST和NSA共同设计的安全散列算法(Secure Hash Algorithm),用于数字签名标准DSS(Digital Signature Standard)。 修改版SHA–1于1995年作为美国联邦信息处理标准公告 发布。 SHA–1的输入: 长度小于264位的消息 输出: 160位的消息摘要。 NIST协会隶属于美国商务部,负责发放密码规程的标准。
算法 MD5对输入的任意长度消息产生128位散列 值:
填充位 L× 512 bit=N× bit 32 K bit 消息 100…0
MD5算法五个步骤:
64 消息长度(K mod 2 )
512 bit Y0 512 IV HMD5 CV 1 128
512 bit Y1 512 HMD5 … CV L-1 128 …
源端A M K Ⅱ
目的端B M C 比较 K CK(M)
C
图3-6 MAC应用于消息认证
IP安全协议强制实现的MAC,由RFC2104定义的HMAC,全称为KeyedHash Message Authentication Code。
MAC(text) = HMAC(K, text)= H((K0+opad )|| H((K0+ipad) || text))
‘ 如果M=M ,S是M的签名,否则是伪造的
RSA数字签名安全性分析
安全性依赖于大整数因子分解的困难性。 存在性伪造1:选定一S,直接由验证式 得到消息M=Se mod n,从而消息M的签 名为S,但这个消息M是随机数,没有实 际意义 存在性伪造2:消息M1,M2的签名为S1, S2,可以伪造消息M1M2的签名S1 S2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
K2 D C K1 M
比较
提供认证, 提供认证,提供保密 与秘文有关的认证
Alice
两种改进方案的比较
上述过程中,由于消息本身在发送过程中是明 上述过程中, 文形式, 文形式,所以这一过程只提供认证性而未提供 保密性。 提供保密性可在 可在MAC函数以后 如 函数以后(如 保密性。为提供保密性可在 函数以后 或以前(如图 进行一次加密, 图6.1(b))或以前 如图 或以前 如图6.1(c))进行一次加密, 进行一次加密 而且加密密钥也需被收发双方共享。 而且加密密钥也需被收发双方共享。在图 6.1(b)中,M与MAC链接后再被整体加密,在 链接后再被整体加密, 中 与 链接后再被整体加密 先被加密再与MAC链接后发送。 链接后发送。 图6.1(c)中,M先被加密再与 中 先被加密再与 链接后发送 通常希望直接对明文进行认证,因此图6.1(b) 通常希望直接对明文进行认证,因此图 所示的使用方式更为常用。 所示的使用方式更为常用
预映射 鉴别密钥K 单向散列函数 散列值
基于消息认证码(MAC)的认证 的认证 基于消息认证码
C M C Alice CK(M) Bob || M 比较
特ห้องสมุดไป่ตู้: 特点:
– – –
MAC函数无需可逆 函数无需可逆 收发双方使用相同的密钥, 收发双方使用相同的密钥,MAC不能提供数字签名 不能提供数字签名 只提供消息认证, 只提供消息认证,不能提供机密性
函数(散列 哈希函数) (3)Hash函数 散列 哈希函数 ) 函数 散列,哈希函数
Hash函数 函数
–
–
–
–
Hash函数是将任意长度的报文映射成一个较 函数是将任意长度的报文映射成一个较 短的定长输出报文的函数. 短的定长输出报文的函数 如下形式: 是变长的报文,h是定长 如下形式 h = H(M), M是变长的报文 是定长 是变长的报文 的Hash值. 值 Hash函数的目的是为文件、报文或其它的分 函数的目的是为文件、 函数的目的是为文件 组数据产生“数字指纹”. 组数据产生“数字指纹” Hash函数是一种有损加密,信息有损失 函数是一种有损加密, 函数是一种有损加密
如果仅收发双方知道K, 计算得到的MAC 如果仅收发双方知道 ,且B计算得到的 计算得到的 与接收到的MAC一致,则这一系统就实现了以下 一致, 与接收到的 一致 功能: 功能: 接收方相信发送方发来的消息未被篡改, ① 接收方相信发送方发来的消息未被篡改,这是因 为攻击者不知道密钥, 为攻击者不知道密钥,所以不能够在篡改消息后 相应地篡改MAC,而如果仅篡改消息,则接收方 相应地篡改 ,而如果仅篡改消息, 计算的新MAC将与收到的 将与收到的MAC不同。 不同。 计算的新 将与收到的 不同 接收方相信发送方不是冒充的, ② 接收方相信发送方不是冒充的,这是因为除收发 双方外再无其他人知道密钥, 双方外再无其他人知道密钥,因此其他人不可能 对自己发送的消息计算出正确的MAC。 对自己发送的消息计算出正确的 。
认证函数: 认证函数:Hash函数 函数
Hash Function – 哈希函数、散列函数、摘要函数 哈希函数、散列函数、 – 输入:任意长度的消息报文 M 输入: – 输出:一个固定长度的散列码值 H(M) 输出: – 是报文中所有比特的函数值 – 单向函数(转换过程中信息是有损失的,因 单向函数(转换过程中信息是有损失的, 此无法恢复到明文) 此无法恢复到明文) 散列计算不可能对两条信息求出相同的摘要
Hash函数的分类 函数的分类
根据是否使用密钥
–
–
带秘密密钥的Hash函数 消息的散列值由只有通 函数:消息的散列值由只有通 带秘密密钥的 函数 信双方知道的秘密密钥K来控制 此时, 来控制。 信双方知道的秘密密钥 来控制。此时,散列 值称作MAC。 值称作 。 不带秘密密钥的Hash函数:消息的散列值的产 函数: 不带秘密密钥的 函数 生无需使用密钥。此时,散列值称作MDC 生无需使用密钥。此时,散列值称作 (Manipulation detection code)篡改检验码 。 篡改检验码
•消息认证:这消息真的是他发出来的吗?是不是 消息认证:这消息真的是他发出来的吗? 消息认证 假冒的?有没有被篡改过? 假冒的?有没有被篡改过? •身份的认证:和我通话 信的这个人真的是他吗? 身份的认证: 信的这个人真的是他吗? 身份的认证 和我通话/信的这个人真的是他吗 是不是假冒的?是不是录音重放? 是不是假冒的?是不是录音重放?
消息认证码的定义及使用方式
消息认证码是指消息被一密钥控制的公开散列函 数作用后产生的、用作认证符的、 数作用后产生的、用作认证符的、固定长度的数 也称为密码校验和 密码校验和。 值,也称为密码校验和。 此时需要通信双方A和 共享一密钥 共享一密钥K。 此时需要通信双方 和B共享一密钥 。设A欲发 欲发 送给B的消息是 的消息是M, 首先计算 首先计算MAC=CK(M),其 送给 的消息是 ,A首先计算 , 是密钥控制的公开函数, 中CK(·)是密钥控制的公开函数,然后向 发送 是密钥控制的公开函数 然后向B发送 M‖MAC,B收到后做与 相同的计算,求得一新 收到后做与A相同的计算 ‖ , 收到后做与 相同的计算, MAC,并与收到的 做比较, ,并与收到的MAC做比较,如图 做比较 如图6.1(a)所示 所示
(1)信息加密函数作认证 )
信息加密函数分二种, 信息加密函数分二种,一种是常规的对称密钥 加密函数,另一种是公开密钥的双密钥加密函数。 加密函数,另一种是公开密钥的双密钥加密函数。 下图的通信双方是:用户A为发信方 用户B为接 为发信方, 下图的通信双方是:用户 为发信方,用户 为接 收方。用户B接收到信息后 接收到信息后, 收方。用户 接收到信息后,通过解密来判决信 息是否来自A,信息是否是完整的,有无窜扰。 息是否来自 ,信息是否是完整的,有无窜扰。
Message Authentication:消息认证(报文鉴别, :消息认证(报文鉴别, 消息鉴别) 消息鉴别) – Message:消息、报文。 :消息、报文。 – Authentication: 鉴别、认证。 : 鉴别、认证。 认证: 认证:消息的接收者对消息进行的验证 真实性:消息确实来自于其真正的发送者, 真实性:消息确实来自于其真正的发送者, 而非假冒; 而非假冒; 完整性:消息的内容没有被篡改。 完整性:消息的内容没有被篡改。 信息的序号和时间 是一个证实收到的消息来自可信的源点且未被篡 改的过程。 改的过程。它也可以验证消息的顺序和及时性
2
认证函数
可用来做消息认证的函数分为三类 信息加密函数(Message (1) 信息加密函数(Message encryption) 用完整信息的密文作为对信息的认证 消息认证码MAC(Message (2) 消息认证码MAC(Message Authentication Code) 是对信源消息的一个编码函数 散列函数(Hash (3) 散列函数(Hash Function) 是一个公开的函数 它将任意长的信息映射成 一 个固定长度的信息
杂凑函数的目的是为需认证的数据产生一个“指纹” 杂凑函数的目的是为需认证的数据产生一个“指纹” 为了能够实现对数据的认证, 。为了能够实现对数据的认证,杂凑函数应满足以下 条件: 条件: ① 函数的输入可以是任意长。 函数的输入可以是任意长。 ② 函数的输出是固定长。 函数的输出是固定长。 已知x H(x)较为容易 可用硬件或软件实现。 较为容易, ③ 已知x,求H(x)较为容易,可用硬件或软件实现。 已知h 求使得H(x)=h H(x)=h的 在计算上是不可行的, ④ 已知h,求使得H(x)=h的x在计算上是不可行的, 这一性质称为函数的单向性, H(x)为单向杂凑函数 这一性质称为函数的单向性,称H(x)为单向杂凑函数 。
公开密钥加密与认证的关系
A->B: E(KUb,M)
– –
提供保密(仅 能解密 能解密) 提供保密 仅B能解密 不提供认证 提供认证和签名(仅有 可加密 需要某种结构和冗余, 提供认证和签名 仅有A可加密 需要某种结构和冗余 仅有 可加密,需要某种结构和冗余 任何一方均能验证签名) 任何一方均能验证签名 可提供保密 可提供认证和签名
第五章 消息认证与散列函数
消息认证
章曾介绍过电子商务安全所面临的基本攻击类型, 第1章曾介绍过电子商务安全所面临的基本攻击类型, 章曾介绍过电子商务安全所面临的基本攻击类型 包括被动攻击 窃听、业务流分析) 主动攻击( 被动攻击( 包括被动攻击(窃听、业务流分析)和主动攻击(假 重放、消息的篡改、业务拒绝)。 )。抗击被动攻击 冒、重放、消息的篡改、业务拒绝)。抗击被动攻击 的方法是前面已介绍过的加密 本章介绍的消息认证 加密, 的方法是前面已介绍过的加密,本章介绍的消息认证 则是用来抗击主动攻击的 则是用来抗击主动攻击的。 消息认证是一个过程,用以验证接收消息的真实性 消息认证是一个过程,用以验证接收消息的真实性 的确是由它所声称的实体发来的) 完整性( (的确是由它所声称的实体发来的)和完整性(未被 篡改、插入、删除),同时还用于验证消息的顺序性 ),同时还用于验证消息的 篡改、插入、删除),同时还用于验证消息的顺序性 时间性(未重排、重放、延迟)。 和时间性(未重排、重放、延迟)。 除此之外,在考虑信息安全时还需考虑业务的不可 除此之外,在考虑信息安全时还需考虑业务的不可 否认性, 否认性,即防止通信双方中的某一方对所传输消息的 否认。实现消息的不可否认性可通过数字签名 数字签名, 否认。实现消息的不可否认性可通过数字签名,数字 签名也是一种认证技术, 签名也是一种认证技术,它也可用于抗击主动攻击
A->B: E(KRa,M)
–
A->B: E(KUb,E(KRa, M))
– –
M A方 方 D KRb
E KRa EkRa(M)
EkRa(M)
E KUb
EKUb(EkRa(M))