消息认证码——消息被正确传送了吗?

一. 消息认证码(MAC):

完整性(消息没有被篡改)认证(消息来自正确的发送者)不能保证机密性
输入:任意长度的消息/发送者和接收者之间共享的密钥
输出:固定长度的长度(MAC值
消息认证码是一种与密钥相关联的单向散列函数,没有共享密钥的人就无法计算MAC值,哪怕消息中的1bit发生变换,MAC值也会发生变换。
在这里插入图片描述

二. 应用实例

  1. SWIFT环球银行金融电信协会
  2. IPsec
  3. SSL/TLS

三. 实现方式

1.使用单向散列函数 SHA-1,MD5

2.使用分组密码
(1)加密装置的沟通
对于分组密码,当收发双方共享的会话密钥一次一变时,发方可以利用该密钥对全0明文分组加密,并将所得到的密文结果传给收方,收方将收到的该密文与他对0明文分组加密的结果比较,若相同,则相信双方所共享的会话密钥是一致的,从而实现了共享密钥的完整性认证;当会话密钥在若干时间内固定不变时,在该密钥的生存期内,发方每次可产生一个随时间变化的明文分组对该明文分组加密,并将明文和密文传给收方,收方对收到的明文利用共享密钥加密,所得密文与收到的明文比较,从而实现共享密钥的完整性认证。
(2)CBC模式实现消息完整性认证技术
一般来说利用分组密码算法实现消息完整性的前提和方法包括以下内容
1.文件的制造者和检验者共享一个密钥
2.文件的明文必须具有校验者预先知道的冗余度
3.文件的制造者用共享密钥对具有约定冗余度的明文用适当的方式加密
4.文件的检验者用其共享密钥对密文脱密,并检验约定冗余度是否正确
分组密码的密钥作为消息认证码的共享密钥来使用,并用CBC模式将消息全部加密。由于不需要解密,因此将除最后一个分组以外的密文部分全部丢弃,而将最后一个分组用作MAC值。(CBC模式的最后一个分组会受到整个消息以及密钥的双重影响)

3.使用公钥密码
利用公钥密码体制实现消息的完整性认证是信息系统中最常用的手段之一,它通常通过消息的产生者对消息的杂凑值进行数字签名的方法实现,与基于对称密码体制实现的消息认证技术和HMAC相比具有以下优势
(1)在保证消息产生者的公钥真实性和有效性的前提下,可以实现消息的公开验证性
(2)由于消息产生者私钥的私有性,可以有效地防止消息产生者的抵赖和任何他人的伪造
(3)在消息的产生者和验证者之间出现争议时,可以由第三方进行仲裁
1.公钥密码体制实现的消息认证
消息的产生者首先计算出消息的散列值,然后利用自己的私钥对散列值进行数字签名,然后将消息和签名存储或者发送给收方。验证者想要验证消息的完整性,就要将自己计算产生的消息的杂凑值和利用消息的产生者的公钥对消息的签名进行加密得到的散列值进行比较。如果相同则验证者相信消息是完整的,即没有被修改过的。
2.数字信封
在保护电子邮件安全的PGP协议中
不但实现了消息的完整性,而且还实现了消息的机密性和真实性
在这里插入图片描述

4.使用序列密码

四. 对消息认证码的攻击

1.重放攻击
将实现保存好的正确的MAC值不断重放来发动攻击。
应对方法:
序号:约定每次都对发送的消息赋予一个递增的编号(序号),并在计算MAC值时将序号也包含在消息中。(缺点:对每一个通信对象都需要记录最后一个消息的序号)
时间戳:约定在发送消息时包含当前的时间,如果收到以前的消息,即便mac值正确也将其当作错误的来处理。(缺点:发送者和接收者的时钟必须一致,且要靠虑通信延迟,要在时间的判断上留下缓冲,留下了重放攻击的余地)
nonce:在通信之前,接收者先向发送者发送一个一次性的随机数,称为nonce。发送者在消息中包含nonce,并计算MAC值。(缺点:通信的数据量会增加)
2.密钥推测攻击
暴力破解/生日攻击

五. 消息认证码无法解决的问题

1.对第三方证明
数字签名可实现
2.防止否认
数字签名可实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值