GCM

news/2024/10/18 11:08:20

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\)
图片名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/72983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

音频压缩

声音压缩 压缩音频在微信上的播放效果结论:在Pc环境测试后,压缩音频在微信环境中也拥有相同表现。 码率对音质的影响设置总结 将码率设置为64k和原版几乎没有差别,压缩率35% 将码率设置到48k,仔细可以听出些许差别,在对音频要求不高的地方可以使用。 转码率工具 https://w…

创新突破!天翼云荣膺CCF HPC China 2024高性能计算创新大奖

近日,第20届CCF全国高性能计算学术年会(CCF HPC China 2024)在武汉隆重召开。CCF HPC China是全球高性能计算领域三大标志性盛会之一,本届大会以“华章廿载 新质未来”为主题,由12位院士领衔,携手来自算力领域的400多位顶尖学者,进行学术交流和专题分享。近日,第20届CC…

汽车零部件行业CRM应用数字化解决方案解析

1.行业背景与挑战分析 近年来,随着国家对新能源汽车行业的大力支持,国内汽车产业不仅在国内市场实现了弯道超车,而且新能源汽车的海外出口也开拓了新的市场,为自主品牌的新能源战略贡献了新的增长点;这一迅猛发展的趋势也带动了汽车零部件行业的增长。 同时,汽车零部件行…

gjoi 10.18

模拟赛不通知,模拟赛巨大绑包,素质有待降低。T1 向量 不难发现操作次数固定,操作其实相当于在有两位的前提下减少一位,如果和 \(\geq 10\) 花费 \(9\) 的代价加 \(1\) 位。答案肯定是 \(初始位数+额外位数-1\),现在问题是额外位数是什么,不妨设序列和为 \(sum\),额外次数…

Leetcode 721. 账户合并

1.题目基本信息 1.1.题目描述 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。 现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于…

网管平台(基础篇):网管系统的重要性

网管系统的核心地位:数字世界的稳定舵手 在信息技术日新月异的今天,网络如同一条无形的纽带,将世界紧密相连。然而,这条纽带背后隐藏着无数复杂的节点与链路,如何确保它们高效、稳定地运行,成为了一个亟待解决的问题。网管系统,作为数字世界的稳定舵手,以其强大的监控与…

揭秘!如何设计高可用、高性能、高扩展的异地多活系统?【转】

1 关于基础架构 2 关于异地多活 3 写时延是关键 4 写量大拆分片 5 做隔离拆分片 6 其他影响因素 7 数据复制架构 8 数据影响路由 9 架构选型模式异地多活是分布式系统架构设计的一座高峰,当业务系统走到需要考虑异地多活这一步,其体量和复杂度都会达到很高的水准。接入层、逻…