赞
踩
消息的完整性指的是“消息没有被篡改”这一性质,这一性质也叫一致性。消息的认证指的是消息来自正确的发送者。消息认证码可以同时识别出消息的篡改和伪装,既能确定消息的完整性,也能对消息进行认证。消息认证码是一种确认完整性并进行认证的技术,简称MAC。消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值。要计算MAC值必须持有共享密钥,没有共享密钥的人就无法计算MAC值,消息验证码正是利用这一性质来完成认证的。我们可以暂且将“消息认证码”理解为是“一种特殊的与密钥相关的单项散列函数”。
假设以下情景中有发送者Alice和接收者Bob。
(1)发送者Alice和接收者Bob事先共享密钥;
(2)发送者Alice使用共享密钥根据消息计算MAC值;
(3)发送者Alice将消息和MAC值发送给接收者Bob;
(4)接收者Bob根据自己收到的消息计算MAC值,并将其与从Alice收到的MAC值进行对比;
(5)如果两个MAC值一致,Bob就可以确认刚才收到的消息来自Alice,认证成功,如果不一致,则认证失败,可判断消息不是来自于Alice。
在消息认证码中,发送者和接收者之间仍然需要共享密钥,这个密钥不能被主动攻击者Mallory获取,否则消息认证码将会被主动攻击者Mallory自由篡改和伪装,那么消息认证码就无法发挥作用。要解决密钥配送问题,就需要像对称密码那样只用一些共享密钥的方法,如公钥密码、Diffie-Hellman密钥交换、密钥分配中心等方法发送密钥。
(1)使用单项散列函数实现;
(2)使用分组密码实现;
将分组密码的密钥作为消息认证码来使用,并使用CBC模式将消息全部加密。此时的初始化向量是固定的,将除了最后一个分组以外的密文全部丢弃,并将最后一个分组的密文作为MAC值。
(3)使用流密码和公钥密码等实现消息认证码。
认证加密是一种将对称密码与消息认证码相结合,同时满足机密性、完整性和认证三大功能的机制。
HMAC是一种使用单项散列函数来构造消息认证码的方法。HMAC中使用的单项散列函数并不局限于一种,任何高强度的单项散列函数都可以被用于HMAC,如果将来设计出新的单项散列函数,也可以使用。HMAC计算MAC的步骤如下图所示。
(1)密钥填充
若密钥比单项散列函数的分组短,则需要在其末尾补0,使其长度达到单项散列函数的分组长度。若密钥比单项散列函数的分组长,则需要用单项散列函数求出密钥的散列值,然后将这个散列值用作HMAC的密钥。
(2)填充后的密钥与ipad的比特序列作XOR运算
ipad是将00110110这一比特序列不断循环反复直到达到分组长度所形成的比特序列。XOR运算得到的就是一个与单项散列函数分组长度相同且与密钥相关的比特序列,称为ipadkey。
(3)与消息组合
将ipadkey附加在消息开头。
(4)计算散列值
将(3)的结果输入单向散列函数,并计算出散列值。
(5)填充后的密钥与opad进行XOR运算
opad是将01101100这一比特序列不断循环反复直到达到分组长度所形成的比特序列。XOR运算得到的也是一个与单项散列函数分组长度相同且与密钥相关的比特序列,称为opadkey。
(6)与散列值组合
将(4)的散列值拼接在opadkey后面,
(7)计算散列值
将(6)的结果输入单向散列函数,并计算出散列值,这个散列值就是最终的MAC。
1.重放攻击
(1)什么是重放攻击
并没有破解消息验证码,只是将发送者的正确的MAC值保存下来重复利用的攻击方式称为重放攻击。
(2)抵御重放攻击的方法
①每次约定好一个递增的序号,计算MAC值的时候,将其包含在消息中;
②约定在发送消息时包含当前时间;
③在每次通信之前,先由接收者发送给发送者一个随机数nonce。
2.密钥推测攻击——暴力破解
1.对第三方证明
2.防止否认
听了消息认证码的介绍之后,Alice心想:"如果用对称密码将消息加密之后再发送的话,是不是就不需要消息认证码了呢?”Alice是这样考虑的:
(1)对称密码的密文只有使用和加密时相同的密钥才能正确解密;
(2)如果解密密钥和加密密钥不同,解密之后也只能得到“看上去随机的杂乱消息”;
(3)因此,只要解密之后得到的明文是正确的,就可以知道这条消息是由持有相同密钥的发送者加密的;
(4)也就是说,只用对称密码就可以实现和消息认证码相同的功能。 请问
Alice的想法正确吗?
我的回答:Alice的想法不正确,消息认证码具有认证功能,它可以对发送者的消息进行验证,并不局限于发送者发送的消息是能够理解的文字或有规律的信息。Alice的想法在消息为随机的比特序列时,则会失效。
下列说法中,请在正确的旁边画○,错误的旁边画×。
(1)使用消息认证码能够保证消息的机密性。
(2)使用消息认证码能够识别出篡改行为。
(3)使用消息认证码需要发送者和接收者之间共享的密钥。
(4)使用消息认证码能够防止否认。
我的回答:(1)×;(2)○;(3)○;(4)×;
(1)使用消息认证码不能够保证消息的机密性。
(4)使用消息认证码不能够防止否认。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。