【密码学原理】消息验证码MAC的构造方法:HMAC,DAA,CMAC

    科技2023-09-22  75

    HMAC

    RFC 2014给出了HMAC的设计目标:

    不必修改而直接使用现有的hash函数、如果找到或者需要更快或更安全的hash函数,应该很容易替代原来嵌入的hash函数应保持Hash函数原有性能,不能过分降低其性能对密钥的使用和处理应该比较简单如果已知嵌入的HAsh函数的强度,则完全可以知道认证机制抗密码分析的强度

    HMAC的总体结构如图所示

     

    更为有效的HMAC实现方式如图所示

    任何建立在嵌入Hash函数基础上的MAC,其安全性在某种程度上依赖于该Hash函数的强度。HMAC的好处在于,设计者可以证明嵌入Hash函数的强度与HMAC的强度之间的联系。能够成功攻击HMAC的概率等价于对嵌入Hash函数的攻击之一:

    对攻击者而言,即使IV是随机的,秘密的,未知的,攻击者也能计算压缩函数的输出即使IV是随机的秘密的,攻击者也能找到Hash函数中的碰撞

     

    基于分组密码的MAC:DAA(数据认证算法)和CMAC(基于密码的消息认证码)

    DAA是建立在DES上,使用广泛的MAC算法之一。但是发现这个算法存在安全弱点。

    DAA采用DES运算的CBC模式,初始向量为0,需要认证的数据分组。DAC可以是整个块,也可以是最左边m位,

    DDA算法在政府和工业界应用广泛,但是这种算法在合理的安全准则下使用的时候有一个限制:仅能处理固定长度为mn的消息,其中n是密文分组的长度,m是一个固定的正整数。Black和Rogaway证明了这种限制可以使用三个密钥来克服:一个密钥长度为K,用在密文分组链接的每一步,两个长度为n的密钥,其中k是密钥的长度,n是密文分组长度。后又优化了这个结构,使得两个n位的密钥可以从加密密钥导出,而不是单独提供,这种优化被NIST采用作为CMAC的运算模式。

    计算过程为

    如果消息不是密文分组长度的整数倍,最后分组的右边填充一个1和若干0使得最后的分组长度为b。

    认证加密:CCM和GCM

    认证加密(AE)是指在通信中同时提供保密性和认证的加密系统。四种同时提供认证和加密的通用方案:

    HtE:先Hash再加密,对M先用密码学Hash函数计算,然后将消息和Hash值一起加密MtE:先MAC再加密,使用两个密钥,先计算MAC,然后将消息和MAC一起加密EtM:先加密在MAC,使用两个密钥,先加密明文,然后对密文计算MAC,得到密文和MAC值E&M:加密并MAC,使用两个密钥,加密明文,对明文计算MAC,得到密文和MAC值

    CCM是E&M方案的改进,可提供认证和加密。组成CCM的关键算法是AES加密算法,CTR工作模式和CMAC认证算法,在加密和MAC算法中共用一个密钥K。CCM加密过程的输入包括三部分:

    将要被认证和加密的数据,即明文P将要被认证但不需要加密的数据A临时量N作为负载和相关数据的补充,对每天消息在协议生命期内,N的取值唯一,可防止重放攻击等

    CCM是一个相对复杂的算法,对明文需要两次完整的处理:一次用于生成MAC,一次用于加密。临时量和MAC的长度进行这种选择,加密密钥在CTR模式下使用了两次。

    Galois/计数器模式基于并行设计,可以提供高效的吞吐率和低成本、低延迟。本质是消息在变型的CTR模式下加密,密文结果与密钥以及消息长度信息在域上相乘。

    GCM模式使用两个函数:带密钥的Hash函数GHASH,以及计数器每次真增加1的CTR模式的GCTR。

    GHASH将Hash密钥H和位串X作为输入,其中位,m是正整数,输出128位的MAC值。

    GCTR将密钥K和任意长度的位串X作为输入,输出是长度与X相同的密文Y。

    计数器值可以被快速生成,加密操作可以并行执行。整个认证加密函数如图所示

    Processed: 0.010, SQL: 8