CN112994874B - 一种基于消息鉴别码算法的保留格式加密方法及解密方法 - Google Patents
一种基于消息鉴别码算法的保留格式加密方法及解密方法 Download PDFInfo
- Publication number
- CN112994874B CN112994874B CN202110417012.4A CN202110417012A CN112994874B CN 112994874 B CN112994874 B CN 112994874B CN 202110417012 A CN202110417012 A CN 202110417012A CN 112994874 B CN112994874 B CN 112994874B
- Authority
- CN
- China
- Prior art keywords
- string
- type
- integer
- byte
- character
- 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.)
- Active
Links
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/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
- H04L9/0631—Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
Abstract
本发明提供一种基于消息鉴别码算法的保留格式加密方法及解密方法,所述加密方法包括:S11,字符串拆分:将输入的待加密明文P拆分为两个子字符串并分别转化为BN型整数;S12,字符串迭代:设置迭代索引号为i=0,1,2,…,7,对步骤S11得到的两个BN型整数进行8轮基于Feistel结构和PRF变换的迭代;所述PRF变换是基于消息鉴别码算法HMAC‑SM3的伪随机数字节生成函数;S13,字符串合并:将迭代得到的两个BN型整数分别转为字符串后串联合并为一个字符串,得到密文C。本发明的加密方法满足国产化以及安全性要求并且执行效率较高。
Description
技术领域
本发明涉及信息安全技术领域,具体而言,涉及一种基于消息鉴别码算法的保留格式加密方法及解密方法。
背景技术
如今,计算机技术飞速发展,每天都有各种各样的敏感数据在网络上传播。有大量第三方机构对这些敏感数据进行收集、分析、挖掘,这些数据在使用的过程中也导致了不少敏感数据泄漏的问题,甚至经常发生严重的隐私泄露事件,这可能造成无法弥补的损失。在实际应用中,常见的防护手段是对这些敏感数据进行加密。但是对数据库中具有特定格式的数据,比如银行卡号、身份证号等敏感数据,使用传统的分组密码算法直接进行加密会出现一系列的问题,比如通常会导致数据长度的扩展,使得数据的类型发生变化等,这就需要修改数据库结构或应用程序来适应传统加密带来的这些变化,成本非常高。为了解决这类敏感数据的加密问题,保留格式加密(format-preserving encryption,简称FPE)被提了出来。FPE可以用来进行数据遮蔽,即通过对原始数据进行掩码转换,输出一个与原始数据的格式、关联等均一模一样的数据,从而解决从生产环境的数据向测试环境(或者开发环境)导入时可能产生的数据内容安全问题。
近年来,美国国家标准与技术研究院(National Institute of Standards andTechnology,NIST)就此问题进行了研究,并发布了NISTSP 800-38G文档,提出了FPE算法FF1、FF3-1等。FF1和FF3-1算法都将待加密消息一分为二(分别记为左支数据和右支数据),以AES系列算法为基础,采用10轮Feistel结构执行迭代,最后再将左右两块数据拼接在一起。在每一轮迭代中,右支数据进入轮函数进行基于AES的加密后得到轮函数的输出,然后,左支数据再与此轮函数的输出进行模加后得到更新后的左支数据;最后交换左右两支数据后进入下一轮。如此反复,直至迭代结束。
然而NIST提出的这些FPE算法FF1和FF3-1在使用中存在诸多问题难以解决,具体如下:
(1)首先,这些FPE算法的执行效率非常慢,比其普通的加密模块,如ECB、CBC、CTR等,执行效率显著下降;比如目前的PC机执行AES加密16个字节通常不到1个微秒;但FF1和FF3-1的加密时间是这些加密时间的几十倍至上百倍。
(2)其次,《中华人民共和国密码法》的出台并正式实施,各行业大力推进我国商用密码的应用和落地,而NIST提出的这些FPE算法均使用国外的AES系列算法,而非我国商用密码算法,这使得这些FPE算法难以实施。
发明内容
本发明旨在提供一种基于消息鉴别码算法的保留格式加密方法及解密方法,以解决上述NIST提出的FPE算法存在的问题。
本发明提供的一种基于消息鉴别码算法的保留格式加密方法,包括如下步骤:
S11,字符串拆分:将输入的待加密明文P拆分为两个子字符串并分别转化为BN型整数;
S12,字符串迭代:设置迭代索引号为i=0,1,2,…,7,对步骤S11得到的两个BN型整数进行8轮基于Feistel结构和PRF变换的迭代;所述PRF变换是基于消息鉴别码算法HMAC-SM3的伪随机数字节生成函数;
S13,字符串合并:将迭代得到的两个BN型整数分别转为字符串后串联合并为一个字符串,得到密文C。
进一步的,步骤S11包括如下子步骤:
A←P[1,…,u],B←P[u+1,…,n]
其中,P[1,…,u]表示明文字符串P中的第1至u个字符,P[u+1,…,n]表示明文字符串P中的第u至n个字符;即将明文字符串P中的第1至u个字符赋值给字符串A,将明文字符串P中的第u+1至n个字符赋值给字符串B;
S113,将这两个字符串A和B分别转为BN型整数α和β:
α←NUM radix (REV(A)),β←NUM radix (REV(B))。
进一步的,步骤S12包括如下子步骤:
S121,组合16个字节的字节串Q:
式中,mod表示模运算,即取余数,即:
(1)当imod 2=0,即当迭代索引号i为偶数时,字节串Q为:
取调节因子T的第5~7个字节T[5..7];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将此结果左移4比特得到(T[4]^0x0F)<<4;再将(T[4]^0x0F)<<4与[i]1做异或运算,得到((T[4]^0x0F)<<4)⊕[i]1;
最后将T[5..7]、((T[4]^0x0F)<<4)⊕[i]1以及[β]12做串联得到字节串Q;
(2)当imod 2≠0,即当迭代索引号i为奇数时,字节串Q为:
取调节因子T的第1~3个字节T[1..3];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将T[4]^0x0F与[i]1做异或运算,得到(T[4]^0x0F)⊕[i]1;
最后将T[1..3]、(T[4]^0x0F)⊕[i]1以及[β]12做串联得到字节串Q;
其中,[i]1表示将i转换为长度为1的字节串,[β]12表示将β转换为长度为12的字节串;
S122,将字节串Q利用PRF变换计算消息鉴别码得到字节串E:
E←PRF REVB(K)(REVB(Q))
S123,将字节串E转为BN型整数γ:
γ←NUM(E)
S124,执行模加运算得到BN型整数δ:
δ←(α+γ) mod radix m
即将BN型整数α和步骤S123得到的BN型整数γ相加后,将相加的结果与radix m 进行模运算,并将模运算结果赋值给BN型整数δ;
其中,INT型整数m的取值为,如果i mod 2=0,m←u,否则m←v;即当迭代索引号i为偶数时,将u赋值给m;当迭代索引号i为奇数时,将v赋值给m;
S125,左右互换,即α←β,β←δ;即将BN型整数β赋值给BN型整数α,再将步骤S124得到的BN型整数δ赋值给BN型整数β;
S126,按迭代次数重复执行步骤S121~S125,迭代完成后得到BN型整数α和β。
进一步的,步骤S121中的所述字节串Q能够做如下简化:
S1211,分别计算两个字节B E 和B o :
B E ←(T[4]^0x0F)<<4,B o ←T[4]^0x0F
即,将(T[4]^0x0F)<<4赋值给B E ,将T[4]^0x0F赋值给B o ;
S1212,字节串Q简化为:
即:
(1)当imod 2=0,即当迭代索引号i为偶数时,字节串Q为:
取调节因子T的第5~7个字节T[5..7];
将B E 与[i]1做异或运算,得到B E ⊕[i]1;
最后将T[5..7]、B E ⊕[i]1以及[β]12做串联得到字节串Q;
(2)当imod 2≠0,即当迭代索引号i为奇数时,字节串Q为:
取调节因子T的第1~3个字节T[1..3];
将B o 与[i]1做异或运算,得到B o ⊕[i]1;
最后将T[1..3]、B o ⊕[i]1以及[β]12做串联得到字节串Q。
进一步的,步骤S122中所述PRF变换的方法为:对字节串Q执行基于HMAC-SM3的消息鉴别码,然后对消息鉴别码截断得到m字节的字节串E。
进一步的,步骤S13包括如下子步骤:
S131,将步骤S126得到的BN型整数α和β分别转为字符串A和B:
S132,串联字符串A和B,C←A||B,返回密文C。
本发明还提供一种基于消息鉴别码算法的保留格式解密方法,所述解密方法用于对上述的加密方法得到的密文C进行解密;包括如下步骤:
S21,字符串拆分:将输入的待解密密文P拆分为两个子字符串并分别转化为BN型整数;
S22,字符串迭代:设置迭代索引号为i=7,6,…,0,对步骤S21得到的两个BN型整数进行8轮基于Feistel结构和PRF变换的迭代;所述PRF变换是基于消息鉴别码算法HMAC-SM3的伪随机数字节生成函数;
S23,字符串合并:将迭代得到的两个BN型整数分别转为字符串后串联合并为一个字符串,得到明文P。
进一步的,步骤S21包括如下子步骤:
A←C[1,…,u],B←C[u+1,…,n]
其中,C[1,…,u]表示密文C中的第1至u个字符,C[u+1,…,n]表示密文C中的第u至n个字符;即将密文C中的第1至u个字符赋值给字符串A,将密文C中的第u+1至n个字符赋值给字符串B;
S213,将这两个字符串A和B分别转为BN型整数α和β:
α←NUM radix (REV(A)),β←NUM radix (REV(B))。
进一步的,步骤S22包括如下子步骤:
S221,组合16个字节的字节串Q:
即:
式中,mod表示模运算,即取余数,即:
(1)当imod 2=0,即当迭代索引号i为偶数时,字节串Q为:
取调节因子T的第5~7个字节T[5..7];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将此结果左移4比特得到(T[4]^0x0F)<<4;再将(T[4]^0x0F)<<4与[i]1做异或运算,得到((T[4]^0x0F)<<4)⊕[i]1;
最后将T[5..7]、((T[4]^0x0F)<<4)⊕[i]1以及[α]12做串联得到字节串Q;
(2)当imod 2≠0,即当迭代索引号i为奇数时,字节串Q为:
取调节因子T的第1~3个字节T[1..3];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将T[4]^0x0F与[i]1做异或运算,得到(T[4]^0x0F)⊕[i]1;
最后将T[1..3]、(T[4]^0x0F)⊕[i]1以及[α]12做串联得到字节串Q;
其中,[i]1表示将i转换为长度为1的字节串,[α]12表示将α转换为长度为12的字节串;
S222,将字节串Q利用PRF变换计算消息鉴别码得到字节串E:
E←PRF REVB(K)(REVB(Q))
S223,将字节串E转为BN型整数γ:
γ←NUM(E)
S224,执行模减运算得到BN型整数δ:
δ←(β-γ) mod radix m
即将BN型整数β和步骤S223得到的BN型整数γ相减后,将相减的结果再与radix m 进行模运算,并将模运算结果赋值给BN型整数δ;
其中,INT型整数m的取值为,如果i mod 2=0,m←u,否则m←v;即当迭代索引号i为偶数时,将u赋值给m;当迭代索引号i为奇数时,将v赋值给m;
S225,左右互换,即β←α,α←δ;即将BN型整数α赋值给BN型整数β,再将步骤S124得到的BN型整数δ赋值给BN型整数α;
S226,按迭代次数重复执行步骤S221~S225,迭代完成后得到BN型整数α和β。
进一步的,步骤S23包括如下子步骤:
S231,将步骤S226得到的BN型整数α和β分别转为字符串A和B:
S232,串联字符串A和B,P←A||B,返回明文P。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
1、本发明的加密方法的执行效率显著优于NIST的FF1算法
2、本发明具有足够的安全性。
3、本发明采用国产密码算法SM3作为核心密码算法,因此可以在我国各行业的商用密码应用实施方案中应用。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明的数据类型转换示意图。
图2为本发明实施例1加密方法的流程图。
图3为本发明实施例1字符串拆分的流程图。
图4为本发明实施例1字符串迭代的流程图。
图5为本发明实施例1字符串合并的流程图。
图6为本发明实施例2的解密方法的流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先介绍本发明涉及的基本概念:
1、数据类型
(1)字符型和字符串:定义由radix个字符char 0,char 1,…, char radix-1,组成的字符表为chars={char 0,char 1,…, char radix-1},称字符表中字符个数radix为字符表chars的基数。字符串为字符表中有限个字符组成的字符序列,也称为radix字符串。记chars n 为由字符表chars={char 0,char 1,…, char radix-1}中字符组成的长度为n的字符串的集合。明文和密文是由字符表chars中的多个字符组成的字符串。例如,最常见的数字字符表为chars={0,1,…,9},radix=10,明文和密文在集合chars n ={0,1,…,9} n 中。常见的基数radix取值除了之前提到的10之外有2、26、95等,这些分别对应比特、字母(仅大写字母或仅小写字母)、可打印ASCII字符(空格被视为可打印字符)的字符表。
(2)字节和字节串:本发明提及的字节为通常意义上的字节,即为8个0、1比特组成的字节。字节串为有限个字节组成的字节序列。
(3)整数:即普通的整数。本发明中将值较小的整数(比如不大于232)记为INT型整数,将数值可能较大的整数记为BN型整数,比如值为296的整数只能表示为BN型整数。
2、数据类型转换
本发明的数据类型转换如图1所示。具体如下:
(1)整数转为字符串:任意给定一个非负整数x满足0≤x≤radix m ,radix m 表示radix的m次方,记将整数转为字符串的函数为,其具体含义是将x按大端表示法表示为radix字符的字符串X且字符串长度不大于m,即,i=1,2,…,m。即将非负整数x除以radix的i-1次方后,将得到的值再与radix做模运算,将模运算结果作为字符串X的m+1-i个字符。
(2)整数转字节串[x] s :任意给定一个非负整数x满足0≤x≤256 s ,记将整数转为字节串的函数为[x] s ,其具体含义是将x按大端表示法表示为字节长度为s的字节串,即,i=1,2,…,m。即将整数x除以256的i-1次方后,将得到的值再与256做模运算,将模运算结果作为字节串X的m+1-i个字符,这里的256为1个字节的大小。
(3)字符串转整数NUM radix (X):任意给定一个定义在基数为radix的字符集上的字符串X,记将字符串转为整数的函数为NUM radix (X),其具体含义是将按大端表示法表示的radix字符串X,转化为一个普通的非负整数x,即,即将字符串X的m+1-i个字符与radix的i-1次方相乘,将i=1,2,…,m时的相乘结果累加后得到非负整数x。
(4)字节串转整数NUM(X):任意给定一个字符串X,记将字节串转为整数的函数为NUM(X),其具体含义是将按大端表示法表示的字节串X,转化为一个普通的非负整数x,即,即将字节串X的m+1-i个字节与256的i-1次方相乘,将i=1,2,…,m时的相乘结果累加后得到非负整数x。
3、主要数据
(1)明文:明文是由字符表chars={char 0,char 1,…,char radix-1}中的多个字母组成的字符串。比如由11个数字构成的电话号码。
(2)密文:明文是由字符表chars={char 0,char 1,…,char radix-1}中的多个字母组成的字符串。比如由18个数字构成的字符串。
(3)调节因子:调节因子是多个字节构成的字节串,类似于CBC模式中的初始向量IV和OCB模式中的NONCE值。调节因子的作用有:改变调节因子比改变密钥代的价小,因为改变密钥必然需要重新进行子密钥扩展,而子密钥扩展算法通常都较复杂;调节值可以公开,无需像密钥一样保密;FPE方案中的密文空间比较小,使用不同的调节因子可使得同一密钥对同一明文加密得到不同的密文值,从而增加密文的多变性。
(4)密钥:秘密信息,字节串。
4、记号、缩写与符号
本发明主要涉及的记号、缩写与符号如下:
(1)chars={char 0,char 1,…,char radix-1}:由radix个字符char 0,char 1,…,char radix-1组成的字符表。
(2)radix:字符表chars={char 0,char 1,…,char radix-1}的基数。
(3)chars n :由字符表chars={char 0,char 1,…,char radix-1}中字符组成的长度为n的字符串的集合。
(5)[x] s :整数x转字节串的函数。
(6)NUM radix (X):radix字符串转整数的函数。
(7)NUM(X):字节串转整数的函数。
(8)A←B:赋值,将B的值给A。
(9)A||B:串联,将A和B按A在左端、B在右端的顺序串联在一起。
(10)^:与运算。
(11)<<:左移位运算。
(12)X[i]:对字符串/字节串X,取其第i个字符/字节。
(13)X[i,…,j]:对字符串/字节串X,取其第i至j个字符/字节,形成新的子串。
(16)REV(X):对字符串X做字符级的逆向输出为Y,即Y[m+1-i]=X[i],;即将字符串X中的第i个字符作为字符串Y的m+1-i个字符。例如大写字母串X为“ABCDEFG”,REV(X)则为“GFEDCBA”。
(17)REVB(X):对字节串X做字节级的逆向输出为Y,即Y[m+1-i]=X[i],;即将字节串X中的第i个字节作为字节串Y的m+1-i个字节。例如字节串X十六进制表示为“0123456789ABCDEF”,REVB(X)十六进制表示为“EFCDAB8967452301”。
(18)HMAC-SM3 K (M):使用密钥K对数据M计算消息鉴别码HMAC(HMAC按HMAC的标准执行),其中使用SM3作为底层杂凑函数。
实施例1
如图2所示,本实施例提出一种基于消息鉴别码算法的保留格式加密方法,记所述加密方法表示为GMFPE-Enc(K,T,P),包括如下步骤:
S11,如图3所示,字符串拆分:将输入的待加密明文P拆分为两个子字符串并分别转化为BN型整数:
具体地:
S111,输入:
密钥K,本实施例中密钥K为不少于16字节的字节串;
长度为7个字节的调节因子T;
A←P[1,…,u],B←P[u+1,…,n]
其中,P[1,…,u]表示明文字符串P中的第1至u个字符,P[u+1,…,n]表示明文字符串P中的第u至n个字符;即将明文字符串P中的第1至u个字符赋值给字符串A,将明文字符串P中的第u+1至n个字符赋值给字符串B;
S113,将这两个字符串A和B分别转为BN型整数α和β:
α←NUM radix (REV(A)),β←NUM radix (REV(B))。
S12,如图4所示,字符串迭代:设置迭代索引号为i=0,1,2,…,7,对步骤S11得到的两个BN型整数进行8轮基于Feistel结构和PRF变换的迭代;所述PRF变换是基于消息鉴别码算法HMAC-SM3的伪随机数字节生成函数;
具体地:
S121,组合16个字节的字节串Q:
式中,mod表示模运算,即取余数,即:
(1)当imod 2=0,即当迭代索引号i为偶数时,字节串Q为:
取调节因子T的第5~7个字节T[5..7];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将此结果左移4比特得到(T[4]^0x0F)<<4;再将(T[4]^0x0F)<<4与[i]1做异或运算,得到((T[4]^0x0F)<<4)⊕[i]1;
最后将T[5..7]、((T[4]^0x0F)<<4)⊕[i]1以及[β]12做串联得到字节串Q;
(2)当imod 2≠0,即当迭代索引号i为奇数时,字节串Q为:
取调节因子T的第1~3个字节T[1..3];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将T[4]^0x0F与[i]1做异或运算,得到(T[4]^0x0F)⊕[i]1;
最后将T[1..3]、(T[4]^0x0F)⊕[i]1以及[β]12做串联得到字节串Q;
其中,[i]1表示将i转换为长度为1的字节串,[β]12表示将β转换为长度为12的字节串;
优选地,所述字节串Q能够做如下简化:
S1211,分别计算两个字节B E 和B o ,
B E ←(T[4]^0x0F)<<4,B o ←T[4]^0x0F
即,将(T[4]^0x0F)<<4赋值给B E ,将T[4]^0x0F赋值给B o ;
S1212,字节串Q简化为:
即:
(1)当imod 2=0,即当迭代索引号i为偶数时,字节串Q为:
取调节因子T的第5~7个字节T[5..7];
将B E 与[i]1做异或运算,得到B E ⊕[i]1;
最后将T[5..7]、B E ⊕[i]1以及[β]12做串联得到字节串Q;
(2)当imod 2≠0,即当迭代索引号i为奇数时,字节串Q为:
取调节因子T的第1~3个字节T[1..3];
将B o 与[i]1做异或运算,得到B o ⊕[i]1;
最后将T[1..3]、B o ⊕[i]1以及[β]12做串联得到字节串Q。
S122,将字节串Q利用PRF变换计算消息鉴别码得到字节串E:
E←PRF REVB(K)(REVB(Q))
所述PRF变换的方法为:对字节串Q简执行基于HMAC-SM3的消息鉴别码,然后对消息鉴别码截断得到m字节的字节串E。本实施例提供以下三种PRF变换方案:
方案一:设定m为16,先执行W←HMAC-SM3 K (X),然后取W的高16字节W[1..16]作为输出的m字节的字节串E。
方案二:设定m为16,先执行W←HMAC-SM3 K (X),然后取W的低16字节W[17..32]作为输出的m字节的字节串E。
方案三:设定m为32,先执行W←HMAC-SM3 K (X),然后取W的全部32字节W[1..32]作为输出的m字节的字节串E。
S123,将字节串E转为BN型整数γ:
γ←NUM(E)
S124,执行模加运算得到BN型整数δ:
δ←(α+γ) mod radix m
即将BN型整数α和步骤S123得到的BN型整数γ相加后,将相加的结果与radix m 进行模运算,并将模运算结果赋值给BN型整数δ;
其中,INT型整数m的取值为,如果i mod 2=0,m←u,否则m←v;即当迭代索引号i为偶数时,将u赋值给m;当迭代索引号i为奇数时,将v赋值给m;
S125,左右互换,即α←β,β←δ;即将BN型整数β赋值给BN型整数α,再将步骤S124得到的BN型整数δ赋值给BN型整数β;
S126,按迭代次数重复执行步骤S121~S125,迭代完成后得到BN型整数α和β;
S13,如图5所示,字符串合并:将迭代得到的两个BN型整数分别转为字符串后串联合并为一个字符串,得到密文C;
具体地:
S131,将步骤S126得到的BN型整数α和β分别转为字符串A和B:
S132,串联字符串A和B,C←A||B,返回密文C。
本发明实施例的加密方法具有如下有益效果:
1、效率方面:
(1)本发明的加密方法与NIST的FF1算法的关键部件执行次数对比如表1所示。
从表1可知,在保留格式加密算法中,类型转换的耗时比调用密码函数的耗时高的多,特别是整数转字符串和字符串转整数。在本发明中只需进行2次整数转字符串和字符串转整数,比起FF3-1的8次和16次,其执行次数均少得多。整数与字节串的互转次数与FF3-1相当。此外,加密函数调用方面,FF3-1算法需执行8次AES加密,本发明执行8次HMAC-SM3,与FF3-1相当。
(2)本发明的加密方法与NIST的FF1算法的加密时间对比如表2所示。测试环境为Win10操作系统,Intel Corei5-10210U CPU @ 1.60GHz处理器,16.0 GB RAM。测试方式为各算法分别对模拟生成的106个样本,进行加密,每个样本是18位数字。
表2:
传统做法NIST的FF3-1 | 本发明 | |
加密时间 | 13.972秒 | 7.791秒 |
从表2可知,本发明的加密方法的执行效率显著优于NIST的FF1算法。
2、安全性方面,本发明采用通用的经过论证的Feistel架构,执行轮数与FF3-1一样为8轮,这些都确保本发明具有足够的安全性。
3、本发明采用国产密码算法SM3作为核心密码算法,因此可以在我国各行业的商用密码应用实施方案中应用。
实施例2
本实施例提供一种基于消息鉴别码算法的保留格式解密方法,所述解密方法用于对实施例1所述的加密方法得到的密文C进行解密,也即实施例1的加密方法的逆运算;如图6所示,记所述加密方法表示为GMFPE-Dec(K,T,P),包括如下步骤:
S21,字符串拆分:将输入的待解密密文P拆分为两个子字符串并分别转化为BN型整数;
具体地:
A←C[1,…,u],B←C[u+1,…,n]
其中,C[1,…,u]表示密文C中的第1至u个字符,C[u+1,…,n]表示密文C中的第u至n个字符;即将密文C中的第1至u个字符赋值给字符串A,将密文C中的第u+1至n个字符赋值给字符串B;
S213,将这两个字符串A和B分别转为BN型整数α和β:
α←NUM radix (REV(A)),β←NUM radix (REV(B))。
S22,符串迭代:设置迭代索引号为i=7,6,…,0,对步骤S21得到的两个BN型整数进行8轮基于Feistel结构和PRF变换的迭代;所述PRF变换是基于消息鉴别码算法HMAC-SM3的伪随机数字节生成函数;
具体地:
S221,组合16个字节的字节串Q:
即:
式中,mod表示模运算,即取余数,即:
(1)当imod 2=0,即当迭代索引号i为偶数时,字节串Q为:
取调节因子T的第5~7个字节T[5..7];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将此结果左移4比特得到(T[4]^0x0F)<<4;再将(T[4]^0x0F)<<4与[i]1做异或运算,得到((T[4]^0x0F)<<4)⊕[i]1;
最后将T[5..7]、((T[4]^0x0F)<<4)⊕[i]1以及[α]12做串联得到字节串Q;
(2)当imod 2≠0,即当迭代索引号i为奇数时,字节串Q为:
取调节因子T的第1~3个字节T[1..3];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将T[4]^0x0F与[i]1做异或运算,得到(T[4]^0x0F)⊕[i]1;
最后将T[1..3]、(T[4]^0x0F)⊕[i]1以及[α]12做串联得到字节串Q;
其中,[i]1表示将i转换为长度为1的字节串,[α]12表示将α转换为长度为12的字节串;
S222,将字节串Q利用PRF变换计算消息鉴别码得到字节串E:
E←PRF REVB(K)(REVB(Q))
S223,将字节串E转为BN型整数γ:
γ←NUM(E)
S224,执行模减运算得到BN型整数δ:
δ←(β-γ) mod radix m
即将BN型整数β和步骤S223得到的BN型整数γ相减后,将相减的结果再与radix m 进行模运算,并将模运算结果赋值给BN型整数δ;
其中,INT型整数m的取值为,如果i mod 2=0,m←u,否则m←v;即当迭代索引号i为偶数时,将u赋值给m;当迭代索引号i为奇数时,将v赋值给m;
S225,左右互换,即β←α,α←δ;即将BN型整数α赋值给BN型整数β,再将步骤S124得到的BN型整数δ赋值给BN型整数α;
S226,按迭代次数重复执行步骤S221~S225,迭代完成后得到BN型整数α和β;
S23,字符串合并:将迭代得到的两个BN型整数分别转为字符串后串联合并为一个字符串,得到明文P;
具体地:
S232,串联字符串A和B,P←A||B,返回明文P。
其中,字节串Q的简化方式以及PRF变换的方法均与实施例1一致,在此不再赘述。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种基于消息鉴别码算法的保留格式加密方法,其特征在于,包括如下步骤:
S11,字符串拆分:将输入的待加密明文P拆分为两个子字符串并分别转化为BN型整数;其中,将数值较小的整数记为INT型整数,将数值较大的整数记为BN型整数;
S12,字符串迭代:设置迭代索引号为i=0,1,2,…,7,对步骤S11得到的两个BN型整数进行8轮基于Feistel结构和PRF变换的迭代;所述PRF变换是基于消息鉴别码算法HMAC-SM3的伪随机数字节生成函数;
S13,字符串合并:将迭代得到的两个BN型整数分别转为字符串后串联合并为一个字符串,得到密文C;
步骤S11包括如下子步骤:
A←P[1,…,u],B←P[u+1,…,n]
其中,P[1,…,u]表示明文字符串P中的第1至u个字符,P[u+1,…,n]表示明文字符串P中的第u至n个字符;即将明文字符串P中的第1至u个字符赋值给字符串A,将明文字符串P中的第u+1至n个字符赋值给字符串B;
S113,将这两个字符串A和B分别转为BN型整数α和β:
α←NUM radix (REV(A)),β←NUM radix (REV(B));
步骤S12包括如下子步骤:
S121,组合16个字节的字节串Q:
式中,mod表示模运算,即取余数,即:
(1)当imod 2=0,即当迭代索引号i为偶数时,字节串Q为:
取调节因子T的第5~7个字节T[5..7];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将此结果左移4比特得到(T[4]^0x0F)<<4;再将(T[4]^0x0F)<<4与[i]1做异或运算,得到((T[4]^0x0F)<<4)⊕[i]1;
最后将T[5..7]、((T[4]^0x0F)<<4)⊕[i]1以及[β]12做串联得到字节串Q;
(2)当imod 2≠0,即当迭代索引号i为奇数时,字节串Q为:
取调节因子T的第1~3个字节T[1..3];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将T[4]^0x0F与[i]1做异或运算,得到(T[4]^0x0F)⊕[i]1;
最后将T[1..3]、(T[4]^0x0F)⊕[i]1以及[β]12做串联得到字节串Q;
其中,[i]1表示将i转换为长度为1的字节串,[β]12表示将β转换为长度为12的字节串;
S122,将字节串Q利用PRF变换计算消息鉴别码得到字节串E:
E←PRF REVB(K)(REVB(Q))
S123,将字节串E转为BN型整数γ:
γ←NUM(E)
S124,执行模加运算得到BN型整数δ:
δ←(α+γ) mod radix m
即将BN型整数α和步骤S123得到的BN型整数γ相加后,将相加的结果与radix m 进行模运算,并将模运算结果赋值给BN型整数δ;
其中,INT型整数m的取值为,如果i mod 2=0,m←u,否则m←v;即当迭代索引号i为偶数时,将u赋值给m;当迭代索引号i为奇数时,将v赋值给m;
S125,左右互换,即α←β,β←δ;即将BN型整数β赋值给BN型整数α,再将步骤S124得到的BN型整数δ赋值给BN型整数β;
S126,按迭代次数重复执行步骤S121~S125,迭代完成后得到BN型整数α和β。
2.根据权利要求1所述的基于消息鉴别码算法的保留格式加密方法,其特征在于,步骤S121中的所述字节串Q能够做如下简化:
S1211,分别计算两个字节B E 和B o :
B E ←(T[4]^0x0F)<<4,B o ←T[4]^0x0F
即,将(T[4]^0x0F)<<4赋值给B E ,将T[4]^0x0F赋值给B o ;
S1212,字节串Q简化为:
即:
(1)当imod 2=0,即当迭代索引号i为偶数时,字节串Q为:
取调节因子T的第5~7个字节T[5..7];
将B E 与[i]1做异或运算,得到B E ⊕[i]1;
最后将T[5..7]、B E ⊕[i]1以及[β]12做串联得到字节串Q;
(2)当imod 2≠0,即当迭代索引号i为奇数时,字节串Q为:
取调节因子T的第1~3个字节T[1..3];
将B o 与[i]1做异或运算,得到B o ⊕[i]1;
最后将T[1..3]、B o ⊕[i]1以及[β]12做串联得到字节串Q。
3.根据权利要求1所述的基于消息鉴别码算法的保留格式加密方法,其特征在于,步骤S122中所述PRF变换的方法为:对字节串Q执行基于HMAC-SM3的消息鉴别码,然后对消息鉴别码截断得到m字节的字节串E。
5.一种基于消息鉴别码算法的保留格式解密方法,其特征在于,所述解密方法用于对权利要求1至4任一项所述的加密方法得到的密文C进行解密;包括如下步骤:
S21,字符串拆分:将输入的待解密密文P拆分为两个子字符串并分别转化为BN型整数;
S22,字符串迭代:设置迭代索引号为i=7,6,…,0,对步骤S21得到的两个BN型整数进行8轮基于Feistel结构和PRF变换的迭代;所述PRF变换是基于消息鉴别码算法HMAC-SM3的伪随机数字节生成函数;
S23,字符串合并:将迭代得到的两个BN型整数分别转为字符串后串联合并为一个字符串,得到明文P;
步骤S21包括如下子步骤:
A←C[1,…,u],B←C[u+1,…,n]
其中,C[1,…,u]表示密文C中的第1至u个字符,C[u+1,…,n]表示密文C中的第u至n个字符;即将密文C中的第1至u个字符赋值给字符串A,将密文C中的第u+1至n个字符赋值给字符串B;
S213,将这两个字符串A和B分别转为BN型整数α和β:
α←NUM radix (REV(A)),β←NUM radix (REV(B));
步骤S22包括如下子步骤:
S221,组合16个字节的字节串Q:
即:
式中,mod表示模运算,即取余数,即:
(1)当imod 2=0,即当迭代索引号i为偶数时,字节串Q为:
取调节因子T的第5~7个字节T[5..7];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将此结果左移4比特得到(T[4]^0x0F)<<4;再将(T[4]^0x0F)<<4与[i]1做异或运算,得到((T[4]^0x0F)<<4)⊕[i]1;
最后将T[5..7]、((T[4]^0x0F)<<4)⊕[i]1以及[α]12做串联得到字节串Q;
(2)当imod 2≠0,即当迭代索引号i为奇数时,字节串Q为:
取调节因子T的第1~3个字节T[1..3];
取调节因子T的第4个字节T[4],将T[4]与一个十六进制数0x0F做与运算,得到T[4]^0x0F;再将T[4]^0x0F与[i]1做异或运算,得到(T[4]^0x0F)⊕[i]1;
最后将T[1..3]、(T[4]^0x0F)⊕[i]1以及[α]12做串联得到字节串Q;
其中,[i]1表示将i转换为长度为1的字节串,[α]12表示将α转换为长度为12的字节串;
S222,将字节串Q利用PRF变换计算消息鉴别码得到字节串E:
E←PRF REVB(K)(REVB(Q))
S223,将字节串E转为BN型整数γ:
γ←NUM(E)
S224,执行模减运算得到BN型整数δ:
δ←(β-γ) mod radix m
即将BN型整数β和步骤S223得到的BN型整数γ相减后,将相减的结果再与radix m 进行模运算,并将模运算结果赋值给BN型整数δ;
其中,INT型整数m的取值为,如果i mod 2=0,m←u,否则m←v;即当迭代索引号i为偶数时,将u赋值给m;当迭代索引号i为奇数时,将v赋值给m;
S225,左右互换,即β←α,α←δ;即将BN型整数α赋值给BN型整数β,再将步骤S124得到的BN型整数δ赋值给BN型整数α;
S226,按迭代次数重复执行步骤S221~S225,迭代完成后得到BN型整数α和β。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110417012.4A CN112994874B (zh) | 2021-04-19 | 2021-04-19 | 一种基于消息鉴别码算法的保留格式加密方法及解密方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110417012.4A CN112994874B (zh) | 2021-04-19 | 2021-04-19 | 一种基于消息鉴别码算法的保留格式加密方法及解密方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112994874A CN112994874A (zh) | 2021-06-18 |
CN112994874B true CN112994874B (zh) | 2021-07-27 |
Family
ID=76341023
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110417012.4A Active CN112994874B (zh) | 2021-04-19 | 2021-04-19 | 一种基于消息鉴别码算法的保留格式加密方法及解密方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112994874B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113259934A (zh) * | 2021-06-25 | 2021-08-13 | 贵州大学 | 一种短信验证码加密方法、解密方法及加解密系统 |
WO2023017292A1 (en) * | 2021-08-10 | 2023-02-16 | Petkov Svetlozar | Encryption system and method based on random numbers from 1 to 1 quintillion (10^18) with no key and no metadata |
CN114285609B (zh) * | 2021-12-10 | 2024-02-13 | 中国联合网络通信集团有限公司 | 加密方法、装置、设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102761414A (zh) * | 2011-04-26 | 2012-10-31 | 航天信息股份有限公司 | 一种sm3密码杂凑算法及确定其中的变量字的方法 |
CN104811298A (zh) * | 2015-05-14 | 2015-07-29 | 中国联合网络通信集团有限公司 | 一种实现加密的方法及装置 |
CN107124278A (zh) * | 2017-03-30 | 2017-09-01 | 腾讯科技(深圳)有限公司 | 业务处理方法、装置以及数据共享系统 |
CN107493169A (zh) * | 2017-09-26 | 2017-12-19 | 安徽皖通邮电股份有限公司 | 一种基于量子密钥和国密算法的身份鉴别方法 |
CN108173640A (zh) * | 2017-12-11 | 2018-06-15 | 上海高顿教育培训有限公司 | 一种高安全性的字符串对称加密和解密方法 |
CN108831048A (zh) * | 2018-09-20 | 2018-11-16 | 安徽亘达信息科技有限公司 | 一种基于扫码信息的智能收发卡计费系统及方法 |
CN110008753A (zh) * | 2019-04-12 | 2019-07-12 | 长春嘉诚信息技术股份有限公司 | 一种在业务数据敏感领域内的数据处理方法及系统 |
CN110299989A (zh) * | 2019-06-10 | 2019-10-01 | 南通大学 | 一种中英文字符串的加密、解密方法 |
CN110677237A (zh) * | 2019-11-04 | 2020-01-10 | 郑州轻工业学院 | 一种具有似混沌特性的文件加密方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108234501B (zh) * | 2018-01-11 | 2020-12-11 | 北京中电普华信息技术有限公司 | 一种基于量子密钥融合的虚拟电厂安全通信方法 |
-
2021
- 2021-04-19 CN CN202110417012.4A patent/CN112994874B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102761414A (zh) * | 2011-04-26 | 2012-10-31 | 航天信息股份有限公司 | 一种sm3密码杂凑算法及确定其中的变量字的方法 |
CN104811298A (zh) * | 2015-05-14 | 2015-07-29 | 中国联合网络通信集团有限公司 | 一种实现加密的方法及装置 |
CN107124278A (zh) * | 2017-03-30 | 2017-09-01 | 腾讯科技(深圳)有限公司 | 业务处理方法、装置以及数据共享系统 |
CN107493169A (zh) * | 2017-09-26 | 2017-12-19 | 安徽皖通邮电股份有限公司 | 一种基于量子密钥和国密算法的身份鉴别方法 |
CN108173640A (zh) * | 2017-12-11 | 2018-06-15 | 上海高顿教育培训有限公司 | 一种高安全性的字符串对称加密和解密方法 |
CN108831048A (zh) * | 2018-09-20 | 2018-11-16 | 安徽亘达信息科技有限公司 | 一种基于扫码信息的智能收发卡计费系统及方法 |
CN110008753A (zh) * | 2019-04-12 | 2019-07-12 | 长春嘉诚信息技术股份有限公司 | 一种在业务数据敏感领域内的数据处理方法及系统 |
CN110299989A (zh) * | 2019-06-10 | 2019-10-01 | 南通大学 | 一种中英文字符串的加密、解密方法 |
CN110677237A (zh) * | 2019-11-04 | 2020-01-10 | 郑州轻工业学院 | 一种具有似混沌特性的文件加密方法 |
Non-Patent Citations (3)
Title |
---|
A chosen - plaintext differential power analysis attack on HMAC - SM3;Limin Guo ect.;《2015 11th International Conference on Computational Intelligence and Security》;20160204;全文 * |
A New Countermeasure against Side Channel Attack for HMAC-SM3 Hardware;Jia-wei Ma ect.;《IEEE》;20171025;全文 * |
一种大流量报文HMAC-SM3认证实时加速引擎;李丹枫,王飞,赵国鸿;《计算机工程与科学》;20200904;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112994874A (zh) | 2021-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112994874B (zh) | 一种基于消息鉴别码算法的保留格式加密方法及解密方法 | |
US10652010B2 (en) | Fully homomorphic encrypted ciphertext query method and system | |
Dworkin | Recommendation for block cipher modes of operation | |
CN108463968B (zh) | 可变长度数据的快速格式保留加密 | |
Wang et al. | Parallel hash function construction based on coupled map lattices | |
Lin et al. | An enhanced variable-length arithmetic coding and encryption scheme using chaotic maps | |
Sani et al. | Creation of S-box based on a hierarchy of Julia sets: image encryption approach | |
Razaq et al. | Secure communication through reliable S-box design: A proposed approach using coset graphs and matrix operations | |
Saračević et al. | Encryption based on Ballot, Stack permutations and Balanced Parentheses using Catalan-keys | |
JP2004258667A (ja) | N個のデジットを含むワードの擬似ランダム置換の生成方法 | |
CN113037488B (zh) | 基于国密密码杂凑算法的保留格式加密方法及解密方法 | |
US20020136400A1 (en) | R-conversion encryption method and system | |
CN1251444A (zh) | 高效块加密方法 | |
CN116664123A (zh) | 一种基于区块链技术的数字钱包设计方法 | |
Shawkat et al. | Optimization-based pseudo random key generation for fast encryption scheme | |
CN114124359A (zh) | 保留格式加密数据的方法、装置、电子设备及存储介质 | |
JP5208796B2 (ja) | 整数の暗号化及び復号化方法 | |
Siahaan et al. | Application of Data Encryption Standard and Lempel-Ziv-Welch Algorithm for File Security | |
CN115114279A (zh) | 置换表生成方法、数据加、解密方法及装置、介质、设备 | |
Patro et al. | Text-to-Image Encryption and Decryption Using Piece Wise Linear Chaotic Maps | |
Loidreau | Analysis of a public-key encryption scheme based on distorted Gabidulin codes | |
Sagun et al. | Devising a method for improving crypto resistance of the symmetric block cryptosystem RC5 using nonlinear shift functions | |
Neri et al. | An XBOX-based key generation technique for vigenere algorithm | |
Jawad et al. | An enhanced RC4 algorithm using an efficient PRNG generation method based on Newton Raphson method, SHA-1 and piecewise chaos method | |
Arroyo et al. | A Novel ASCII Code-based Polybius Square Alphabet Sequencer as Enhanced Cryptographic Cipher for Cyber Security Protection (APSAlpS-3CS) |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |