全网唯一标准王
(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

PDF文档 专利 一种Tweak可变的国产商用密码保留数据格式加密计算方法

文档预览
中文文档 10 页 50 下载 1000 浏览 0 评论 0 收藏 3.0分
温馨提示:本文档共10页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种Tweak可变的国产商用密码保留数据格式加密计算方法 第 1 页 专利 一种Tweak可变的国产商用密码保留数据格式加密计算方法 第 2 页 专利 一种Tweak可变的国产商用密码保留数据格式加密计算方法 第 3 页
下载文档到电脑,方便使用
本文档由 SC 于 2024-03-03 12:05:40上传分享
友情链接
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。