• CCM和GCM


    分组密码链接-消息认证码--CCM     Counter with CBC-MAC

      组成CCM的关键算法是AES加密算法、CTR工作模式和CMAC认证算法,在加密和MAC算法中共用一个密钥K。

      CCM加密过程的输入由三部分构成:

        1、将要被加密和认证的数据,即明文消息P数据块

        2、将要被认证,但是不需要加密的相关数据A,如协议头等。

        3、临时量N,作为负载和相关数据的补充,对每条消息N取值唯一,以防止重放攻击等。

      

       

      由计数器产生大量的Ctri

    Galois/计数器模式--GCM     Galois/Counter Mode

       GCM基于并行化设计,可以提供高效的吞吐率和低成本、低延迟。其本质是消息在变型的CTR模式下加密,密文结果与密钥以及消息长度信息在GF(2128)域上相乘。该标准还同时制定了仅支持MAC的工作模式即GMAC。

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

      1、GHASH

          

      GHASHH(X)函数将Hash密钥H和位串X作为输入,经过转化函数可表示成:

        GHASHH(X) = (X1•Hm)(X2•Hm-1)⊕...⊕(Xm-1•H2)(Xm•H)

      该式非常适合快速实现,如果使用相同的Hash密钥认证多个消息,那么H2,H3,...能够通过一次预计算来对所有消息进行认证,并且待认证的数据分组(X1,X2,...,Xm)能够并行处理,因为每组计算都相互独立。

      2、GCRT

       

      inc32(S)函数对S的最右32位增1并取模232,其余位不变。

      最后一次加密生成MSB,根据Xn'的长度截取后再与Xn'异或产生Yn'

      3、整个认证函数结构

      

      (1)令 H = E(K , 0128)

      (2)定义分组J0如下

        如果len(IV) = 96,则令J0 = IV || 031 || 1。

        如果len(IV) ≠ 96,则令 s = 128⌈len(IV)/128⌉ - len(IV)   

          并令J0 = GHASHH(IV || 0s+64 || [len(IV)64])    //[s+64+len(IV)]%64 = 0,说白了就是使输入满足刚好可分整数组的长度

      (3)令C = GCRTK(inc32(J0) , P)

      (4)令u = 128⌈len(C)/128⌉ - len(C)     v = 128⌈len(A)/128⌉ - len(A)   //目的也是为了满足分组长度

      (5)定义分组S如下

          S = GHSASHH(A || 0v || C || ou || [len(A)]64 || [len(C)64])

      (6)令 T = MSBt(GCTRK(J0 , S)),这里t是支持的MAC长度

  • 相关阅读:
    BZOJ 2594: [Wc2006]水管局长数据加强版
    BZOJ 2049: [Sdoi2008]Cave 洞穴勘测
    html5 canvas ( 贝塞尔曲线, 一片星空加绿地 ) quadraticCurveTo, bezierCurveTo
    c#.net 接收 base64 格式的数据并解析为图片
    html5 canvas ( 绘制一轮弯月, 星空中的弯月 )
    html5 canvas ( 圆和切点曲线的绘制 ) arc, arcTo
    html5 canvas ( 图片填充样式 ) fillStyle, createPattern
    html5 canvas ( 径向渐变, 升级版的星空 ) fillStyle, createRadialGradient
    html5 canvas ( 线性渐变, 升级版的星空 ) fillStyle, createLinearGradient, addColorStop
    html5 canvas ( 图形变换矩阵 ) transform, setTransform
  • 原文地址:https://www.cnblogs.com/block2016/p/5635462.html
Copyright © 2020-2023  润新知