(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202211048570.9
(22)申请日 2022.08.30
(71)申请人 王伟忠
地址 100007 北京市东城区青龙胡同3 5号
(72)发明人 王伟忠
(74)专利代理 机构 北京智行 阳光知识产权代理
事务所(普通 合伙) 11738
专利代理师 李俊奇
(51)Int.Cl.
H04L 9/06(2006.01)
H04L 9/08(2006.01)
H04L 9/40(2022.01)
(54)发明名称
一种Tweak可变的国产商用密码保留数据格
式加密计算方法
(57)摘要
本发明公开了一种Tweak可变的国产商用密
码保留数据格式加密计算方法, 包括: 本发明在
NIST SP 800‑38G中FF3的基础上进行算法和流
程创新, 将原有Tweak固定为8个字节内容进行了
扩充, 可以将其设置为任意长度字节信息; 引入
HMAC‑SM3国产商用密码算 法, HMAC算法进行密钥
衍生, 提前计算出后续待处理过程数据; 在循环
迭代变换中, 通过将SM4算法进行AES算法替换,
实现核心处理流程算法的自主可控。 本发明能够
实现Tweak的任意长度输入, 打破原有8字节的算
法要求; 通过HMAC ‑SM3算法进行密钥衍生, 能够
节省计算资源, 提升效率; 同时, 通过引入国密
HMAC‑SM3\SM4算法, 实现核心计算的自主可控,
保障计算 安全。
权利要求书3页 说明书4页 附图2页
CN 115396083 A
2022.11.25
CN 115396083 A
1.一种Tweak可变的国产商用密码保留数据格式加密计算方法, 其特征在于, 包括如下
步骤:
radix为在区间[2, 6 5535]内的一个正整数。
X为输入数组, 内部每个元素a均满足0≤a<radix, 其数组长度区间为[2,2*HI
(logradix296)]
LEN(x), 即数组x的元 素个数
K为密钥数据,为字节数字, 长度为16 字节
T为Tweak信息, 长度不限
t为T的字节数, 即t= LEN(T)
n为输入数组X的元 素个数, 即n =LEN(X)
LI(x)为最大取整函数, 即获取≤x的最大整数
HI(x)为最小取整函数, 即获取≥x的最小 整数
u, v为过程数据, 均为 正整数
A,B为过程数据, 均为整数 数组
P为过程数据, 为字节数组
[i..j]为数组截取, 即代 表从数组i到j位置的所有元 素, 包括i和j
||为字节连接功能, 即把相关的两个字节进行相连
[x]n为通过n个字节来表示数字x
mod即为整除求 余运算
GetArr(k,s,l)为密钥衍生算法, k为密钥, s为种子数据, l为期望返回的字节长度。 内
部算法遵循以下规则:
GetArr(k,s,l)=H MAC‑SM3(k,s0)+H MAC‑SM3(k,s1)+H MAC‑SM3(k,s2)+ ……
其中s0=H MAC‑SM3(s)
s(i)=HMAC‑SM3(k,s(i‑1))
通过上述算法即可获得长度为 l的字节信息
MID(array,startpos,length)为从字节数组array中startpos位置获取length长度的
字节
NUMradix(array)的计算遵循以下规则:
1.令x=0
2.针对ar ray中每个元素a, 按照排列顺序从小到大循环计算
x=x*radix+a
3.返回得到的整数x
STRm
radix(x)的计算长度为m的一个整数 数组Arr, 遵循以下规则:
1.判断x应满足0 ≤x<radixm
2.从1开始到m递增, 这个数组每 个元素通过以下 方式计算, 即A rr[i‑1]=x mod radix
x=LI(x/radix)
REVB(x)字节数组倒置函数, 将输入 的字节数组x 的每个元素进行倒置, 并返回倒置后
的字节数组。 即back[i]=x[LEN(x) ‑1‑i]
REV(x)整数数组倒 置函数, 将输入的整数数组x的每个元素进行倒 置, 并返回倒 置后的权 利 要 求 书 1/3 页
2
CN 115396083 A
2整数数组。 即back[i]=x[LEN(x) ‑1‑i]
SM4(k,x)采用SM4 算法利用密钥k向量对 x进行ecb加密, 返回为密文数据。
R为保留格式计算后输出 数组
加密步骤:
S11、 明确radix、 密钥K、 Tweak T以及明文 整数数组X;
S12、 分别获取 X和T的元 素大小, 分别为 n和t;
S13、 将n整除2, 并通过L I函数获取小于等于此 数的最大整数u, 并计算v= n‑u;
S14、 将X进行数组分割, A数组为X数组第1个元素到第u个元素; B数组为第u+1个元素到
第n个元素;
S15、 组成字节数组P, P的组合规则符合P=[ 1]1||[2]1||[1]1||[radix] 3||[10]1||[u
mod 256]1||[n]4||[t]4||T;
S16、 通过GetArr功能模块获取衍生出的字节信息S, 其中GetArr中的密钥为K, 种子数
据为S15中的P, 计划获取的字节长度为128
S17、 令i从0开始, 逐次累加1, 进行8次循环计算, 每一次计算都遵循以下流 程:
1)从S16中 的S中获取本次计算的数据St, St=MID(S,i*16,16)(以0表示第一个元素),
按照SI=REVB(SM4(K,REVB(St) ))的计算方式得到数组SI
2)将SI通过NUM256转换为一个整数y
3)识别当前循环次数i是否为偶数, 若为偶数则m=u; 反 之m=v
4)计算c=(NUMradix(REV(A))+y)mod radixm
5)通过C=REV(STRm
radix(c))得到长度为m的整数 数组C
6)将数组B赋值给A, 将数组C赋值给B, 同时递增i 值
7)根据i值确认是否完成8次循环计算。 若未完成则转到1)进行下一次计算; 若已完成
则将此时的数组A、 数组B进行 联合, 输出最终的加密后的结果R
解密步骤:
S18、 明确radix、 密钥K、 Tweak T以及明文 整数数组X;
S19、 分别获取 X和T的元 素大小, 分别为 n和t;
S20、 将n整除2, 并通过L I函数获取小于等于此 数的最大整数u, 并计算v= n‑u;
S21、 将X进行数组分割, A数组为X数组第1个元素到第u个元素; B数组为第u+1个元素到
第n个元素;
S22、 组成字节数组P, P的组合规则符合P=[ 1]1||[2]1||[1]1||[radix] 3||[10]1||[u
mod 256]1||[n]4||[t]4||T;
S23、 通过GetArr功能模块获取衍生出的字节信息S, 其中GetArr中的密钥为K, 种子数
据为S22中的P, 计划获取的字节长度为128
S24、 令i从7开始, 逐次累减1, 进行8次循环计算, 每一次计算都遵循以下流 程:
1)从6中的S中获取本次计算的数据St, St=MID(S,i*d,d)(以0表示第一个元素), 按照
SI=REVB(SM4(K,REVB(St) ))的计算方式得到数组SI
2)将SI通过NUM256转换为一个整数y
3)识别当前循环次数i是否为偶数, 若为偶数则m=u; 反 之m=v
4)计算c=(NUMradix(REV(B))‑y)mod radixm权 利 要 求 书 2/3 页
3
CN 115396083 A
3
专利 一种Tweak可变的国产商用密码保留数据格式加密计算方法
文档预览
中文文档
10 页
50 下载
1000 浏览
0 评论
0 收藏
3.0分
温馨提示:本文档共10页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 SC 于 2024-03-03 12:05:40上传分享