Hash函数(消息认证)
一种基于Hash函数和分组密码的消息认证码
( 北 京 电子 科 技 学 院 北京
北 京 1 0 0 8 7 6 )
1 0 0 0 7 0 )
”( 中 国科 学 院信 息 工 程 研 究 所
北 京 1 0 0 0 9 3 )
摘 要
基 于 Ha s h函 数 的 HMAC是 一 种 应 用 最 为 广 泛 的 消息 认 证 码 , 但 最 近 的 研 究 指 出 HMA C 不 仅 易 受 到 相
Ab s t r a c t HM AC o n t h e b a s e o f Ha s h f u n c t i o n i S t h e mo s t p o p u l a r M AC,b u t r e c e n t s t u d i e s h a v e p o i n t e d o u t t h e v u l n e r a b i l i t i e s o f HM AC b o t h t o r e l a t e d — k e y a t t a c k a n d i n mu l t i - u s e r e n v i r o n -
பைடு நூலகம்
f unc t i o n a n d bl oc k c i p he r . Se c u r i t y pr o o f f o r HBM AC ha s be e n gi v e n o n t h e ba s i c a s s umpt i o ns t ha t bl o c k c i ph e r i s ps e u do — r a n do m p e r mu t a t i on a nd t h e c o mpr e s s i on f unc t i on u s e d by Ha s h f unc t i o n i S a ps e ud o — r a nd o m o ne, whi c h u s e s t he s h a r e d r a n do m mo de 1 . Al s o, r e a l i z a t i o n o f H BM AC a nd H M AC a l g o r i t hm i s i nt r od uc e d . Thi s p a pe r a n a l ys e s t he q u a l i t y a nd e f f i c i e nc y o f
密(研)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函数。
第17讲 Hash 函数.
Hash函数的安全性
生日攻击法
分别把消息m和M表示成r和R个变形的消息
Hash函数的安全性
生日攻击法
计算真消息m的变形与假消息M的变形发生碰撞的 概率 由于n比特长的散列值共有2n个,所以对于给定m 的变形mi和M的变形Mj,mi与Mj不碰撞的概率是 1-1/2n。由于M共有R个变形,所以M的全部变形 都不与mi碰撞的概率是:
1 2 k 1 1 1 ...1 . 365 365 365
k人中至少有2人生日相同的概率为: 1 2 k 1 P(365, k ) 1 1 1 ...1 . 365 365 365
有P(365,23)=0.5073。即在23个人中,至少有两 个人生日相同的概率大于0.5,这个数字比人们 直观猜测的结果小得多,因而称为生日悖论。
Hash函数的安全性
生日攻击法 生日悖论原理可以用于构造对Hash函数 的攻击
设Hash函数值有n个比特,m是真消息,M 是伪造的假消息,分别把消息m和M表示成r 和R个变形的消息。消息与其变形消息具有 不同的形式,但有相同的含义。将消息表示 成变形消息的方法很多,例如增加空格、使 用缩写、使用意义相同的单词、去掉不必要 的单词等。
第8章 Hash 函数
Hash函数定义
数据安全 机密性 完整性 认证性 密码技术主要保证数据的机密性 Hash函数能保证数据的完整性和认证性
Hash函数定义
Hash函数常用来构造数据的短“指纹”:消息的 发送者使用所有的消息产生一个附件也就是短 “指纹”,并将该短“指纹”与消息一起传输给 接收者。 即使数据存储在不安全的地方,接收者重新计算 数据的指纹,并验证指纹是否改变,就能够检测 数据的完整性。这是因为一旦数据在中途被破坏, 或改变,短指纹就不再正确。
信息安全概论第五章消息认证与数字签名
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
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
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)消息认证和保密性:与密文有关的认证
提供认证和保密性
hash函数进行消息认证的过程
HASH函数进行消息认证的过程一、概念解释我们需要了解什么是HASH函数。
HASH函数是一种对数据进行加密的方法,它通过将输入转换为固定长度的输出,在加密技术中有着重要的作用。
在消息认证中,HASH函数用于验证消息的完整性和真实性,因为它能够将一段消息转换成固定长度的HASH值,任何轻微的改动都会导致HASH值发生巨大变化,从而确保消息内容的完整性和不可篡改性。
二、消息认证的过程接下来,让我们来探讨HASH函数进行消息认证的过程。
在实际应用中,消息认证通常分为以下几个步骤:1. 发送方使用HASH函数对待发送的消息进行HASH运算,得到HASH值。
2. 发送方将消息和HASH值一起发送给接收方。
3. 接收方收到消息后,使用相同的HASH函数对收到的消息进行HASH运算,得到一个新的HASH值。
4. 接收方将计算得到的HASH值与接收到的HASH值进行比较,如果两者一致,则消息没有被篡改;否则,消息被篡改。
这一过程可以确保消息的完整性和真实性,因为只有发送方知道如何对消息进行HASH运算,并且HASH值是通过特定的算法计算得到的,接收方也能通过相同的算法验证消息的完整性和真实性。
三、个人观点和理解在我看来,HASH函数进行消息认证的过程非常重要,特别是在网络通信安全领域。
通过HASH函数,我们可以确保消息在传输过程中不会被篡改,保护通信的安全性。
HASH函数也广泛应用于数字签名、密码学等领域,具有非常重要的意义。
了解HASH函数进行消息认证的过程对于我们拓展知识面、提高信息安全意识具有重要意义。
总结回顾通过本文的介绍,我们了解了HASH函数进行消息认证的过程及其重要性。
消息认证通过HASH函数可以确保消息的完整性和真实性,在信息安全领域有着重要的应用。
我们也对HASH函数的概念和消息认证的过程有了更深入的理解,这对我们在实际应用中能更好地运用HASH函数进行消息认证具有重要帮助。
在实际撰写过程中,我们应该遵循从简到繁、由浅入深的方式来探讨主题,同时也要兼顾总结和回顾性的内容,以便读者能全面、深刻和灵活地理解主题。
消息认证(Message Authentication)
的功能
– 电子商务上的应用,如电子付款、电子投票
消息认证的功能(目的)
-验证信息来源的真实性,即信源识别 -验证信息内容的完整性,保证消息不被篡改
如何实现消息认证
• 消息认证码(Message Authentication Code)
• 发送方用双方都知道的密钥计算出
MAC值,并连同消息送給接收方
• Hash Message Authentication Code (HMAC)
– RFC 2104 标准 – 可嵌入多种杂凑函数算法:MD4、MD5 与 SHA-1
– 加入『秘密密钥』
发送方 M 消 息 M MAC 杂凑 算法 密钥 K MAC 接收方 M
HMAC 算法
消 息
HMAC 算法 杂凑 算法
一、Hash 函数(One-way Hash Function)
• 把任意长的消息“压缩”成固定长的消息的算 法 • 数字签名时,常被使用 • 通常,HASH 函数是公开的 • 输出长度应足够大,防止生日攻击 • 64-bits 认为太小 • 通常 128~512bits
1. Hash函数的概念
=
?
密钥 K
HMAC 算法
HMAC 结构
HMACK(M) = H [(K+ ⊕ opad) || H [(K+ ⊕ ipad) || M]]
• 密钥 K 以 0 填满 b bits产生K+ • ipad:將 00110110 重复 b/8 次 • opad:將 01011100重复 b/8 次
K+
如何实现消息认证
•MAC-BCB-AES算法
方法:
1. 消息认证码(Message Authentication Code, MAC)
消息认证技术
第4章 消息认证技术
图 4-1-1 消息完整性检验的一般机制
第4章 消息认证技术
4.2 消 息 认 证 码
在4.1节中我们简单介绍了消息的完整性检验,这只能检 验消息是否是完整的,不能说明消息是否是伪造的。因为, 一个伪造的消息与其对应的数字指纹也是匹配的。消息认证 具有两层含义: 一是检验消息的来源是真实的,即对消息的 发送者的身份进行认证; 二是检验消息是完整的,即验证消 息在传送或存储过程中未被篡改、删除或插入等。
第4章 消息认证技术
一个例外的情况是,若消息出错,而摘要值仍然不变的 概率为2-n。当n充分大时,出错的概率或者说消息被篡改的
第4章 消息认证技术
4.1.2
消息完整性检验的一般机制如图4-1-1所示。无论是存储 文件还是传输文件,都需要同时存储或发送该文件的数字指 纹; 验证时,对于实际得到的文件重新产生其数字指纹,再 与原数字指纹进行对比,如果一致,则说明文件是完整的, 否则,是不完整的。
(1) 接收方确信消息M (2) 接收方确信消息来自所声称的发送者,因为没有其 他人知道这个共享密钥,所以其他人也就不可能为消息M附 加合适的MAC
第4章 消息认证技术
2. 在消息认证中,消息以明文方式传送,这一过程只提供 认证而不具备保密性。如图4-2-2所示提供了一种既加密又认 证的方式,发送方发送EK2(M)‖CK1(M)。 该种处理方式除具备息认证的功能外,还具有保密性。
评价Hash函数的一个最好的方法是看攻击者找到一对碰 撞消息所花的代价有多大。一般地,假设攻击者知道Hash函 数,攻击者的主要目标是找到一对或更多对碰撞消息。 目前已有一些攻击Hash函数的方案和计算碰撞消息的方法, 这些方法中的生日攻击方法可用于攻击任何类型的Hash函数
hash函数的主要应用
hash函数的主要应用哈希函数(Hash Function)是一种将任意长度的输入数据映射为固定长度的输出数据的数学函数。
它能够为输入数据生成唯一、固定长度的输出,通常称为哈希值、散列值或摘要。
哈希函数的主要应用包括密码学、数据完整性验证、数据查找和分布式系统等领域。
密码学应用:哈希函数在密码学中广泛应用于密码存储和验证、数字签名、消息认证码等方面。
一种常见的应用是将用户密码的哈希值存储在数据库中,而不是明文密码。
这样即使数据库遭到非法获取,也无法直接获悉用户的密码。
在用户验证过程中,输入的密码与数据库中存储的密码哈希值进行比较,从而验证用户身份。
数据完整性验证:哈希函数在数据完整性验证中扮演重要角色。
通过将文件、文档或消息的哈希值与事先计算得到的哈希值进行比对,我们能够快速检测出任何篡改、修改或数据损坏的情况。
常见的应用包括文件传输时对文件的哈希校验,确保文件在传输过程中没有被篡改;还有数字证书中对公钥进行哈希计算,以提供公钥的完整性验证。
数据查找:哈希函数常被用来加速数据查找的过程。
在哈希表(Hash Table)中,根据键值通过哈希函数计算得到对应的索引位置,从而可以快速地找到对应的数据。
哈希函数将键值映射到一个唯一的哈希码,通过哈希码即可在常数时间内找到存储在哈希表中的数据。
哈希表的应用包括缓存系统、数据库索引和字典等。
分布式系统:在分布式系统中,哈希函数常被用于数据的分布和负载均衡。
通过将数据的关键信息进行哈希计算,将其映射到不同的节点或服务器上进行存储。
这样可以确保数据的均匀分布在整个系统中,避免负载不均衡情况的发生。
哈希函数的应用还包括一致性哈希算法,用于解决节点的动态增减和数据重新分布的问题。
网络安全:哈希函数在网络安全领域也有重要应用,如网络数据包的分析、防火墙和入侵检测系统。
哈希函数可以用来快速计算数据包的哈希值,从而可以实现对网络流量的监控和分析,以检测异常流量和攻击。
此外,哈希函数还能用来加密数据,确保数据在网络传输过程中的保密性和完整性。
带密钥的hash函数
带密钥的hash函数一、概述在计算机领域,Hash函数是一种将任意长度的消息压缩到固定长度输出的函数。
Hash函数被广泛应用于密码学、数据完整性校验、唯一标识符等领域。
但是,传统的Hash函数存在着被暴力破解的风险,为了增强其安全性,人们提出了带密钥的Hash函数。
本文将详细介绍带密钥的Hash函数的实现方法及其应用场景。
二、带密钥的Hash函数实现方法带密钥的Hash函数通常采用加密算法来实现。
下面介绍两种常见的加密算法实现方式:1. HMACHMAC(Hash-based Message Authentication Code)是一种基于Hash函数和密钥生成消息认证码的算法。
HMAC可以使用多种Hash 函数(如MD5、SHA-1等),并且具有高度安全性和灵活性。
HMAC算法可以分为以下几个步骤:(1)选择一个合适的Hash函数,如MD5或SHA-1。
(2)对密钥进行处理,如果密钥长度超过了Hash函数输入长度,则先对密钥进行Hash处理。
(3)对消息进行填充,使其长度满足要求。
(4)将填充后的消息与处理后的密钥进行异或运算。
(5)将异或运算结果再次进行Hash处理,得到最终的消息认证码。
HMAC算法可以保证消息的完整性和真实性,并且具有高度的安全性。
2. CMACCMAC(Cipher-based Message Authentication Code)是一种基于对称加密算法生成消息认证码的算法。
CMAC可以使用多种对称加密算法(如AES、DES等),并且具有高度安全性和灵活性。
CMAC算法可以分为以下几个步骤:(1)选择一个合适的对称加密算法,如AES或DES。
(2)对密钥进行处理,如果密钥长度超过了加密算法输入长度,则先对密钥进行Hash处理。
(3)将消息分组,并对每个分组进行填充,使其长度满足要求。
(4)将填充后的消息与处理后的密钥进行加密运算。
(5)将加密运算结果再次进行加密运算,得到最终的消息认证码。
认证、哈希算法PPT课件
T[64] = EB86D391
16 MD5算法描述(Cont.)
• 步骤5:输出结果。所有L个512位数据块处理完毕后,最后的结果 就是128位消息摘要。
CV0 = IV CVq+1 = SUM32(CVq,RFI[Yq,RFH[Yq,RFG[Yq,RFF[Yq,CVq]]]]) MD = CVL
其中:IV = ABCD的初始值(见步骤3) Yq = 消息的第q个512位数据块 L = 消息中数据块数; CVq = 链接变量,用于第q个数据块的处理 RFx = 使用基本逻辑函数x的一轮功能函数。 MD = 最终消息摘要结果 SUM32=分别按32位字计算的模232加法结果。
Yq
512
CVq 128
字
T[i] = 表T中的第i个32位字;
+
= 模 232的加;
ABCD
基本MD5操作(单步)
+
g
X[k] +
T[i] +
CLSs
Function g g(b,c,d) 1 F(b,c,d) (bc)(bd) 2 G(b,c,d) (bd)(cd) 3 H(b,c,d) bcd 4 I(b,c,d) c(bd)
实现都实际可行; – 对任意给定的码h, 寻求x使得H(x)=h在计算上是不
可行的(单向性); – 任意给定分组x, 寻求不等于x的y, 使得H(y)= H(x)
在计算上不可行(弱抗攻击性); – 寻求对任何的(x,y)对使得H(x)=H(y)在计算上不可
行(强抗攻击性);
7 Hash 函数设计原理
• 步骤2: 添加长度。原始消息长度(二进制位的个数 ),用64位表示。
表示为L个512位的数据块:Y0,Y1,…,YL-1。其长度为 L512bits。令N=L16,则长度
第21讲 Hash函数
主要内容
Hash函数简介 Hash函数的性质 Hash算法实现
Hash函数的性质
0 1 2 3 4 5 6 7 8 9 常规Hash函数
“dog”
“neanderthal”
“horse”
H(char s[ ]) = (s[0] – ‘a’) mod 10
Hash表
Hash函数的性质
密码学上的Hash函数应该具有什么样的性质?
M
H
Ek
Ek(m||H(M))
Dk
M
H(M)
H
比较
Alice
Bob
Hash函数简介
Hash 函数与消息认证
UNIX把密码存放在文件: /etc/passwd/etc/passwd 可被任何人访问
但是,这些密码不是密码本身! 它们仅是密码的Hash值,强力攻击可以重新生成这
样一个密码文本。为了提高其安全性,UNIX在计算 Hash值前先对每个密钥添加了一个随机数(salt)
MD5算法——迭代压缩函数 1. MD5算法的分组处理与分组密码相似; 2. 它由4轮组成,每轮包括16个步骤。 3. 512比特的消息分组Mi被分为16个子分组(每个子分 组为32比特)参与每轮16步函数运算, 4. 每步的输入是4个32比特的链接量和一个32比特的消息 分组,输出为32比特值; 5. 经过4轮共64步后,得到的4个寄存器值分别与输入链
CV1
HMD5
HMD5
CVq
CVN-1
HMD5
CVN
128-bit散列值
Hash算法实现
MD5算法——消息填充
1. 填充“1”和若干“0”使其长度模512与448同余;
2. 然后再将消息的真实长度以64比特表示附加在填充 的后面,从而使得消息的长度恰好为512比特的整 数倍。x||1||0d||L
消息认证码算法范文
消息认证码算法范文消息认证码(Message Authentication Code,MAC)是一种用于验证消息完整性和真实性的算法。
它使用一个密钥来计算一个固定长度的摘要,这个摘要可以用于验证消息是否被篡改过。
本文将介绍一些常用的消息认证码算法。
1.哈希函数哈希函数是一种将任意长度的输入映射成固定长度输出的函数。
常用的哈希函数有MD5、SHA-1、SHA-256等。
使用哈希函数作为消息认证码算法时,只需将消息与密钥一起输入哈希函数计算摘要,然后将摘要附加在消息末尾一起发送。
接收方通过相同的密钥和哈希函数计算摘要,并将计算得到的摘要与接收到的摘要进行比较,若一致则消息未被篡改。
2. HMAC(Hash-based Message Authentication Code)HMAC是基于哈希函数的消息认证码算法。
它通过使用两个不同的密钥对消息进行两次哈希计算,从而提高了消息认证的安全性。
具体的计算过程为,先将密钥进行hash补位得到两个长度相同的密钥K1和K2,然后将消息与K1进行hash计算得到中间结果,最后将中间结果与K2进行hash计算得到最终的摘要。
3. CMAC(Cipher-based Message Authentication Code)CMAC是基于对称加密算法的消息认证码算法。
它使用一个密钥和一个分组密码算法(如AES)来计算摘要。
具体的计算过程为将消息按照分组长度划分成若干分组,然后将第一个分组与密钥进行异或运算得到中间结果,接着将中间结果与后续的每个分组进行分组密码算法的加密操作,最后返回最后一个分组的结果作为摘要。
4. GMAC(Galois Message Authentication Code)总结:消息认证码算法是一种用于验证消息完整性和真实性的重要技术。
本文介绍了一些常用的消息认证码算法,包括哈希函数、HMAC、CMAC和GMAC。
不同的算法在实现细节和安全性上有所差异,选用合适的算法需要根据具体的应用场景和安全需求。
消息认证和散列(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函数。
第11章 hash函数
13
hash函数应用 (1)消息认证
A B:E k [M H(M)] 提供鉴别 -加密保护H(M) 提供保密 -仅A和B共享密钥k
A B:M E k [H(M)] 提供鉴别 -加密保护H(M)
A B: M H(M S)]] 提供鉴别 -仅A和B共享消息S
其他应用
产生单向口令文件:
如操作系统存储口令的Hash值而不是口令本 身。 入侵检测和病毒检测: 将每个文件的Hash值H(F)存储在安全系统中, 随后就能够通过重新计算H(F)来判断文件是 否被修改过。
构建随机函数(PRF)或用做伪随机发生器。
(2)hash定义
散列函数
H(M): 输入为任意长度的消息M; 输出为一个固定长
固定长度的值作为认证标识
散列函数:一个公开函数将任意长度的消息映
射到一个固定长度的哈希值,作为认证标识
对称加密
A B
A与B共享密钥k A : Ek ( M ) B B : Dk ( M ),查看M 是否为有意义的明文
哈希函数的应用
消息认证 数字签名
口令保护、文件完整性等
2017/7/10
鉴别和认证
鉴别:authentication 认证:Certification
真伪性
(1) 用来验证发送的数据,特别是一个信息的完整性的过程 (2) 在用户开始使用系统时对其身份进行的确认 计算安全学用语,指为了鉴定一个计算机系统或网络的设计 和它提供的手段在多大程度上能满足预定的安全要求而进 行的技术评估
2017/7/10 25
散列函数应满足的条件:
散列函数的目的是为需认证的数据产生一个“指 纹”。为了能够实现对数据的认证,散列函数应满 足以下条件: 1)函数的输入可以是任意长。 2)压缩性:函数的输出是固定长,如MD5输出128bit, SHA-1输出160 bit。具有压缩性。 3)已知X,求H(x)较为容易,可用硬件或软件实现。 4)抗原像攻击(单向性):已知h,求使得H(x)=h的 x在计算上是不可行的,这一性质称为函数的单向性, 称H(x)为单向散列函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
应用
由于加密软件慢、硬件费用高、加密算法专利保护 和出口限制等因素, 人们倾向于不使用带有加密的认 证方法,愿意使用方法(3)。 数据源认证方案不能提供数据源的不可拒绝性,因 为任何一方都可以使用共享密钥创建一个消息及其 认证。如果需要解决这种潜在的争执,可以使用可 信第三方或公钥技术。 使用MAC能够确定数据是在过去某个时间由特定一 方生成的,但是不能提供唯一性和时间上的保证, 也不能发现消息是否重用或重发。为了解决这些问 题,必须使用随时间变化的参数,例如时间戳、序 列号和随机数等。
击者也能计算压缩函数的输出。 (2) 即使IV是随机的和秘密的,攻击者也能找到Hash函数的碰 撞。
在目前的计算水平下,使用MD5和SHA-1等作为HMAC 算法所嵌入的Hash函数,HMAC的安全性是可以保证的。
10
3 应用
数据完整性 数据完整性是指数据在生成、传送或存储过程中没有 被非法篡改. 使用Hash函数可以保证数据的完整性 使用MAC
MD5-MAC软件实现比较容易,其运算速度与MD5 大体相近 .
5
2
HMAC算法
消息认证码HMAC(keyed-hashing for message authentication code)是Bellare等人于1996年提出, 1997年作为RFC 2104发表,成为事实上的Internet 标准,包括IPSec协议在内的一些安全协议都使用 了HMAC算法。 HMAC算法利用已有的Hash函数,关键问题是如何 使用密钥。使用不同的Hash函数,就可以得到不同 的HMAC。选用MD5时的HMAC记为HMAC-MD5, 选用SHA-1时的HMAC记为HMAC-SHA1。
发送方 A x hK’ x1 || EK C DK x 接收方B hK’
比较
x1
13
3
应用
实现数据源认证 数据源认证也称为消息认证,它是要求证实一个实体在 过去某个时刻建立的数据源.数据源认证也包括数据完 整性.提供数据源认证的方法有:
(1) 使用消息认证码MAC; (2) 对附加上散列值的消息进行加密.
MD5-MAC算法使用96字节的常数
T0 97 ef 45ac 290f 43cd 457e1 b 551c 801134, T1 b177ce 962e 728e 7 c 5 f 5 aab 0 a 3643be 18, T2 9 d 21b 421bc 87 b 94 da 29 d 27 bdc 75 bd 7 c 3. U i Ti || Ti 1 || Ti 2 || Ti || Ti 1 || Ti 2 (0 i 2).
把K0,K1分成4个32位的子串Kj[i](j=0,1, i=0,1,2,3) 对MD5进行修改:用K0代替MD5的4个32位寄存器ABCD. 把K1[i]与MD5第i +1遍中每个常数232sin(j)进行模232加法. 将512位的分组 K 2 || K 2 T0 || K 2 T1 || K 2 T2 链接到消息x右边,再按MD5的要求进行填充. 将上一步的结果输入到修改后的MD5中,取其输出的前 一半(64位)作为消息x的消息认证码MD5-MAC (x).
发送方 A x hK x1 || x C x1 接收方B hK
比较 11
3
使用Hash函数和加密
应用
设A与B共享分组密码的密钥K,EK是加密算法,h是公开的 Hash函数. 用户A计算C=EK(x||h(x)),并将数据C发送给B.B利 用密钥K进行解密,得到x’和h(x),然后计算h(x’),并与接 收到的h(x)相比较.如果h(x’)=h(x),则B确定消息x’是真实 的.由于这里对h(x)进行了加密,所以对Hash函数h的要求可以 适当降低.
其中下标加法运算是模3相加. 如果密钥K的长度小于128位,则通过多次自行链接,最 后截取左边128位作为以下算法中使用的密钥K。
4
1 消息认证码
将密钥K扩展成3个16字节的子密钥K0,K1,K2,其中
K i MD5( K || U i || K ) (0 i 2). 其中MD5表示不进行填充的MD5.
6
2
HMAC算法
HMAC算法描述 设HMAC使用的Hash函数为h,每次处理的输入分 组长度为b比特(使用MD5与SHA-1时,b=512), 最后的输出长度为l比特(使用MD5时,l=128;使 用SHA-1时,l=160)。如果HMAC的输入消息为x, 则x=x1 x2…xL,其中每一个分组xi(1≤i≤L)的长度 为b比特。 令HMAC使用的密钥为K,密钥K可以是任意的、 长度不超过b比特的比特串(HMAC算法推荐密钥 最小长度为l比特)。当密钥K的长度超过b比特时, 使用Hash函数h对K进行压缩,把K作为h的输入, 并将输出的l比特作为密钥K。
希望不对广告内容加密,但又希望其它公司不能修改广告内容或 冒充公司A发布同样的广告,或者当广告内容被修改后能够发现. 如果使用不带密钥的Hash函数,由于其它公司可能在修改广告 内容后产生新的散列值,从而使A无法确认原广告是否被修改.
设计MAC算法的要求 在不知道密钥的情况下,难以找到两个不同的消息具有相 同的输出。
设用户A将消息x发送给接收者B,A与B共享秘密的MAC密 钥K,hK是MAC。用户A计算x的MAC hK(x),将数据 C=x||hK(x)发送给B。B通过其它方法确定用户A的身份,分 开接收到的数据x’,使用共享密钥K计算hK(x’),并与接 收到的hK(x)相比较。如果hK(x’)=hK(x),则B确定消息x’ 是来自于具有密钥K的用户A,在传输过程中未被篡改。
发送方 A x h x1 || EK C DK x 接收方B h
比较
x1
12
3
加密使用MAC和加密
应用
设A与B共享分组密码的密钥K和MAC的密钥K’,EK是加密 算法,hK’是MAC。用户A计算C=EK(x|| hK’(x)),并将数据C发 送给B. B利用密钥K进行解密, 得到x’和hK’(x),然后计算 hK’(x’), 并与接收到的hK’(x)相比较. 如果hK’(x’)=hK’(x), 则B确定消息x’是真实的.该技术的优点是即使加密算法被 攻破, MAC仍然能提供完整性保护作用. 其缺点是需要管理 K和K’两个密钥.
哈希函数——消息认证
认证(authentication)是防止网络系统遭受主动攻击 的重要技术 认证的主要目的有两个 第一,验证消息的发送者是真的,而不是冒充的, 称为实体认证,包括信源、信宿等的认证和识别。 第二,验证信息的完整性,即验证数据在传送或存 储过程中未被篡改、重放或延迟,称为消息认证。
9
2
HMAC的安全性
HMAC算法
建立在嵌入Hash函数基础上的所有MAC,其安全性在某种 程度上都依赖于该Hash函数的强度。对于HMAC,可以给出 HMAC的强度与所嵌入Hash函数强度之间的关系。 根据伪造者在给定时间内伪造成功和用相同密钥产生给定数 量的消息-MAC对的概率,可以用于描述MAC的安全性。 Bellare等人(1996年)已经证明,如果攻击者已知若干(时 间、消息-MAC)对,则成功攻击HMAC的概率等价于对所 嵌入Hash函数的下列攻击之一: (1)即使对于攻击者而言,IV是随机的、秘密的和未知的,攻
设用户A将消息x发送给接收者B,A与B共享密钥K,则用户 A向B发送以下数据可实现数据源的认证.
(1) EK(x||h(x)): 提供保密(仅双方共享K)和认证(加密保护散 列值); (2) x||EK(h(x)): 提供认证(加密保护散列值); (3) x||h(x||S):提供认证(仅双方共享随机数S); (4)EK(x||h(x||S)):提供保密和认证(仅双方共享K、S)。
2
1 消息认证码
基于分组密码CBC工作模式构造MAC 基于分组密码CBC工作模式构造MAC算法已经成为 ISO/IEC 9797 标准,它使用密文链接和双密钥三重 加密技术。 设EK表示以K为密钥的加密算法,设K’是一个与K 不同的密钥,消息分组长度为n。 首先把消息x分成L个n位块 x=x1 x2…xL, 计算: H1 EK ( x1 ),
H i EK ( H i 1 xi ) (2 i L),
1 hK ( x) EK ( EK , ( H L )).
hK是一个n位MAC. 记为CBC-MAC.
3
1 消息认证码
基于Hash函数构造MAC 设h是一个(不带密钥)Hash函数,K是密钥,x是 消息,则定义消息认证码hK如下: hK ( x) h( K || x). 基于MD5算法直接构造消息认证码MD5-MAC
15
ቤተ መጻሕፍቲ ባይዱ
1
1 消息认证码
带密钥的Hash函数称为消息认证码(MAC:message authentication code). 消息认证码是实现消息认证的重要工具. MAC有两个不同的输入,一个是消息x,另一个是密钥K . MAC产生定长的输出. 实例: 某一个大公司A想给它的客户发布一个新产品的广告,A
7
2
HMAC算法的流 程图
HMAC算法
K
ipad
Si
x1
x2
…
xL
K
opad
Hash函数h
So
h(Si|| x)
Hash函数h
HMAC(x)
8
2
HMAC算法
HMAC算法具体执行步骤
(1)如果密钥K的长度小于b 比特,则在其右边填充一些 “0”,使其成为长度为b比特的比特串,仍记为K。 (2)计算Si=Kipad,其中ipad是HMAC算法中规定的一个 长度为b比特的比特模式串,它等于将00110110重复b/8次 后得到的比特串。 (3)把HMAC的输入消息x=x1 x2…xL附加在Si的右端,得到 Si||x =Si||x1x2…xL,将该比特串作为Hash函数h的输入,得 到l比特的输出h(Si||x)。 (4)计算So=Kopad,其中opad是HMAC算法中规定的另 一个长度为b比特的比特模式串,它等于将01011010重复 b/8次后得到的比特串。 (5)将第(3)步得到的h(Si||x)附加在So的右端,并以该比特串 作为Hash函数h的输入,得到l比特的输出。 (6) 将第(5) 步的输出作为HMAC算法的最终输出结果,即 消息x的消息认证码HMAC(x)。