博客專欄

        EEPW首頁 > 博客 > AES算法(五)GCM工作模式

        AES算法(五)GCM工作模式

        發布人:電子禪石 時間:2023-04-14 來源:工程師 發布文章

        在以前介紹的基本工作模式中,ECB、CFB、OFB 三種模式可以解決 ECB 模式中相同明文生成相同密文的缺陷,CTR 又可以在此基礎上提供多分組并行加密特性,但是它們都不能提供密文消息完整性校驗功能,所有就有了 GCM 模式。

        講解 GCM 模式之前,我們先要講一下 MAC和GMAC。

        MAC

        MAC 全稱是 Message Authentication Code,中文名稱為消息認證碼,一串由密鑰和密文生成的固定值,有時也稱 Auth Tag。

        MAC 的使用流程如下:

        • 首先 Sender 和 Receiver 共享同一個 Key,約定一個 MAC 計算算法 Algorithm

        • Sender 把要傳遞的消息 Message 通過 Key 和 Algorithm 計算出 MAC,將 Message 和 MAC 發送給 Receiver

        • Receiver 收到 Message 和 MAC 后,將 Message 通過約定的 Key 和算法 Algorithm 計算出 MAC_1,通過對比 MAC 和 MAC_1 是否相等

          • MAC == MAC_1 消息無篡改且是 Sender 發布的

          • MAC != MAC_1 消息有篡改或者根本不是 Sender 發布的,也就是有問題

        消息認證碼是密碼學家工具箱中的 6 大工具之一:對稱密碼、公鑰密碼、單向散列函數、消息認證碼、數字簽名和偽隨機數生成器。

        MAC 跟哈希有點像但比哈希要復雜,因為 Mac 的生成和驗證過程都是需要密鑰的。

        GMAC

        GMAC 全稱是 Galois Message Authentication Code,中文名稱為伽羅瓦消息驗證碼。

        GMAC 就是利用伽羅華域(Galois Field,GF,有限域)乘法運算來計算消息的 MAC 值。

        GCM 模式

        GCM 全稱為 Galois/Counter Mode,可以看出 G 是指 GMAC,C 是指 CTR。它在 CTR 加密的基礎上增加 GMAC 的特性,解決了 CTR 不能對加密消息進行完整性校驗的問題。

        GCM 加密所需數據:明文 P、加密密鑰 Key、初始向量 IV、附加消息 F。

        GCM 加密步驟如下:

        • 將 P 分為 P1、P2、…、Pn,Px 長度 <= 128

        • 生成累加計數器 c0、c1、c2、…、cn,由密鑰 Key 計算出密鑰 H

        • 將 IV、c0 進行運算(連接、加和、異或等)得到 IV_c0,用 Key 加密 IV_c0 得到 IVC0

        • 將 IV、c1 進行運算(連接、加和、異或等)得到 IV_c1,用 Key 加密 IV_c1 得到 IVC1,將 IVC1、P1 做異或運算得到 C1,用密鑰 H 通過 GMAC 算法將附加消息 F 計算出 F1, F1 與 C1 做異或運算得到 FC1

        • 將 IV、c2 進行運算(連接、加和、異或等)得到 IV_c2,用 Key 加密 IV_c2 得到 IVC2,將 IVC2、P2 做異或運算得到 C2,用密鑰 H 通過 GMAC 算法將附加消息 FC1 計算出 F2, F2 與 C2 做異或運算得到 FC2

        • 將 IV、cn 進行運算(連接、加和、異或等)得到 IV_cn,用 Key 加密 IV_cn 得到 IVCn,將 IVCn、Pn 做異或運算得到 Cn,用密鑰 H 通過 GMAC 算法將附加消息 FC(n-1) 計算出 Fn, Fn 與 Cn 做異或運算得到 FCn

        • 拼接 C1、…Cn 得到密文 C,用密鑰 H 通過 GMAC 算法結合 FCn 和 IVC0 最終計算出 MAC

        GCM 加密步驟相關資料較少,本文根據維基百科大致做了步驟拆解,如有不準確請敬請斧正


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: GCM

        技術專區

        關閉
        主站蜘蛛池模板: 新泰市| 墨江| 民权县| 盐山县| 宜丰县| 晋州市| 屯门区| 城固县| 冀州市| 深圳市| 叶城县| 任丘市| 杭锦后旗| 石阡县| 洛川县| 观塘区| 宁夏| 福安市| 普陀区| 延吉市| 海丰县| 来宾市| 南丹县| 宁安市| 石楼县| 台东市| 临泽县| 都江堰市| 沂南县| 昌图县| 古交市| 原阳县| 张家川| 辽阳县| 唐山市| 济阳县| 马龙县| 潼关县| 凤庆县| 定日县| 永靖县|