您现在的位置是:首页 > 技术笔记 > 密码学密码学

消息认证码

冰山2019-03-07【密码学】人已围观

简介1.消息认证码
1.1 什么是消息认证码
1.2 消息认证码的使用步骤
1.3 HMAC
1.3.1 HMAC介绍
1.3.2 Go中对HMAC的使用
1.4 消息认证码的密钥配送问题
1.5 消息认证码无法解决的问题
1.6 对第三方证明
1.7 防止否认
1.8总结

1.消息认证码

 

1.1 什么是消息认证码

 
像之前一样,我们还是从一个Alice和Bob的故事开始讲起,不过,这一次Alice和Bob分别是两家银行,Alice银行通过网络向Bob银行发送了一条汇款请求,Bob银行收到的请求内容是:
 
               从账户A-7465向账户B-3746汇款1000万元
 
当然,Bob银行所收到的汇款请求内容必须与Alice银行所发送的内容是完全一致的。如果主动攻击者Mallory在中途将Alice银行发送的汇款请求进行了篡改,那么Bob银行就必须要能够识别出这种篡改,否则如果Mallory将收款账户改成了自己的账户,那么1000万元就会被盗走。
 
话说回来,这条汇款请求到底是不是Alice银行发送的呢?有可能Alice银行根本就没有发送过汇款请求,而是由主动攻击者Mallory伪装成Alice银行发送的。如果汇款请求不是来自Alice银行,那么就绝对不能执行汇款。
 
现在我们需要关注的问题是汇款请求(消息)的 “完整性" 和 “认证" 这两个性质。
 
消息的完整性(integrity), 指的是“消息没有被篡改"这一性质,完整性也叫一致性。如果能够确认汇款请求的内容与Alice银行所发出的内容完全一致,就相当于是确认了消息的完整性,也就意味着消息没有被篡改。
 
消息的认证(authentication)指的是“消息来自正确的发送者"这一性质。如果能够确认汇款请求确实来自Alice银行,就相当于对消息进行了认证,也就意味着消息不是其他人伪装成发送者所发出的。

通过使用消息认证码,我们就可以同时识别出篡改和伪装,也就是既可以确认消息的完整性,也可以进行认证。
 
 
消息认证码(message authentication code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC


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


根据任意长度的消息输出固定长度的数据,这一点和单向散列函数很类似。但是单向散列函数中计算散列值时不需要密钥,而消息认证码中则需要使用发送者与接收者之间共享的密钥。


要计算MAC必须持有共享密钥,没有共享密钥的人就无法计算MAC值,消息认证码正是利用这一性质来完成认证的。此外,和单向散列函数的散列值一样,哪怕消息中发生1比特的变化,MAC值也会产生变化,消息认证码正是利用这一性质来确认完整性的。

 

单向散列函数与消息认证码的比较





 

1.2 消息认证码的使用步骤


我们以上面所说的Alice银行和Bob银行的故事为例,来讲解一下消息认证码的使用步骤:




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

2)发送者Alice根据汇款请求消息计算MAC值(使用共享密钥)。

3)发送者Alice将汇款请求消息和MAC值两者发送给接收者Bob。

4)接收者Bob根据接收到的汇款请求消息计算MAC值(使用共享密钥)。

5)接收者Bob将自己计算的MAC值与从Alice处收到的MAC值进行对比。

6)如果两个MAC值一致,则接收者Bob就可以断定汇款请求的确来自Alice(认证成功);如果不一致,则可以断定消息不是来自Alice(认证失败)。

 

1.3 HMAC

 

1.3.1 HMAC介绍


HMAC是一种使用单向散列函数来构造消息认证码的方法(RFC2104),其中HMAC的H就是Hash的意思。

HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HMAC,如果将来设计出新的单向散列函数,也同样可以使用。使用SHA-I、MD5、RIPEMD-160所构造的HMAC,分别称为HMAC-SHA-1、HMAC-MD5和HMAC-RlPEMD,使用HMAC通过秘钥将消息生成消息认证码的内部实现




通过上述流程我们可以看出,最后得到的MAC值,一定是一个和输入的消息以及密钥都相关的长度固定的比特序列,我们就可以这样理解"消息认证码 --- 消息被正确传送了吗?"。

 1/3    1 2 3 下一页 尾页

  • 微信扫一扫~
  • 支付宝扫一扫~

很赞哦! ()

上一篇:单向散列函数

下一篇:数字签名

文章评论

本站推荐