认证篇——消息认证码

目录

一、消息认证码介绍

1)消息认证码的使用步骤:

2)消息认证码的密钥配送问题:

3)消息认证码的实例:

4)消息认证码的实现:

二、HMAC(可忽略)

三、对消息认证码的攻击

四、消息认证码无法解决的问题


一、消息认证码介绍

消息认证码(Message authentication code)是一种确认完整性并进行认证的一种技术,简称MAC

消息认证码在输入包括任意长度的消息和一个发送者与接收者之间的共享密钥后,输出固定长度的数据,该数据称为MAC值

 

1)消息认证码的使用步骤:

1)发送者与接收者事先共享密钥

2)发送者根据消息计算MAC值(使用共享密钥)

3)发送者将消息和MAC发送给接收者

4)接收者根据收到的消息计算MAC(使用共享密钥)

5)接收者将自己计算出的MAC与从发送者收到的MAC比对

6)如果MAC一致,接收者可以判定消息的确来自接收者(认证成功);如果不一致,可判断消息不是来自发送方(认证失败)
 

2)消息认证码的密钥配送问题

在认证过程中,需要发送者和接收者共享密钥,且密钥不能被获取;如果密钥落入第三方,第三方可以计算出MAC值,从而能轻易进行篡改和伪装攻击,使得消息认证码没有发挥作用

 

3)消息认证码的实例:

1)SWIFT(环球银行金融电信协会):银行与银行之间通过SWIFT来传递交易信息。为了对消息进行验证和确定消息完整性,SWIFT使用了消息认证码,并使用公钥密码进行密钥交换

2)IPsec:对互联网基本通信协议——IP协议增加安全性的方式之一。在IPsec中,对内容和完整性校验都采用消息认证码

3)SSL/TLS:自网上购物时,使用此类协议。对通信内容认证和完整性校验使用了消息认证码

 

4)消息认证码的实现:

1)使用单向散列函数实现(HMAC)

2)使用分组密码实现(将分组密码的密钥作为消息认证码的共享密钥来使用,并使用CBC模式进行加密)

3)使用流密码或公钥密码来实现

 

二、HMAC(可忽略)

HMAC:是一种使用单向散列函数来构造消息认证码的方法

HMAC的步骤:

1)密钥填充:当密钥短于单向散列函数的分组长度时,就在末尾填充0,直到与单向散列函数的分组成都相同为止;如果长于散列函数的分组时,就是用单向散列函数求出密钥的散列值,将这个散列值用作HMAC的密钥

2)将填充后的密钥与ipad进行XOR:ipad就是将00110110这一比特序列不断重复达到分组长度所形成的比特序列;进行XOR后,就是一个和单向散列函数的分组长度相同,并和密钥相关的比特序列(ipadkey)

3)和消息组合:将ipadkey附加在消息开头

4)计算散列值:将上一部的结果输入单向散列函数后计算散列值

5)将填充后的密钥与opad进行XOR:opad就是将01011100这一比特序列不断重复达到分组长度所形成的比特序列;进行XOR后,就是一个和单向散列函数的分组长度相同,并和密钥相关的比特序列(opadkey)

6)将散列值组合:将4)中计算出的散列值放到opadkey后

7)计算散列值:将6)输入单向散列函数计算散列值,该散列值就是MAC值

 

三、对消息认证码的攻击

1)重放攻击:把以前窃听到的数据原封不动地重新发送给接收方,主要用于身份认证过程,破坏认证的正确性

防御方法:

  • 序号:将每次发送的消息都赋予一个递增编号,并且在计算MAC值时将序号也包含在消息中,第三方无法计算出递增之后的MAC值;缺点:必须要记录每个通信对象的最后一个消息的序列号
  • 时间戳:在发送消息时,附带当前时间,即便收到过去的消息,MAC也能正确将其当作错误消息来处理;缺点:必须要求收发双方的时钟一致
  • nonce:接收者先向发送者发送一个一次性随机数(该随机数称为nonce),发送消息时将nonce包含在消息中计算MAC值,每次通信的nonce都会变化;缺点:通信时的数据量会增加

2)密钥推测攻击:消息认证码也可以使用暴力破解生日攻击,如果可以从MAC值反算出密钥,就可以进行篡改、伪装等攻击;所以对于密钥推测攻击来说,要保证不能根据MAC值推测出通信双方使用的密钥

 

四、消息认证码无法解决的问题

由于收发双方共享相同的密钥,因此无法解决以下问题:

1)对第三方证明

2)防止否认

 

 

 

  • 7
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值