发布日期:2023-03-21 20:13 浏览次数:
GB/T 15852的本部分规定了4种采用泛杂凑函数的消息鉴别码算法:UMAC、Badger、Poly1305和GMAC。这些算法基于GB/T33133.1-2016中规定的序列密码算法和GB/T 32907-2016中规定的分组密码算法,或符合国家规定的其他序列密码算法和分组密码算法,使用一个密钥和一个泛杂凑函数处理一个长度为m位的比特串,输出一个长度为n位的比特串作为MAC。
本部分适用于安全体系结构、进程及应用的安全服务。这些算法可以作为数据完整性机制,用于检验数据是否在未经授权的方式下被更改。也可以作为消息鉴别机制,确保消息来自于拥有密钥的实体。数据完整性机制和消息鉴别机制的强度由以下指标决定:密钥的长度(按比特)与保密性、泛杂凑函数产生的杂凑码的长度(按比特)、泛杂凑函数的强度、MAC的长度(按比特),以及具体的机制。
注:提供完整性服务的一般框架在ISO/IEC 10181-6[1]中指定。
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 15852.1-2008 信息技术 安全技术 消息鉴别码 第1部分:采用分组密码的机制(ISO/IEC 9797-1:1999,IDT)
GB/T 32907-2016 信息安全技术 SM4分组密码算法
GB/T 33133.1-2016 信息安全技术 祖冲之序列密码算法 第1部分:算法描述
GB/T 36624-2018 信息技术 安全技术 可鉴别的加密机制
GB/T 15852.1-2008界定的以及下列术语和定义适用于本文件。
3.1
空串 empty string
长度为零的比特串。
3.2
临时值 nonce
使用一次的值,用于向MAC算法提供新鲜输入。
3.3
标签 tag
MAC算法的结果,附加一个可能的加密消息以提供完整性保护。
3.4
泛杂凑函数 universal hash-function
由密钥确立的映射,将一定范围内任意长比特串映射到定长比特串,满足:对于所有不同的输入,其输出在密钥均匀随机的前提下发生碰撞的概率极小。
注:泛杂凑函数由Carter和 Wegman 提出出 ,其在MAC算法中的应用最早由Wegman和Carter 描述[11]。
4.1 符号
下列符号适用于本文件。
bit(S,n) 若比特串S的第n个比特是1则输出整数1,否则输出整数0(索引从1开始)
bitlength(S) 比特串S的比特长度
bitstr2uint(S) 一个非负整数,其二进制表示为比特串S。形式化地,若S的长度为t比特,则bbitstr2uint(S)=2-1*bit(S,1)+2-2*bit(S,t)
注1:比特串是以高位顺序排列的,也就是说,第一个比特为最高位。
blocklen 底层分组密码的分组长度(按字节计)
ceil 向上取整操作,也就是说,若x是一个浮点数,则 ceil(x)是满足 n≥x的最小的整数n
Enc(K,X) 明文分组X在密钥K的作用下通过分组密码Enc进行加密
floor 向下取整操作,也就是说,若x是一个浮点数,则 floor(x)是满足 n≤x的最大的整数n
H 杂凑值
K 主密钥
Kg 加密密钥
KH 杂凑密钥
keylen 分组密码的密钥长度(按字节计)
log2 二进制对数函数
M 消息
max 指定参数中的最大值
N 临时值
octetlength(S) 比特串S按字节计的长度(假定S的比特长度是8的倍数)
octetstr2uint(S) 定义为 S[0]+28*S[1]+216*S[2]+···+28n-8*S[n-1]的非负整数,其中 n=octetlengtth(S)
注2:字节串是以低位顺序排列的,即第一个字节为最低位
prime(n) 对任意正整数n,小于2n的最大素数值
注3:本部分使用的素数如表1所示。
表1 素数值
n | prime(n) | prime(n)的十六进制表示 |
32 | 232 - 5 | 0x FFFFFFFB |
36 | 236 - 5 | 0x 0000000F FFFFFFFB |
64 | 264 - 59 | Ox FFFFFFFF FFFFFFC5 |
128 | 2128-159 | 0x FFFFFFFF FFFFFFFF FFFFFFFF FFFFFF61 |
130 | 2130 - 5 | 0x00000003 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFB |
S[i] 比特串S的第i个字节(索引从0开始)
注4:6.2中关于UMAC的条款使用了一个起始为1而不是0的索引。
S[i…j] 由S的第i个到第j个字节组成的子串
taglen 标签的字节长度
uint2bitstr(x,n) 长度为n的字节串S,满足 bitstr2uint(S)=x
uint2octetstr(x,n) 长度为n的字节串S,满足 x=octetstr2uint((S)
X|s 比特分组X的左截断:若X的比特长度大于或等于s,则X ,是由X最左侧的s个比特组成的长度为s位的比特分组
X|s 比特分组X的右截断:若X的比特长度大于或等于s,则X 是由X最右侧的s个比特组成的长度为s位的比特分组
X >>1比特分组X右移一位:Y=X>>1最左侧的比特恒为0
|X| X的比特长度
zeropad(S,n)
对于非负整数n,用零比特对比特串S进行填充,直到其长度是最接近的n个字节的整数倍。形式化地, ropad(S,n)=S||T ,其中T是满足S||T非空并且n可以整除 octetlength(S||T)的最短的零比特串(T可能为空)
⊕ 比特串的比特级逻辑异或运算。若A,B是长度相等的比特串,则表示A和B的比特级逻辑异或所形成的比特串
∧比特串的比特级逻辑与运算。若A,B是长度相等的比特串,则A∧B表示A和B的比特级逻辑与所形成的比特串
+32 两个32位的比特串的加法运算,得到一个32位的比特串。形式化地,S+32T=uint2bitstr(bitstr2uint(S)+bitstr2uint(T)mod232,4)
+64 两个64位的比特串的加法运算,得到一个64位的比特串。形式化地,S+64T=uint2bitstr(bitstr2uint(S)+bitstr2uint(T)mod264,8)
* 整数的乘法运算
*64 两个64位的比特串的乘法运算,得到一个64位的比特串。形式化地,S*64T=uint2bitstr(bitstr2uint(S) *bitstr2uint(T)mod264,8)
注5:+32,+64和 运算与在现代计算机上可以高效执行的加法和乘法运算有着很好的对应。
以上为标准部分内容,如需看标准全文,请到相关授权网站购买标准正版。