CCM和GCM

分組密碼連接-消息認證碼--CCM     Counter with CBC-MAC算法

  組成CCM的關鍵算法是AES加密算法、CTR工做模式和CMAC認證算法,在加密和MAC算法中共用一個密鑰K。數組

  CCM加密過程的輸入由三部分構成:函數

    一、將要被加密和認證的數據,即明文消息P數據塊加密

    二、將要被認證,可是不須要加密的相關數據A,如協議頭等。spa

    三、臨時量N,做爲負載和相關數據的補充,對每條消息N取值惟一,以防止重放攻擊等。設計

  

   

  由計數器產生大量的Ctriblog

 

Galois/計數器模式--GCM     Galois/Counter Modeit

   GCM基於並行化設計,能夠提供高效的吞吐率和低成本、低延遲。其本質是消息在變型的CTR模式下加密,密文結果與密鑰以及消息長度信息在GF(2128)域上相乘。該標準還同時制定了僅支持MAC的工做模式即GMAC。class

  GCM模式使用兩個函數:帶密鑰的Hash函數GHASH,以及計數器每次增1 的CTR模式的GCTR。並行

  一、GHASH

      

  GHASHH(X)函數將Hash密鑰H和位串X做爲輸入,通過轉化函數可表示成:

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

  該式很是適合快速實現,若是使用相同的Hash密鑰認證多個消息,那麼H2,H3,...可以經過一次預計算來對全部消息進行認證,而且待認證的數據分組(X1,X2,...,Xm)可以並行處理,由於每組計算都相互獨立。

  二、GCRT

   

  inc32(S)函數對S的最右32位增1並取模232,其他位不變。

  最後一次加密生成MSB,根據Xn'的長度截取後再與Xn'異或產生Yn'

  三、整個認證函數結構

  

  (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長度

相關文章
相關標籤/搜索