【技术实现步骤摘要】
一种基于国产商用密码算法的快速保留数据格式加密计算方法
[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]内的一个正整数。
[00 ...
【技术保护点】
【技术特征摘要】
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,计划获取的...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。