CN115174039A - 一种基于国产商用密码算法的快速保留数据格式加密计算方法 - Google Patents
一种基于国产商用密码算法的快速保留数据格式加密计算方法 Download PDFInfo
- Publication number
- CN115174039A CN115174039A CN202210948413.7A CN202210948413A CN115174039A CN 115174039 A CN115174039 A CN 115174039A CN 202210948413 A CN202210948413 A CN 202210948413A CN 115174039 A CN115174039 A CN 115174039A
- Authority
- CN
- China
- Prior art keywords
- array
- calculation
- radix
- integer
- byte
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000004364 calculation method Methods 0.000 title claims abstract description 67
- 238000004422 calculation algorithm Methods 0.000 title claims abstract description 40
- 238000000034 method Methods 0.000 claims abstract description 26
- 238000006243 chemical reaction Methods 0.000 claims description 6
- 238000003491 array Methods 0.000 claims description 4
- 230000003247 decreasing effect Effects 0.000 claims description 4
- 238000009795 derivation Methods 0.000 claims description 2
- 230000014759 maintenance of location Effects 0.000 abstract 1
- 230000009466 transformation Effects 0.000 description 2
- 230000004807 localization Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
Abstract
本发明公开了一种基于国产商用密码算法的快速保留数据格式加密计算方法,包括:将用户输入的Tweak作为HMAC的计算因子,通过HMAC‑SM3的计算方法,按照后续循环所需要的密钥长度,提前计算出衍生密钥S,修改原有循环进行加密的处理流程,将上述衍生的密钥S进行分段进行异或操作,从而节省计算步骤,在保障算法结果、算法安全的情况下,能够实现国产商用密码替换及性能的提升。本发明通过国产商用密码算法的替换,在实现数据保留格式加密及保障算法安全的同时,通过衍生密钥算法,减少过程加密环节,进而能够有效的提升算法效率,实现快速计算。
Description
技术领域
本发明公开了一种基于国产商用密码算法的快速保留数据格式加密计算方法,适用于采用自主可控算法来实现数据快速保留格式加密的应用场景。
背景技术
目前对数据的保留格式加密多基于国际算法,Feistel结构中的CIPH算法均采用AES来进行计算,面对国内自主可控、国产化推广的要求面临算法不合规的风险;某些算法通常采用算法替换的方式进行国产化改造,现有的一些保留格式国密算法改造几乎都是基于FF1的算法模型进行处理,都集成了原有的Feistel结构,只是在算法层面上进行SM4或者HMAC-SM3的算法替换。通常的,SM4\HMAC-SM3\AES性能遵循以下规律,即HMAC-SM3≤SM4<AES,从而造成算法性能整体下降。
鉴于上述原因,面对合规及高效的保留数据格式加密的应用场景,亟需本领域技术任意进行解决。
发明内容
有鉴于此,本发明提供了一种采用国产商用密码算法进行快速保留格式加密的计算方法,基于HMAC-SM3算法来实现国产商用密码算法替换和衍生密钥的提前计算,能够有效的降低过程计算复杂度,在保障算法安全的同时实现基于过程密码算法的快速保留格式加密。
为了实现上述目的,本发明采用如下技术方案:
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个字节来表示数字x
mod即为整除求余运算
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长度的字节
NUMradix(array)的计算遵循以下规则:
1.令x=0
2.针对array中每个元素a,按照排列顺序从小到大循环计算
x=x*radix+a
3.返回得到的整数x
STRm radix(x)的计算长度为m的一个整数数组Arr,遵循以下规则:
1.判断x应满足0≤x<radixm
2.从1开始到m递增,这个数组每个元素通过以下方式计算,即Arr[i-1]=x modradix
x=LI(x/radix)
R为保留格式计算后输出数组
计算流程
1加密流程
其计算过程遵循以下流程:
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||[umod 256]1||[n]4||[t]4||T
8.通过GetArr功能模块获取衍生出的字节信息S,其中GetArr中的密钥为K,种子数据为7中的P,计划获取的字节长度为d*10
9.令i从0开始,逐次累加1,进行10次循环计算,每一次计算都遵循以下流程:
1)从8中的S中获取本次计算的数据St,St=MID(S,i*d,d)(以0表示第一个元素)
2)将St通过NUM256转换为一个整数y
3)识别当前循环次数i是否为偶数,若为偶数则m=u;反之m=v
4)计算c=(NUMradix(A)+y)mod radixm
5)通过C=STRm radix(c)得到长度为m的整数数组C
6)将数组B赋值给A,将数组C赋值给B,同时递增i值
7)根据i值确认是否完成10次循环计算。若未完成则转到1)进行下一次计算;若已完成则将此时的数组A、数组B进行联合,输出最终的加密后的结果R
2解密流程
其计算过程遵循以下流程:
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||[umod 256]1||[n]4||[t]4||T
8.通过GetArr功能模块获取衍生出的字节信息S,其中GetArr中的密钥为K,种子数据为7中的P,计划获取的字节长度为d*10
9.令i从9开始,逐次累减1,进行10次循环计算,每一次计算都遵循以下流程:
1)从8中的S中获取本次计算的数据St,St=MID(S,i*d,d)(以0表示第一个元素)
2)将St通过NUM256转换为一个整数y
3)识别当前循环次数i是否为偶数,若为偶数则m=u;反之m=v
4)计算c=(NUMradix(B)-y)mod radixm
5)通过C=STRm radix(c)得到长度为m的整数数组C
6)将数组A赋值给B,将数组C赋值给A,同时递减i值
7)根据i值确认是否完成10次循环计算。若未完成则转到1)进行下一次计算;若已完成则将此时的数组A、数组B进行联合,输出最终的加密后的结果R
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明提供的加密算法流程图。
图2为本发明提供的解密算法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
1加密流程
其计算过程遵循以下流程:
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||[umod 256]1||[n]4||[t]4||T
8.通过GetArr功能模块获取衍生出的字节信息S,其中GetArr中的密钥为K,种子数据为7中的P,计划获取的字节长度为d*10
9.令i从0开始,逐次累加1,进行10次循环计算,每一次计算都遵循以下流程:
1)从8中的S中获取本次计算的数据St,St=MID(S,i*d,d)(以0表示第一个元素)
2)将St通过NUM256转换为一个整数y
3)识别当前循环次数i是否为偶数,若为偶数则m=u;反之m=v
4)计算c=(NUMradix(A)+y)mod radixm
5)通过C=STRm radix(c)得到长度为m的整数数组C
6)将数组B赋值给A,将数组C赋值给B,同时递增i值
7)根据i值确认是否完成10次循环计算。若未完成则转到1)进行下一次计算;若已完成则将此时的数组A、数组B进行联合,输出最终的加密后的结果R
2解密流程
其计算过程遵循以下流程:
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||[umod 256]1||[n]4||[t]4||T
8.通过GetArr功能模块获取衍生出的字节信息S,其中GetArr中的密钥为K,种子数据为7中的P,计划获取的字节长度为d*10
9.令i从9开始,逐次累减1,进行10次循环计算,每一次计算都遵循以下流程:
1)从8中的S中获取本次计算的数据St,St=MID(S,i*d,d)(以0表示第一个元素)
2)将St通过NUM256转换为一个整数y
3)识别当前循环次数i是否为偶数,若为偶数则m=u;反之m=v
4)计算c=(NUMradix(B)-y)mod radixm
5)通过C=STRm radix(c)得到长度为m的整数数组C
6)将数组A赋值给B,将数组C赋值给A,同时递减i值
7)根据i值确认是否完成10次循环计算。若未完成则转到1)进行下一次计算;若已完成则将此时的数组A、数组B进行联合,输出最终的加密后的结果R
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (4)
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个字节来表示数字x
mod即为整除求余运算
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长度的字节
NUMradix(array)的计算遵循以下规则:
(1).令x=0
(2).针对array中每个元素a,按照排列顺序从小到大循环计算
x=x*radix+a
(3).返回得到的整数x
STRm radix(x)的计算长度为m的一个整数数组Arr,遵循以下规则:
(1).判断x应满足0≤x<radixm
(2).从1开始到m递增,这个数组每个元素通过以下方式计算,即Arr[i-1]=x modradix
x=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||[umod 256]1||[n]4||[t]4||T
(8).通过GetArr功能模块获取衍生出的字节信息S,其中GetArr中的密钥为K,种子数据为7中的P,计划获取的字节长度为d*10
(9).令i从0开始,逐次累加1,进行10次循环计算,每一次计算都遵循以下流程:
1)从8中的S中获取本次计算的数据St,St=MID(S,i*d,d)(以0表示第一个元素)
2)将St通过NUM256转换为一个整数y
3)识别当前循环次数i是否为偶数,若为偶数则m=u;反之m=v
4)计算c=(NUMradix(A)+y)mod radixm
5)通过C=STRm radix(c)得到长度为m的整数数组C
6)将数组B赋值给A,将数组C赋值给B,同时递增i值
7)根据i值确认是否完成10次循环计算。若未完成则转到1)进行下一次计算;若已完成则将此时的数组A、数组B进行联合,输出最终的加密后的结果R
解密流程:
(10).明确radix、密钥K、IV向量T以及密文整数数组X
(11).分别获取X和T的元素大小,分别为n和t
(12).将n整除2,并通过LI函数获取小于等于此数的最大整数u,并计算v=n-u
(13).将X进行数组分割,A数组为X数组第1个元素到第u个元素;B数组为第u+1个元素到第n个元素;
(14).按照b=HI(HI(v*log(radix))/8)的计算流程获取整数b
(15).按照d=4*HI(b/4)+4的计算流程得到整数d
(16).组成字节数组P,P的组合规则符合P=[1]1||[2]1||[1]1||[radix] 3||[10]1||[umod 256]1||[n]4||[t]4||T
(17).通过GetArr功能模块获取衍生出的字节信息S,其中GetArr中的密钥为K,种子数据为7中的P,计划获取的字节长度为d*10
(18).令i从9开始,逐次累减1,进行10次循环计算,每一次计算都遵循以下流程:
1)从8中的S中获取本次计算的数据St,St=MID(S,i*d,d)(以0表示第一个元素)
2)将St通过NUM256转换为一个整数y
3)识别当前循环次数i是否为偶数,若为偶数则m=u;反之m=v
4)计算c=(NUMradix(B)-y)mod radixm
5)通过C=STRm radix(c)得到长度为m的整数数组C
6)将数组A赋值给B,将数组C赋值给A,同时递减i值
7)根据i值确认是否完成10次循环计算。若未完成则转到1)进行下一次计算;若已完成则将此时的数组A、数组B进行联合,输出最终的加密后的结果R 。
2.根据权利要求1所述的一种基于国产商用密码算法的快速保留数据格式计算方法,其特征在于,P的计算过程为:
P=[1]1||[2]1||[1]1||[radix]3||[10]1||[u mod 256]1||[n]4||[t]4||T。
3.根据权利要求1所述的一种基于国产商用密码算法的快速保留数据格式计算方法,其特征在于,通过提前计算出长度为10*d字节的过程数据S的方式来减少计算步骤。
4.根据权利要求1所述的一种基于国产商用密码算法的快速保留数据格式计算方法,其特征在于,通过HMAC-SM3/CMAC-SM4的方法来产生S,用于后续数据计算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210948413.7A CN115174039A (zh) | 2022-08-08 | 2022-08-08 | 一种基于国产商用密码算法的快速保留数据格式加密计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210948413.7A CN115174039A (zh) | 2022-08-08 | 2022-08-08 | 一种基于国产商用密码算法的快速保留数据格式加密计算方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115174039A true CN115174039A (zh) | 2022-10-11 |
Family
ID=83479503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210948413.7A Pending CN115174039A (zh) | 2022-08-08 | 2022-08-08 | 一种基于国产商用密码算法的快速保留数据格式加密计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115174039A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180091294A1 (en) * | 2016-09-26 | 2018-03-29 | Bank Of America Corporation | Progressive Key Rotation for Format Preserving Encryption (FPE) |
CN111783112A (zh) * | 2020-06-09 | 2020-10-16 | 北京三未信安科技发展有限公司 | 一种保留格式加密的快速实现方法、系统、介质及设备 |
CN113037488A (zh) * | 2021-04-19 | 2021-06-25 | 工业信息安全(四川)创新中心有限公司 | 基于国密密码杂凑算法的保留格式加密方法及解密方法 |
-
2022
- 2022-08-08 CN CN202210948413.7A patent/CN115174039A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180091294A1 (en) * | 2016-09-26 | 2018-03-29 | Bank Of America Corporation | Progressive Key Rotation for Format Preserving Encryption (FPE) |
CN111783112A (zh) * | 2020-06-09 | 2020-10-16 | 北京三未信安科技发展有限公司 | 一种保留格式加密的快速实现方法、系统、介质及设备 |
CN113037488A (zh) * | 2021-04-19 | 2021-06-25 | 工业信息安全(四川)创新中心有限公司 | 基于国密密码杂凑算法的保留格式加密方法及解密方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2351287B1 (en) | Method of generating a cryptographic key, network and computer program therefor | |
WO2018149912A1 (en) | Key exchange devices and method | |
CN109450640B (zh) | 基于sm2的两方签名方法及系统 | |
CN105099672A (zh) | 混合加密方法及实现该方法的装置 | |
CN109617671B (zh) | 加解密、扩展方法及装置、加解密系统、终端 | |
CN109474425B (zh) | 一种基于多个共享密钥获得任意指定长度派生密钥的方法 | |
US9418245B2 (en) | Encryption processing device, encryption processing method, and program | |
CN111832044B (zh) | 一种安全的协同计算处理方法及系统 | |
Le et al. | Algebraic differential fault analysis on SIMON block cipher | |
Shim et al. | Efficient Implementations of Rainbow and UOV using AVX2 | |
CN107248914B (zh) | 一种iOS设备上新型对称加密系统及加密方法 | |
CN115174039A (zh) | 一种基于国产商用密码算法的快速保留数据格式加密计算方法 | |
CN114826560B (zh) | 一种轻量级分组密码cref实现方法及系统 | |
CN107342855B (zh) | 基于sm2算法的签名方法 | |
CN116318660A (zh) | 一种消息扩展与压缩方法及相关装置 | |
CN114840174A (zh) | 一种使用多乘法器快速实现蒙哥马利模乘的系统及方法 | |
Patel et al. | A novel verifiable multi-secret sharing scheme based on elliptic curve cryptography | |
CN106936568B (zh) | 一种基于格的密码分析方法及装置 | |
CN107483204B (zh) | 一种国密sm2加密算法的优化处理方法及装置 | |
CN117254897B (zh) | 基于容错学习的身份基矩阵同态加密方法 | |
CN112822026B (zh) | 数字签名方法、装置及系统 | |
CN114785530B (zh) | 芯片的认证方法、装置、设备及存储介质 | |
CN115834163B (zh) | 加密数据的秘钥生成方法、装置、设备及存储介质 | |
CN115801261B (zh) | 一种基于国密算法的密文求交方法 | |
CN115801227B (zh) | 一种生成置换表的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |