一种基于国密SM3算法的密钥扩展方法及其系统和介质与流程

文档序号:33627811发布日期:2023-03-28 21:49阅读:40来源:国知局
一种基于国密SM3算法的密钥扩展方法及其系统和介质与流程
一种基于国密sm3算法的密钥扩展方法及其系统和介质
技术领域
1.本发明属于量子通信技术领域,特别是涉及一种基于国密sm3算法的密钥扩展方法及其系统和介质。


背景技术:

2.当今通信安全技术在新的领域内不断地取得新的突破。量子加密采用量子密钥对用户信息进行加密,密钥量与用户信息的数据量以1:1为标准,利用一次一密的加密方式保证了数据通信的安全性。然而,受限于经典网络的负载量,在面对用户高业务量的需求时,如传附件、实时音视频等场景下,将与用户信息等比例的密钥中继到通信的另一端,会造成业务负载超量,并带来业务通信成本的大幅增加。传统sm3密码杂凑算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准,为一种单向算法,其多用于商用密码应用中的数字签名和验证,是在sha-256基础上改进的一种算法,其安全性与sha-256相当。sm3算法的执行过程可以概括成四个步骤:消息填充、消息扩展、迭代压缩、输出结果。sm3杂凑算法需要将输入数据按照512比特的大小分成若干组,最后一组不足512比特时按规则填充至512比特,经过多轮迭代压缩后,输出长度为256比特的摘要值。对密钥量需求不高的业务可以使用该方式进行多轮密钥扩展,但面对密钥量需求高的业务,用此算法对密钥进行大量的扩充存在耗时长、效率低等问题,同时也存在密钥生成率低等问题。而密钥生成率低继而会导致实时通信不连续,用户体验感较差。因此,为保证在面对高负载、实时性要求高的通信业务时能够进行不间断、高效的数据传输,需要更全面的密钥扩展方法。


技术实现要素:

3.发明目的:本发明的目的是提供一种基于国密sm3算法的密钥扩展方法及其系统和介质,能够在不同的密钥量需求下提供不同的密钥扩展模式,在面对密钥量需求低的通信业务时有效缩减密钥扩充过程,进而为数据传输节约时间和资源,在面对高负载、实时性要求高的通信业务时对不同的密钥量提供针对性的密钥扩充过程,进而保证连续、高效的数据传输。该方法可以应对不同需求的业务通信,确保数据传输过程高效、完整地进行。
4.本发明提供一种基于国密sm3算法的密钥扩展方法,其包括以下步骤:
5.s1、确定待加密的明文的长度值sum,以及加密所述明文的密钥key的长度m;
6.s2、根据待加密的明文的长度值sum,判断密钥key是否满足轮循条件,若不满足轮循条件则进入s3,若满足轮循条件则进入s4;
7.s3、基于国密sm3算法对密钥key进行扩展处理,得到扩展密钥key


8.s4、基于国密sm3算法对密钥key进行预处理,预处理后的密钥key1进入轮循扩展,得到扩展密钥key


9.作为本发明的一种改进,在步骤s2中,所述轮循条件为sum≥4224。
10.作为本发明的一种改进,在步骤s3中,所述基于国密sm3算法对密钥key进行扩展处理,得到扩展密钥key

,具体为:
11.s3-1:当sum≤256时,将密钥key作为sm3杂凑算法的参数,代入sm3杂凑算法,从sm3杂凑算法的计算结果中选取长度与sum值相等的密钥作为扩展密钥key


12.s3-2:当256《sum《4224且m≤256时,计算n1=sum
÷
256,其中若n1只有整数部分,则n1

=n1,若n1存在余数部分,则n1

=[sum
÷
256]+1,将密钥key作为sm3杂凑算法的参数,代入sm3杂凑算法,执行n1

轮sm3杂凑算法的计算,从n1

轮sm3杂凑算法的计算结果之和中选取长度与sum值相等的密钥作为扩展密钥key


[0013]
s3-3:当256《sum《4224且m》256时,计算n1=sum
÷
256,n2=m
÷
256:
[0014]
若n1只有整数部分,则n1

=n1,若n1存在小数部分,则n1

=[sum
÷
256]+1;
[0015]
若n2只有整数部分,则n2

=n2,并将后256比特的密钥作为sm3杂凑算法的参数;若n2存在余数部分,则n2

=[m
÷
256],并将余数部分对应的密钥作为sm3杂凑算法的参数;
[0016]
将所述sm3杂凑算法的参数代入sm3杂凑算法,执行(n1
′‑
n2

)轮sm3杂凑算法的计算,将每一轮计算出来的密钥累加,并与整数部分n2

对应的密钥相加,从相加结果中选取长度与sum值相等的密钥作为扩展密钥key


[0017]
作为本发明的一种改进,在步骤s3-2中,所述将密钥key作为sm3杂凑算法的参数,代入sm3杂凑算法,执行n1

轮sm3杂凑算法的计算,从n1

轮sm3杂凑算法的计算结果之和中选取长度与sum值相等的密钥作为扩展密钥key

,具体过程为:
[0018]
s3-2-1:将密钥key作为sm3密码杂凑算法的参数,代入sm3杂凑算法,计算得到杂凑值h1,将所述杂凑值h1再次代入sm3密码杂凑算法进行计算,得到新的杂凑值h2;
[0019]
s3-2-2:重复步骤s3-2-1,每一轮产生一组新的杂凑值,下一轮都以上一轮的杂凑值作为sm3杂凑算法的参数,代入sm3杂凑算法,如此经过n1

轮的计算,将每一轮计算出来的密钥累加,从n1

轮的计算结果之和中丢弃比sum值大的部分,留下长度与sum值相等的密钥作为扩展密钥key


[0020]
作为本发明的一种改进,在步骤s3-3中,所述将所述sm3杂凑算法的参数代入sm3杂凑算法,执行(n1
′‑
n2

)轮sm3杂凑算法的计算,具体过程为:
[0021]
s3-3-1:将所述sm3杂凑算法的参数代入sm3杂凑算法,计算得到杂凑值h3,将所述杂凑值h3再次代入sm3密码杂凑算法进行计算,得到新的杂凑值h4;
[0022]
s3-3-2:重复步骤s3-3-1,每一轮产生一组新的杂凑值,下一轮都以上一轮的杂凑值作为sm3杂凑算法的参数,代入sm3杂凑算法,如此经过(n1
′‑
n2

)轮的计算。
[0023]
作为本发明的一种改进,在步骤s4中,所述基于国密sm3算法对密钥key进行预处理,具体过程为:
[0024]
s4-1:当m≤256时,首先将密钥key作为sm3杂凑算法的参数,代入sm3杂凑算法,计算得到杂凑值,随后将此杂凑值代入下一轮sm3杂凑算法,两轮计算结果相加,得到密钥key1;
[0025]
s4-2:当256《m《512时,取密钥key除前256比特之外的部分,将此部分代入sm3杂凑算法,计算得到杂凑值,将此杂凑值与原密钥key的前256比特的密钥相加,得到密钥key1;
[0026]
s4-3:当m≥512时,计算n3=m
÷
512,若n3为整数,则密钥key直接作为预处理后的密钥key1;若n3存在余数部分,则取n3

=[m
÷
512],并对此余数部分对应的密钥执行s4-1或s4-2,得到密钥key
′1,将密钥key
′1与整数部分n3

对应的密钥相加,得到密钥key1。
[0027]
作为本发明的一种改进,在步骤s4中,所述预处理后的密钥key1进入轮循扩展,得
到扩展密钥key

,具体为:
[0028]
s4-4:根据以下公式(1)确定所需轮循扩展的次数n:
[0029]
m1×8n
≥sum
ꢀꢀ
(1)
[0030]
其中m1为key1的长度值,n为轮循次数,sum为明文长度值;
[0031]
s4-5:对密钥key1进行分块,每块长度为512比特,得到多个长度为16个消息字的密钥块,对每个密钥块进行下一步处理:
[0032]
s4-6:基于国密sm3算法的消息扩展规则对密钥块进行一次轮循,根据预设的丢弃规则从密钥块的一次轮循结果中选取x个消息字丢弃,以此得到目标轮循结果;
[0033]
s4-7:累加步骤s4-5中每个密钥块执行s4-6后的目标轮循结果,在进行下一次轮循之前将所述累加轮循密钥代替步骤s4-5中的密钥key1;
[0034]
s4-8:继续执行步骤s4-5至s4-7,直至n次轮循结束,得到密钥key
′1;
[0035]
s4-9:从步骤s4-8得到的密钥key
′1中选取长度与sum值相等的密钥作为扩展密钥key


[0036]
作为本发明的一种改进,在步骤s4-6中,所述预设的丢弃规则具体为:预设轮常数,根据预设的轮常数从密钥块的一次轮循结果中选取轮常数指定的消息字丢弃,其中轮常数的个数为x。
[0037]
作为本发明的一种改进,本发明提供一种基于国密sm3算法的密钥扩展系统,包括相互连接的微处理器和存储器,该微处理器被编程或配置以执行权利上述基于国密sm3算法的密钥扩展方法的步骤。
[0038]
作为本发明的一种改进,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有被编程或配置以执行上述基于国密sm3算法的密钥扩展方法的计算机程序。
[0039]
本发明的有益效果为:
[0040]
1、面对不同的密钥量需求,能够针对性地提供密钥扩充过程,在密钥量需求低时有效节约扩充资源,在密钥量需求高时提供高效、连续且密钥不重复的扩充方案;
[0041]
2、与国密sm3算法相结合,保证了数据加密的通用性和可靠性;同时又略去sm3算法的迭代压缩过程,有效地提高了密钥扩展的效率;同时每个轮常数的不同消除了密钥的对称性,密钥扩展的非线性消除了相同密钥的可能性;
[0042]
3、密钥扩展效率的提高使得密钥生成率也有所提高,有效减少因密钥不足而导致的业务中断的情况,大大提升用户在进行通信业务时的体验感。
附图说明:
[0043]
图1是基于国密sm3算法的密钥扩展方法的方法流程图;
[0044]
图2是轮循消息字舍弃图;
[0045]
图3是基于国密sm3算法的密钥扩展方法的示意图;
[0046]
图4是用户端之间进行数据传输的示意图。
具体实施方式:
[0047]
下面结合附图和具体实施方式,进一步阐明本发明,应理解下述具体实施方式仅
用于说明本发明而不用于限制本发明的范围。
[0048]
sm3杂凑算法需要将输入数据按照512比特的大小分成若干组,最后一组不足512比特的按规则填充至512比特。经过多轮迭代压缩后,输出长度为256比特的摘要值。该算法对数据处理过程中必须需要经过压缩模块,数据经过压缩后一轮仅能产生256比特的摘要值。面对一次一密无条件安全通信加密技术,密钥是不能循环使用的,一次传输就需要一组新的密钥,而实际通信时,尤其是面对传输超大文件,实时通讯等业务时会存在量子密钥分发供给不足的情况。为适配通信业务需求,在传输高负荷的业务时,只需要对部分量子密钥进行扩展,将部分量子密钥长度扩展成和明文数据长度一致即可实现一次一密安全加密,从而能高效快速地对量子密钥进行按需扩展。
[0049]
本发明提供一种基于国密sm3算法的密钥扩展方法,如图1所示,所述方法包括以下步骤:
[0050]
s1、确定待加密的明文的长度值sum,以及加密所述明文的密钥key的长度m;
[0051]
s2、根据待加密的明文的长度值sum,判断密钥key是否满足轮循条件,若不满足轮循条件则进入s3,若满足轮循条件则进入s4,其中所述轮循条件为sum≥4224;
[0052]
s3、基于国密sm3算法对密钥key进行扩展处理,得到扩展密钥key


[0053]
s4、基于国密sm3算法对密钥key进行预处理,预处理后的密钥key1进入轮循扩展,得到扩展密钥key


[0054]
通过上述方法步骤可以看出,在对密钥进行扩展时,基于不同明文长度,可以针对性地提供不同的密钥方案,最终将密钥key扩展为所需长度的扩展密钥,从而提高加解密效率。
[0055]
在本发明的实施例中,在明文的长度sum值较小的情况下,步骤s3分为三种情况,包括以下:
[0056]
s3-1:当sum≤256时,将密钥key作为sm3杂凑算法的参数,代入sm3杂凑算法,计算得到256比特的杂凑值,从此256比特的杂凑值中选取长度与sum值相等的密钥作为扩展密钥key


[0057]
s3-2:当256《sum《4224且m≤256时,首先计算n1=sum
÷
256,其中若n1只有整数部分,则n1

=n1,若n1存在余数部分,则对n1取整并进1,即n1

=[sum
÷
256]+1:
[0058]
s3-2-1:将密钥key作为sm3密码杂凑算法的参数,代入sm3杂凑算法,计算得到256比特的杂凑值h1,将所述256比特的杂凑值h1再次代入sm3密码杂凑算法进行计算,得到新的256比特的杂凑值h2;
[0059]
s3-2-2:重复步骤s3-2-1,每一轮产生一组新的256比特的杂凑值,下一轮都以上一轮的256比特的杂凑值作为sm3杂凑算法的参数,代入sm3杂凑算法,如此经过n1

轮的计算,将每轮的计算结果累加,由此产生长度为(n1
′×
256)比特的密钥key1,丢弃其中比sum值大的部分,留下长度与sum值相等的密钥作为扩展密钥key


[0060]
s3-3:当256《sum《4224且m》256时,首先计算n1=sum
÷
256,n2=m
÷
256:
[0061]
若n1只有整数部分,则n1

=n1,若n1存在小数部分,则n1

=[sum
÷
256]+1;
[0062]
若n2只有整数部分,则n2

=n2,并将最后一块256比特的密钥作为sm3杂凑算法的参数;若n2存在余数部分,则n2

=[m
÷
256]并将余数部分对应的密钥作为sm3杂凑算法的参数:
[0063]
s3-3-1:将上述sm3杂凑算法的参数代入sm3杂凑算法,计算得到256比特杂凑值h3,将所述256比特杂凑值h3再次代入sm3密码杂凑算法进行计算,得到新的256比特杂凑值h4;
[0064]
s3-3-2:重复步骤s3-3-1,每一轮产生一组新的256比特杂凑值,下一轮都以上一轮的256比特杂凑值作为sm3杂凑算法的参数,代入sm3杂凑算法,如此经过(n1
′‑
n2

)轮的计算,将每一轮计算出来的密钥累加,并与(n2
′×
256)比特的密钥key相加,从相加结果中选取长度与sum值相等的密钥作为扩展密钥key


[0065]
在本发明的实施例中,通过上述步骤提供的技术方案,在明文长度sum值较小的情况下,需要对应的密钥量也较少,由此需要步骤s3来为初始密钥key进行扩展,避免重复扩展占用扩展资源和存储资源。
[0066]
在本发明的实施例中,在明文的长度sum值较大的情况下,例如,sum≥4224(即需要加密的明文等于或多于132个消息字)的情况下,由于sm3的消息扩展模块步骤是以512比特的数据分组作为输入值的,因此步骤s4需要对密钥先进行预处理步骤,随后再进行轮循扩展,包括以下:
[0067]
首先,基于国密sm3算法对密钥key进行预处理的具体过程为:首先判断密钥key(长度为m比特)的大小:
[0068]
s4-1:当m≤256时,首先将密钥key作为sm3杂凑算法的参数,代入sm3杂凑算法,计算得到256比特杂凑值,随后将此杂凑值代入下一轮sm3杂凑算法,两轮计算结果相加后得到512比特的预处理后的密钥key1;
[0069]
s4-2:当256《m《512时,取密钥key除前256比特之外的部分,将此部分代入sm3杂凑算法,计算得到256比特杂凑值,将此杂凑值与原密钥key的前256比特的密钥相加,得到512比特的预处理后的密钥key1;
[0070]
s4-3:当m≥512时,计算n3=m
÷
512,若n3为整数,则密钥key直接作为预处理后的密钥key1;若n3存在余数部分,则对n3取整数部分n3

,并对此余数部分对应的密钥执行s4-1或s4-2,得到512比特的杂凑值,将此512比特的杂凑值与整数部分n3

对应的密钥相加,以此得到(n3

+1)
×
512比特的预处理后的密钥key1。
[0071]
本发明的实施例是基于国密sm3算法的密钥扩展方法,原sm3的消息扩展模块需要先将一个512比特数据分组划分为16个消息字,并且作为生成的132个消息字的前16个。再用这16个消息字递推生成剩余的116个消息字。为符合业务需求,需要在不改变原sm3的消息扩展模块算法的基础上对取值进行修改,来实现对量子密钥按需扩展,所以需要进行步骤s4-1至s4-3,将密钥key预处理为长度是512比特的整数倍。
[0072]
在本发明的实施例中,上述预处理后的密钥key1进入轮循扩展:
[0073]
s4-4:根据以下公式(1)确定所需轮循扩展的次数n:
[0074]
m1×8n
≥sum
ꢀꢀ
(1)
[0075]
其中m1为key1的长度值,n为轮循次数,sum为明文长度值;
[0076]
s4-5:对密钥key1进行分块,每块长度为512比特,得到多个长度为16个消息字的密钥块,对每个密钥块进行下一步处理:
[0077]
s4-6:基于国密sm3算法的消息扩展规则对密钥块进行一次轮循,根据预设的丢弃规则从密钥块的一次轮循结果中选取x个消息字丢弃,以此得到目标轮循结果:
[0078]
在本发明的一个实施例中,基于国密sm3算法的消息扩展规则对长度为16个消息字的密钥块进行一次轮循可产生132个消息字,根据此132个消息字计算轮循倍数r(整数值):r=132
÷
16=8.25≈8;应注意:轮循倍数r应为整数值,因此对轮循倍数r进行四舍五入取值,丢弃轮循倍数的余数部分0.25。由此计算丢弃字数x:x=132-16
×
r=132-16
×
8=4。被递推的这16个消息字作为轮循扩展后的132个消息字的前16个消息字放在首端,根据预设的丢弃规则从此132个消息字的前16个消息字中选取4个消息字丢弃,以此一次目标轮循结果为128个消息字,也就是一块16个消息字一次轮循可产生16
×
8=128个消息字;
[0079]
在本发明的实施例中,为避免前16个消息字在后续轮循时计算出的128个消息字与上文计算的128个消息字重复,因此在前16个消息字中选取4个消息字丢弃,选取规则需要按照轮常数规则表。从预制轮常数表中选取对应的4个要丢弃的消息字的下标值,将对应下标值的消息字舍弃。应注意:下标值从0开始,第一个字的下标是0,第二个字的下标是1
…………
第十六个字的下标是15。在本发明的一个实施例中,轮常数的规则表如下表1:
[0080]
表1
[0081]
轮数轮常数规则表第一轮0 2 4 6第二轮1 3 5 7第三轮8 10 12 14第四轮9 11 13 15第五轮0 2 4 6第六轮1 3 5 7第七轮8 10 12 14
[0082]
s4-7:累加步骤s4-5中每个密钥块执行s4-6后的目标轮循结果得到累加轮循密钥,在进行下一次轮循之前将所述累加轮循密钥代替步骤s4-5中的密钥key1;
[0083]
例如,第二次轮循:将128个消息字依旧按sm3的消息扩展规则以16个消息字一组划分为8组进行轮循,每组16个消息字轮循并丢弃后产生128个字,即第二次轮循产生(8
×8×
16)个消息字。
[0084]
s4-8:继续执行步骤s4-5至s4-7,直至n次轮循结束,得到密钥key
′1;
[0085]
例如,第n次轮循:将前一轮产生的消息字依旧按sm3的消息扩展规则以16个消息字一组划分为8
n-1
组进行轮循,每组16个消息字轮循并丢弃后产生128个字,累加后可看出第n次轮循产生(8n×
16)个消息字作为累加轮循密钥。
[0086]
s4-9:从步骤s4-8得到的密钥key
′1中选取长度与sum值相等的密钥作为扩展密钥key


[0087]
举例来说,以所需加密的明文长度为51200比特(1600个消息字)、预处理后的密钥key1长度为512比特(16个消息字)为例:
[0088]
计算:16
×8n
≥1600,n=3。将16个消息字代入本发明的密钥扩展方法,进行3次轮循扩展,得出(83×
16)个消息字,而实际需要的消息字是1600个消息字。在(83×
16)个消息字中选取1600个消息字作为加密密钥,多余舍弃即可。
[0089]
值得说明的是,在本发明的实施例中,对密钥进行扩展和轮循的过程在算法上和输入值规则上与国密sm3算法的消息扩展模块相同,此处不再赘述。
[0090]
实施例:
[0091]
在量子安全环境下的任何数据类型通信都可以使用该方法对量子密钥进行扩展,特别是一些高负载业务。如p2p音视频应用通信,其对数据通信的实时性与安全性要求较高,若以一次一密的等比加密通信方式进行通信,量子密钥供给会出现密钥量不足的情况。为确保音视频业务完整进行需要对密钥量以1:1(音视频数据包量)的方式进行扩展。首先主叫终端peer a和被叫终端peer b均已接入量子安全网,在该网络下的帮助下需要通信的用户间可建立会话密钥,主叫终端peer a使用该密钥对音视频数据包加密,再通过量子基站将该密钥中继到被叫终端,被叫终端使用该密钥进行解密。
[0092]
举例来说,主叫终端peer a向被叫终端peer b发送56000比特音视频数据包。主叫终端peer a的本地量子密钥池为该类型的通信提供了166比特的量子密钥(具体提供量子密钥量,根据不同的业务类型决定),为实现1:1的加密强度,原sm3的消息扩展模块是以512比特的数据分组作为输入值,因此在执行本发明方法的轮循步骤前同样需要对该166比特的密钥进行预处理,将该密钥进行2轮sm3的密码杂凑算法的计算,得到512比特的预处理后的密钥,再通过本发明方法的轮循扩展得到扩展后的密钥。具体计算如下:
[0093]
首先计算166比特需要扩展(56000
÷
166)倍。按现有规则预处理步骤对密钥扩充计算8n×
16≥16
×
(56000
÷
166),n=3。将16个消息字代入本发明方法的轮循步骤进行3次轮循扩展,得出(83×
16个消息字),而实际需要的消息字是56000
÷
32=1750个消息字(每个字是32比特)。在(83×
16)个消息字中选取1750个消息字,多余部分舍弃即可。主叫终端peer a使用扩展后的密钥通过加密算法对56000比特的音视频数据包加密发送至被叫终端peer b,同时量子基站将相对应的原始166比特量子密钥和扩展倍数字段(56000
÷
166)倍中继到被叫终端peer b。
[0094]
值得说明的是,在本发明的实施例中,被叫终端peer b接收到加密后的音视频数据包、166比特的量子密钥以及扩展倍数(56000
÷
166),再利用相同的预处理步骤、轮循扩展步骤即得到所需密钥,进而对音视频数据包密文用相同算法解密,得到明文后,再利用相同方法向peer a发送新的音视频数据包密文,即可实现p2p加密通信。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1