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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM