首页 > 其他分享 >GCM

GCM

时间:2024-10-18 11:03:13浏览次数:7  
标签:比特 GCM len IV 分组 128 mbox

GaloisCounter Mode (GCM)

运算符与函数

$0^s$ 包含了$s$个$0$的比特串。
$\mbox{CIPH}_K⁡(X)$ 在密钥$K$下对分组$X$应用分组密码得到的输出。
$\mbox{GCTR}_K⁡(ICB,X)$ 在密钥K下对包含初始组计数$ICB$的比特串X应用包含给定分组加密的 $\mbox{GCTR}$函数的输出。
$\mbox{GHASH}_H⁡(X)$ 在hash子密钥H下对比特串X应用$\mbox{GHASH}$函数的输出。
$\mbox{inc}_s⁡(X)$ 比特串X的最右$s$个比特自增并模$2^s$后表示为二进制形式的输出。
$int⁡(X)$ 二进制比特串$X$对应的整数。
$\mbox{len}⁡(X)$ 比特串$X$的比特长度。
$\mbox{LSB}_s⁡(X)$ 比特串$X$的最右$s$个比特组成的比特串。
$\mbox{MSB}_s⁡(X)$ 比特串$X$的最左$s$个比特组成的比特串。
$⌈x⌉$ 不小于实数$x$的最小整数。
$[x]_s$ 非负整数$x$表示为$s$比特的二进制字符串,其中$x<2^s$。
$X≫1$ 弃置比特串$X$的最右比特并在左侧增加$0$比特而产生的比特串。
$X∥Y$ 两个比特串$X$和$Y$的级联。
$X⊕Y$ 两个相同长度比特串$X$和$Y$按比特进行异或运算。
$X•Y$ 两个分组$X$和$Y$的积,视作二进制伽罗瓦域的元素。
$X^i$ $X$在“$•$”乘法的$i$次幂,其中$i$为正整数。
$x⋅y$ 两个整数$x$和$y$的积。

GCM的算数组件
递增函数
对于满足\(\mbox{len}(X)≥s\)的正整数\(s\)与比特串\(X\),记\(\mbox{inc}_s⁡(X)\)为\(s\)-bit的递增函数,定义如下:

$\mbox{inc}_s⁡(X)=\mbox{MSB}_{\mbox{len}(X)-s}⁡(X)∥[\mbox{int⁡}(\mbox{LSB}_s⁡(X) )+1 \mbox{ mod } 2^s]_s$

分组倍乘运算符
令\(R\)为比特串\(11100001∥0^{120}\)。对于给定的两个分组\(X\)和\(Y\),如下的Algorithm计算分组的“积”,记为\(X•Y\):
Algorithm:\(X•Y\)
输入:
  分组\(X\),\(Y\)。
输出:
  分组\(X•Y\)。
步骤:

  1. 记\(x_0x_1…x_{127}\)为\(X\)的比特序列。
  2. 令\(Z_0=0^{128}\)与\(V_0=Y\)。
  3. 对于\(i=0\)到\(127\),以如下方式计算分组\(Z_{i+1}和V_{i+1}\):
    \( Z_{i + 1} = \begin{cases} Z_{i} & {\text{if}~x_{i} = 0} \\ {Z_{i} \oplus V_{i}} & {\text{if}~x_{i} = 1} \end{cases}\)
    \(V_{i + 1} = \begin{cases} {V_{i} \gg 1} & {\text{if}~{{\text{L}\text{SB}}_{1}\left( V_{i} \right)} = 0} \\ {\left( {V_{i} \gg 1} \right) \oplus R} & {\text{if}~{{\text{L}\text{SB}}_{1}\left( V_{i} \right)} = 1} \end{cases}\)
  4. 返回\(Z_{128}\)。

\(\mbox{GHASH}\)函数
Algorithm:\(\mbox{GHASH}_H⁡(X)\)
预准备:
  分组\(H\),hash子密钥。
输入:
  满足\(\mbox{len}⁡(X)=128m\)的比特串\(X\),其中\(m\)为正整数。
输出:
  分组\(\mbox{GHASH}_H⁡(X)\)。
步骤:

  1. 记\(X_1,X_2,…,X_{m-1},X_m\)为满足\(X=X_1∥X_2∥⋯∥X_{m-1}∥X_m\)的唯一组序列。
  2. 令\(Y_0\)为“零组”,即\(0^{128}\)。
  3. 对于\(i=1\)到\(m\),计算\(Y_i=(Y_{i+1}⊕X_i )•H\)。
  4. 返回\(Y_m\)。
图片名称

\(\mbox{GCTR}\)函数
Algorithm:\(\mbox{GCTR}_K⁡(ICB,X)\)
预准备:
  长度为128-bit的分组密码\(\mbox{CIPH}\);
  密钥\(K\)。
输入:
  初始组计数\(ICB\);
  任意长度比特串\(X\)。
输出:
  长度为\(\mbox{len}⁡(X)\)的比特串\(Y\)。
步骤:

  1. 若\(X\)为空串,则返回为空串的\(Y\)。
  2. 令\(n=\mbox{len}⁡(X)⁄128\)。
  3. 记\(X_1,X_2,…,X_{n-1},X_n^*\)为满足\(X=X_1∥X_2∥⋯∥X_{n-1}∥X_n^*\)的唯一比特串序列,其中\(X_1,X_2,…,X_{n-1}\)为完整的组。
  4. 令\({CB}_1=ICB\)。
  5. 对于\(i=2\)到\(n\),计算\({CB}_i=\mbox{inc}_{32}⁡({CB}_{i-1})\)。
  6. 对于\(i=1\)到\(n-1\),计算\(Y_i=X_i⊕\mbox{CIPH}_K⁡({CB}_i)\)。
  7. 计算\(Y_n^*=X_n^*⊕\mbox{MSB}_{\mbox{len} ⁡(X_n^*)}⁡(\mbox{CIPH}_K⁡({CB}_n ) )\)。
  8. 令\(Y=Y_1∥Y_2∥⋯∥Y_{n-1}∥Y_n^*\)。
  9. 返回\(Y\)。
图片名称

认证加密函数的算法(Algorithm for the Authenticated Encryption Function)

Algorithm: \(\mbox{GCM-AE}_K⁡(IV,P,A)\)
预准备:
  长度为128-bit的分组密码\(\mbox{CIPH}\);
  密钥\(K\);
  定义支持的输入-输出长度;
  支持的key相关标签长度\(t\)。
输入:
  初始化向量\(IV\);
  明文\(P\);
  额外认证数据\(A\)。
输出:
  密文\(C\);
  认证标签\(T\)。
步骤:

  1. 令\(H=\mbox{CIPH}_K⁡(0^{128})\)。
  2. 定义如下的分组\(J_0\):
    若\(\mbox{len}⁡(IV)=96\),则令\(J_0=IV∥0^{31}∥1\)。
    若\(\mbox{len}⁡(IV)≠96\),则令\(s=128⌈\mbox{len}(IV)⁄128⌉-\mbox{len}⁡(IV)\),且令\(J_0=\mbox{GHASH}_H⁡(IV∥0^{s+64}∥[\mbox{len}⁡(IV) ]_{64})\)。
  3. 计算\(C=\mbox{GCTR}_H⁡(\mbox{inc}_{32}⁡(J_0 ),P)\)。
  4. 计算\(u=128⋅⌈\mbox{inc}⁡(C)⁄128⌉-\mbox{len}⁡(C)\)且令\(v=128⋅⌈\mbox{len}⁡(A)⁄128⌉-\mbox{len}⁡(A)\)。
  5. 定义如下的分组\(S\):
    \(S=\mbox{GHASH}_H⁡(A∥0^v∥C∥0^u∥[\mbox{len}⁡(A)]_{64}∥[\mbox{len}⁡(C)]_{64})\)
  6. 计算\(T=\mbox{MSB}_t⁡(\mbox{GCTR}_K⁡(J_0,S) )\)。
  7. 返回\((C,T)\)。
图片名称

认证解密函数的算法(Algorithm for the Authenticated Decryption Function)

Algorithm:\(\mbox{GCM-AD}_K⁡(IV,C,A,T)\)
预准备:
  长度为128-bit的分组密码\(\mbox{CIPH}\);
  密钥\(K\);
  定义支持的输入-输出长度;
  支持的key相关标签长度\(t\)。
输入:
  初始化向量\(IV\);
  密文\(C\);
  额外认证数据\(A\);
  认证标签\(T\)。
输出:
  明文\(P\)或非可信标识\(FAIL\)。
步骤:

  1. 若\(IV\),\(A\)或\(C\)的长度不支持,或\(\mbox{len}⁡(T)≠t\),则返回\(FAIL\)。
  2. 令\(H=\mbox{CIPH}_K⁡(0^{128})\)。
  3. 定义如下的分组\(J_0\):
    若\(\mbox{len}(IV)=96\),则令\(J_0=IV∥0^{31}∥1\)。
    若\(\mbox{len}⁡(IV)≠96\),则令\(s=128⌈\mbox{len}(IV)⁄128⌉-\mbox{len}⁡(IV)\),且令\(J_0=\mbox{GHASH}_H⁡(IV∥0^{s+64}∥[\mbox{len}⁡(IV) ]_{64})\)。
  4. 令\(P=\mbox{GCTR}_K⁡(\mbox{inc}_{32}⁡(J_0 ),C)\)。
  5. 令\(u=128⋅⌈\mbox{len}⁡(C)⁄128⌉-\mbox{len}⁡(C)\)且令\(v=128⋅⌈\mbox{len}⁡(A)⁄128⌉-\mbox{len}⁡(A)\)。
  6. 定义如下的分组\(S\):
    \(S=\mbox{GHASH}_H⁡(A∥0^v∥C∥0^u∥[\mbox{len}⁡(A)]_{64}∥[\mbox{len}⁡(C)]_{64})\)
  7. 计算\(T'=\mbox{MSB}_t⁡(\mbox{GCTR}_K⁡(J_0,S))\)。
  8. 若\(T=T'\),则返回\(P\),否则返回\(FAIL\)。
图片名称

标签:比特,GCM,len,IV,分组,128,mbox
From: https://www.cnblogs.com/miro-cnblogs/p/18473777

相关文章

  • 9月28日,工信部人才交流中心&CUUG-PGCA/PGCP/PGCM认证考试完成!
    2024年9月28日,由工业和信息化部人才交流中心主办,北京神脑资讯技术有限公司承办的PostgreSQL管理员岗位能力认证考试(PGCP中级/PGCM高级)顺利完成。中级PG认证专家:PGCP(PostgreSQLCertifiedProfessional),是对PostgreSQL数据库技术能力的一种认可,达到了专家级别,可以对PostgreSQL数据......
  • 使用 AES-GCM 分块加密文件
    我想编写一个生成器,以给定大小的块来加密文件并一一返回块。我还想验证有效负载,因此我为此选择了AES-GCM。为什么我要分块加密而不是一次性加密整个文件?我通过网络发送这些块,因此我不是加密整个(可能很大)文件,将其存储在其他地方,然后在进行网络传输时再次对其进行分块,而是加密......
  • YUNBEE云贝-PGCM v16大师认证实战培训课云贝专属奖学金,等你来拿!
    课程安排5天30课时,理论+实验相结合,贴近生产实战授课课程学习内容课时第一章介绍1.1PGCM课程介绍第1天/6课时第二章认证安全2.1认证安全(信任认证和口令认证)2.2密码复杂度2.3访问控制(数据库角色、ACL/权限管理、行级安全性)2.4安全审计(审计日志)第三章内存管......
  • 全新QSiC 1200V 模块:GCMS020A120S1-E1、GCMS040A120S1-E1、GCMX020B120S1-E1、GCMS020
    全新QSiC1200VSOT-227SiC模块,提升能源标准,这些超高效模块支持电动汽车、医疗电源和太阳能大功率应用的创新设计。特点低开关损耗低结至外壳热阻非常坚固,易于安装直接安装到散热器上(隔离封装)超低损耗的高频操作SiCSBDs的零反向恢复电流SiCMOSFETs的小关断尾电流低杂散电感......
  • 国密算法SM4的GCM模式加密解密实现
    importorg.bouncycastle.util.encoders.Hex;importjava.util.Arrays;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassSM4Utils{/***默认SECRET_KEY*secretKey必须为16位,可包含字母、数字、标点*/ privatestat......
  • GCM155R71H123JA55D 电容器芯片
    GCM155R71H123JA55D是一种电容器芯片,属于电子元器件中的passives类型。电容器芯片是一种能够存储电荷和电能的元器件,通常使用于电路中起到储存、隔离和滤波作用。GCM155R71H123JA55D电容器芯片的电容值为12nF,电压等级为50V,其特点包括高压容比、无极性、体积小等。它采用陶瓷材料......
  • 气相色谱质谱联用仪GCMS-QP2020性能和设计特点
    气相色谱质谱联用仪GCMS-QP2020的特点:集成高灵敏度和低实验成本:依托质谱技术,兼容多种载气类型(He,H2,N2),开拓质谱技术分析极限。无需更换离子源,轻松切换离子化方式。1)高灵敏度采用屏蔽板(Shield)技术的整体惰性化高灵敏度离子源和的“偏转透镜(ODlens)技术”配合“新型低噪音CPU板”,有效降......
  • jmeter 使用AES-GCM 模式 加解密 性能测试及 加解密过程 笔记
    加解密过程 步骤1:明文参数(parm1)----key1明文密钥加密(明文密钥),加密后生成密文(parm2)步骤2:-aeskey(对明文密钥key1加密,因为考虑到安全因素防止暴力破解,对明文密钥进行加......
  • c# .net 微信支付v3,支付结果通知处理;含AEAD_AES_256_GCM解码
     c#.net微信支付v3,支付结果通知处理;含AEAD_AES_256_GCM解码作者的程序框架:.NETFramework4.6.1微信官方说明地址: 注意重点:注意:•同样的通知可能会多次发送给商户系统......
  • AES_GCM_256加密算法
    中文手册:21.2.4EVP_CIPHER_CTX_OpenSSL中文手册原理:AES加密算法原理(C++实现)_算法小艾的博客-CSDN博客_aesc++根据openssl来写的话参考这个文章大坑的aesGCM解密算......