当前位置: 首页 > 专利查询>王伟忠专利>正文

一种基于国产商用密码算法的快速保留数据格式加密计算方法技术

技术编号:35168309 阅读:20 留言:0更新日期:2022-10-12 17:31
本发明专利技术公开了一种基于国产商用密码算法的快速保留数据格式加密计算方法,包括:将用户输入的Tweak作为HMAC的计算因子,通过HMAC

【技术实现步骤摘要】
一种基于国产商用密码算法的快速保留数据格式加密计算方法


[0001]本专利技术公开了一种基于国产商用密码算法的快速保留数据格式加密计算方法,适用于采用自主可控算法来实现数据快速保留格式加密的应用场景。

技术介绍

[0002]目前对数据的保留格式加密多基于国际算法,Feistel结构中的CIPH算法均采用AES来进行计算,面对国内自主可控、国产化推广的要求面临算法不合规的风险;某些算法通常采用算法替换的方式进行国产化改造,现有的一些保留格式国密算法改造几乎都是基于FF1的算法模型进行处理,都集成了原有的Feistel结构,只是在算法层面上进行SM4或者HMAC

SM3的算法替换。通常的,SM4\HMAC

SM3\AES性能遵循以下规律,即HMAC

SM3≤SM4<AES,从而造成算法性能整体下降。
[0003]鉴于上述原因,面对合规及高效的保留数据格式加密的应用场景,亟需本领域技术任意进行解决。

技术实现思路

[0004]有鉴于此,本专利技术提供了一种采用国产商用密码算法进行快速保留格式加密的计算方法,基于HMAC

SM3算法来实现国产商用密码算法替换和衍生密钥的提前计算,能够有效的降低过程计算复杂度,在保障算法安全的同时实现基于过程密码算法的快速保留格式加密。
[0005]为了实现上述目的,本专利技术采用如下技术方案:
[0006]radix为在区间[2,65535]内的一个正整数。
[0007]X为输入数组,内部每个元素a均满足0≤a<radix,其数组长度区间为[2,4096][0008]LEN(x),即数组x的元素个数
[0009]K为密钥数据,为字节数字,长度为16字节
[0010]T为密钥IV向量信息,长度为16字节
[0011]t为T的字节数,即t=LEN(T)
[0012]n为输入数组X的元素个数,即n=LEN(X)
[0013]LI(x)为最大取整函数,即获取≤x的最大整数
[0014]HI(x)为最小取整函数,即获取≥x的最小整数
[0015]u,v为过程数据,均为正整数
[0016]A,B为过程数据,均为整数数组
[0017]P为过程数据,为字节数组
[0018][i..j]为数组截取,即代表从数组i到j位置的所有元素,包括i和j
[0019]||为字节连接功能,即把相关的两个字节进行相连
[0020][x]n
为通过n个字节来表示数字x
[0021]mod即为整除求余运算
[0022]GetArr(k,s,l)为密钥衍生算法,k为密钥,s为种子数据,l为期望返回的字节长度。内部算法遵循以下规则:
[0023]GetArr(k,s,l)=HMAC

SM3(k,s0)+
[0024]HMAC

SM3(k,s1)+
[0025]HMAC

SM3(k,s2)+
[0026]……
[0027]其中s0=HMAC

SM3(s)
[0028]s(i)=HMAC

SM3(k,s(i

1))
[0029]通过上述算法即可获得长度为l的字节信息,其中HMAC

SM3也可以替换成CMAC

SM4算法
[0030]MID(array,startpos,length)为从字节数组array中startpos位置获取length长度的字节
[0031]NUM
radix
(array)的计算遵循以下规则:
[0032]1.令x=0
[0033]2.针对array中每个元素a,按照排列顺序从小到大循环计算
[0034]x=x*radix+a
[0035]3.返回得到的整数x
[0036]STR
mradix
(x)的计算长度为m的一个整数数组Arr,遵循以下规则:
[0037]1.判断x应满足0≤x<radix
m
[0038]2.从1开始到m递增,这个数组每个元素通过以下方式计算,即Arr[i

1]=x mod radix
[0039]x=LI(x/radix)
[0040]R为保留格式计算后输出数组
[0041]计算流程
[0042]1加密流程
[0043]其计算过程遵循以下流程:
[0044]1.明确radix、密钥K、IV向量T以及明文整数数组X
[0045]2.分别获取X和T的元素大小,分别为n和t
[0046]3.将n整除2,并通过LI函数获取小于等于此数的最大整数u,并计算v=n

u
[0047]4.将X进行数组分割,A数组为X数组第1个元素到第u个元素;B数组为第u+1个元素到第n个元素;
[0048]5.按照b=HI(HI(v*log(radix))/8)的计算流程获取整数b
[0049]6.按照d=4*HI(b/4)+4的计算流程得到整数d
[0050]7.组成字节数组P,P的组合规则符合P=[1]1||[2]1||[1]1||[radix]3||[10]1||[u mod 256]1||[n]4||[t]4||T
[0051]8.通过GetArr功能模块获取衍生出的字节信息S,其中GetArr中的密钥为K,种子数据为7中的P,计划获取的字节长度为d*10
[0052]9.令i从0开始,逐次累加1,进行10次循环计算,每一次计算都遵循以下流程:
[0053]1)从8中的S中获取本次计算的数据St,St=MID(S,i*d,d)(以0表示第一个元素)
[0054]2)将St通过NUM
256
转换为一个整数y
[0055]3)识别当前循环次数i是否为偶数,若为偶数则m=u;反之m=v
[0056]4)计算c=(NUM
radix
(A)+y)mod radix
m
[0057]5)通过C=STR
mradix
(c)得到长度为m的整数数组C
[0058]6)将数组B赋值给A,将数组C赋值给B,同时递增i值
[0059]7)根据i值确认是否完成10次循环计算。若未完成则转到1)进行下一次计算;若已完成则将此时的数组A、数组B进行联合,输出最终的加密后的结果R
[0060]2解密流程
[0061]其计算过程遵循以下流程:
[0062]1.明确radix、密钥K、IV向量T以及密文整数数组X
[0063]2.分别获取X和T的元素大小,分别为n和t
[0064]3.将n整除2,并通过LI函数获取本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于国产商用密码算法的快速保留数据格式加密计算方法,其特征在于,包括:radix为在区间[2,65535]内的一个正整数。X为输入数组,内部每个元素a均满足0≤a<radix,其数组长度区间为[2,4096]LEN(x),即数组x的元素个数K为密钥数据,为字节数字,长度为16字节T为密钥IV向量信息,长度为16字节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个字节来表示数字xmod即为整除求余运算GetArr(k,s,l)为密钥衍生算法,k为密钥,s为种子数据,l为期望返回的字节长度。内部算法遵循以下规则:GetArr(k,s,l)=HMAC

SM3(k,s0)+HMAC

SM3(k,s1)+HMAC

SM3(k,s2)+
……
其中s0=HMAC

SM3(s)s(i)=HMAC

SM3(k,s(i

1))通过上述算法即可获得长度为l的字节信息,其中HMAC

SM3也可以替换成CMAC

SM4算法MID(array,startpos,length)为从字节数组array中startpos位置获取length长度的字节NUM
radix
(array)的计算遵循以下规则:(1).令x=0(2).针对array中每个元素a,按照排列顺序从小到大循环计算x=x*radix+a(3).返回得到的整数xSTR
mradix
(x)的计算长度为m的一个整数数组Arr,遵循以下规则:(1).判断x应满足0≤x<radix
m
(2).从1开始到m递增,这个数组每个元素通过以下方式计算,即Arr[i

1]=x mod radixx=LI(x/radix)
R为保留格式计算后输出数组加密流程:(1).明确radix、密钥K、IV向量T以及明文整数数组X(2).分别获取X和T的元素大小,分别为n和t(3).将n整除2,并通过LI函数获取小于等于此数的最大整数u,并计算v=n

u(4).将X进行数组分割,A数组为X数组第1个元素到第u个元素;B数组为第u+1个元素到第n个元素;(5).按照b=HI(HI(v*log(radix))/8)的计算流程获取整数b(6).按照d=4*HI(b/4)+4的计算流程得到整数d(7).组成字节数组P,P的组合规则符合P=[1]1||[2]1||[1]1||[radix]3||[10]1||[u mod 256]1||[n]4||[t]4||T(8).通过GetArr功能模块获取衍生出的字节信息S,其中GetArr中的密钥为K,种子数据为7中的P,计划获取的...

【专利技术属性】
技术研发人员:王伟忠
申请(专利权)人:王伟忠
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1