ZHCUAN6E October 2022 – May 2025 MSPM0L1105 , MSPM0L1106 , MSPM0L1116 , MSPM0L1117 , MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L1303 , MSPM0L1304 , MSPM0L1304-Q1 , MSPM0L1305 , MSPM0L1305-Q1 , MSPM0L1306 , MSPM0L1306-Q1 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1
GCM 协议操作是一种包含加密/解密和身份验证的组合操作。图 10-7 展示了 GCM 操作的概况。
部分输入数据流只能进行身份验证,而通常大多数输入数据都会进行加密/解密和身份验证。仅需要身份验证的数据始终必须位于需要加密的数据之前。在 GCM 中,仅需要身份验证的数据被称为 AAD(其他身份验证数据)。AAD 与其他数据是分别获取的。
中间(临时)结果数据用作剩余身份验证操作的输入。由于身份验证操作不需要加密内核而只需要多项式乘法,因此加密/解密和身份验证这两个操作是并行执行的。在对最后一个数据块进行加密后,还需要额外的多项式乘法和加密分别对 128 位长度矢量进行身份验证,最后对身份验证结果进行加密。
[NIST-SP800-38D] 中指定的 GMAC 操作也通过 GCM 操作获得支持。GMAC 是 GCM 的一种特殊用例,这种用例不处理加密数据,仅提供 AAD 数据来生成输入数据的 MAC。在这种情况下,加密数据长度设置为零。
图 10-8 展示了一轮中执行的操作。在用于加密和解密的一轮 GCM 操作中,一个 32 位计数器用作 IV(正如其用于 CTR 模式)。数据的加密方式与 CTR 模式相同,即对加密输出与输入进行异或运算。在加密/解密之后,对密文与中间身份验证结果进行异或运算。异或运算结果用作多项式乘法的输入以创建下一个(中间)身份验证结果。