zoukankan      html  css  js  c++  java
  • 消息认证码(MAC)

    消息认证码

    定义

    将通信双方共享的密钥K和消息m作为输入,生成一个关于K和m的函数值MAC,将其作为认证标记(Tag)。发送时,将消息和认证码同时发送给接收方,若接收方用消息和共享密钥生成相同的消息认证码,则认证通过。

    消息认证码用于保证数据的完整性。即防止数据被非授权用户篡改。需要注意的是:仅加密是无法保证数据的完整性的(如对ECB模式的攻击),因此需要认证。常见的消息认证码包括以下几类:

    • 基于分组密码的MAC
    • 基于带密钥的Hash函数的MAC
    • 基于泛Hash函数的MAC

    认证的安全性模型

    攻击者选择消息发送给MAC,MAC将相应的Tag值返回,通过该方法可以得到任意消息的认证码。若攻击者可以另外找一个其他的消息,并能够伪造其认证码,则攻击成功,MAC被攻破。

    标准MAC算法

    基于分组密码的MAC

    CBC-MAC

    对消息使用CBC模式进行加密,取密文的最后一块作为认证码(相当于用异或操作进行了压缩)

    • 优点:构造简单,底层算法具有黑盒性质,方便替换。
    • 缺点:无法处理变长消息;可以伪造消息通过认证,比如:
      已知:((M1,M2,M3,T))((M1,M2,T1)),可伪造((M1,M2,M3,M3oplus T oplus T1,T))通过认证。

    EMAC

    EMAC为CBC-MAC的改进。利用1或0对明文消息进行填充,从而可以处理变长消息。

    • 优点:可处理变长消息。
    • 缺点:若消息是整分组,最后一块完全处理填充消息,会造成浪费。

    XCBC->TMAC->OMAC

    XCBC、TMAC、OMAC均为对CBC-MAC和EMAC的改进,结合了两者的优点。若消息为整分组,则采取下图左边的方案;若消息不是整分组,则采取下图右边的方案。

    • XCBC:(K_1,K_2,K_3)均不相同
    • TMAC:((K_2,K_3)=(K cdot u, K))
    • OMAC1 和OMAC2: ((K_2,K_3)=(Lcdot u,Lcdot u^2))((K_2,K_3)=(Lcdot u,Lcdot u^{-1}))(L=E_K(0^n))

    CMAC=OMAC1

    下图中,((K_1,K_2)=(Lcdot u,Lcdot u^2))(L=E_K(0^n))

    基于泛哈希函数(Universal Hash Function)的MAC

    基于泛哈希函数的MAC

    • Rogaway : Bucket hashing (1995)
    • Halevi-Krawczyk : MMH (1997)
    • Black-Halevi-Krawczyk-Krovertz-Rogaway : UMAC (1999)
    • Bernstein: Poly1305(2005)

    Almost Universal(AU) Hash Function 和 Almost Xor Universal(AXU) Hash Function

    Almost Xor Universal hash function(AXU) 的定义如下图,即保证输出异或值的随机

    AXU函数举例

    • 例1
      • (H: {0,1}^n imes {0,1}^n ightarrow {0,1}^n)
      • (H(K,M) = K· M)
      • (1/2^n-AXU)
    • 例2

    Almost Universal(AU):只要保证对于不同输入,输出相同值的概率很低即可,不必保证输出异或值的均匀性。也就是上图中的式子无需对任意C成立,只要C=0时成立即可。AU性质要比AXU弱一些。

    Wegman-Carter方案

    • 应用场景
      Wegman-Carter MAC 在量子通信领域有较多的应用,可运用于多用户量子密钥分发(MQKD)中用户的身份的验证。
      使用时,两个用户预先共享相同的密钥。然后,他们使用这个共享密钥从一个通用哈希函数类中选择一个哈希函数,并根据所选的哈希函数计算公共消息的哈希值。通过这种方式,它可以同时实现消息和身份验证。然而,这种方法不适用于大型网络。当一个网络上有m个用户时,如果一个用户想和其他任一用户进行QKD,他应该提前持有m-1个密钥。因此,整个网络需要0(m^2)数量级的密钥量,这对于一些大型网络来说是一个新的负担。
      另一种常见方法是引入一个第三方,即由第三方产生会话密钥,并通过安全的量子密钥分发协议将其分别传给两个通信用户。这里需要满足一个前提条件,即这个第三方必须是可信的。然而,在现实生活中,寻找这种完全可信的第三方是比较困难的。
      相比于传统通信,量子通信最大的优势在于量子密钥分发替换了传统密钥协商或预共享的密钥确立机制。

    • 方案介绍
      先用泛哈希压缩数据,再一次一密得到认证码。密钥K需要不断更新。

    • 安全性证明
      这里的泛哈希函数选择AXU,只要选择的AXU函数是安全的,那么Wegman-Carter方案就是安全的。

    如果AU后面直接用PRF处理而不是生成随机值后一次一密异或处理(例如用分组密码处理生成MAC) 就不用使用AXU,满足AU性质即可。

    • 实例化:128-EIA3

    128-EIA3是基于流密码ZUC的消息认证码,采用Wegman-Carter方案。它是由中国提出的国际算法标准(3GPP标准LTE的完整性算法,EEA3为同步提出的机密性算法)。

  • 相关阅读:
    Mysql 分页查询sql优化
    观察者模式之spring事件机制
    封装一个按Key排序的Map工具
    SpringBoot java配置类@Configuration 的两种写法
    最基础前端路由实现,事件popstate使用
    mybatis分页插件PageHelper源码浅析
    看看线程特有对象ThreadLocal
    svn提交错误:Commit failed (details follow): Can't create directory
    mac下修复exfat格式外置硬盘
    [twisted] Multiple users
  • 原文地址:https://www.cnblogs.com/rookieveteran/p/13430602.html
Copyright © 2011-2022 走看看