《程序员密码学》之消息认证码算法

来源:互联网 发布:app用户行为数据采集 编辑:程序博客网 时间:2024/05/19 17:50

消息认证码(MAC)算法是许多在线协议中相当关键的一个组件。它用来保证交易的双方或多方之间消息的认证。

 

MAC算法的行为有点像散列哈数,它在一个不固定输入大小的基础上执行映射,并产生一个固定大小的输出,但散列和MAC不能互换,散列是一个基于离线环境下具有高强度的安全性的算法,就是说在离线环境下攻击者可以提前对不同消息进行预计算产生一个足够大的表来进行查找。而MAC是基于在线环境的,攻击者不能通过预计算攻击因为MAC中通信双方共享了一个密钥,这个密钥被混入状态,攻击者要进行攻击必须让受害者参加进来给出一些消息或者除非MAC本身被攻破。

带固定秘钥的MAC作为一个散列函数来使用是不安全,散列作为一个MAC去使用也是不安全的(一般情况下)

 

MAC的目标是保证共享一个密钥的双方或多方在通信时能够具有检测传输的消息是否被修改的能力。

MAC算法运作过程:

消息发送者使用一个共享密钥和要发送的消息经过MAC算法转换成一个tag(标记),然后将消息明文和标记发送给接收者,接收者使用共享的密钥再次使用MAC计算消息获得一个标记,根据这个计算的标记和发送者发送来的标记比对来确定消息是否被篡改。

 

其中有2种消息认证码分别为:分组消息认证码(CMAC)      散列消息认证码(HMAC)、

CMAC:

即CBC-MAC

首先用分组密码对消息进行加密,然后使用一个单独的秘钥以CBC模式对密文继续加密最终生成标记

然后有各种更改对CMAC的加强(例如根据最后一组分组是否填充的情况使用不同别的密钥进行加密)

 

HMAC:

即HASH-MAC

首先使用一个内散列对消息进行散列(内散列,隐藏内部状态),然后在结果前拼接密钥,再次进行散列(外散列),最终生成标记