发明内容
本发明实施例针对上述现有技术存在的缺点,提供一种安全散列方法及系统,以节省存储空间,减少运算单元。
为此,本发明实施例提供如下技术方案:
一种生成消息摘要的方法,包括:
对消息进行填充和划分,生成多个消息块;
设置一个由16个消息调度表元素w0,w1,...,w15构成的第一线性反馈移位寄存器LFSRW、一个由变量构成的第二线性反馈移位寄存器LFSRV、以及一个由散列值构成的第三线性反馈移位寄存器LFSRH;
将初始散列值H(0)作为初始值,对LFSRH进行赋值;
对生成的多个消息块顺序进行如下迭代散列计算:
将当前消息块作为初始值,对第一线性反馈移位寄存器LFSRW进行赋值;将前一次计算的中间散列值作为初始值,对第二线性反馈移位寄存器LFSRV;
在循环处理的每个周期内,通过消息调度表元素计算第一临时变量w,将第一临时变量w作为第一线性反馈移位寄存器LFSRW的反馈输入,对第一线性反馈移位寄存器LFSRW进行移位赋值;同时,通过w0和第一临时变量w计算第二临时变量v,将第二临时变量v作为第二线性反馈移位寄存器LFSRV的反馈输入,对第二线性反馈移位寄存器LFSRV进行移位赋值;
在循环处理的第一预定周期至最后一个周期内,通过第二临时变量v和散列值计算第三临时变量h,将第三临时变量h作为第三线性反馈移位寄存器LFSRH的反馈输入,对第三线性反馈移位寄存器LFSRH进行移位赋值;
重复上述过程,在所有消息块处理完毕之后,将第三线性反馈移位寄存器LFSRH中的散列值进行串联,得到消息摘要。
一种生成消息摘要的系统,包括:
消息块生成单元,用于对消息进行填充和划分,生成多个消息块;
寄存器器组,包括:一个由16个消息调度表元素w0,w1,...,w15构成的第一线性反馈移位寄存器LFSRW、一个由变量构成的第二线性反馈移位寄存器LFSRV、以及一个由散列值构成的第三线性反馈移位寄存器LFSRH;
初始化单元,用于将初始散列值H(0)作为初始值,对LFSRH进行赋值;
迭代散列控制单元,用于对生成的多个消息块顺序进行如下迭代散列计算:
将当前消息块作为初始值,对第一线性反馈移位寄存器LFSRW进行赋值;将前一次计算的中间散列值作为初始值,对第二线性反馈移位寄存器LFSRV;
在循环处理的每个周期内,通过消息调度表元素计算第一临时变量w,将第一临时变量w作为第一线性反馈移位寄存器LFSRW的反馈输入,对第一线性反馈移位寄存器LFSRW进行移位赋值;同时,通过w0和第一临时变量w计算第二临时变量v,将第二临时变量v作为第二线性反馈移位寄存器LFSRV的反馈输入,对第二线性反馈移位寄存器LFSRV进行移位赋值;
在循环处理的第一预定周期至最后一个周期内,通过第二临时变量v和散列值计算第三临时变量h,将第三临时变量h作为第三线性反馈移位寄存器LFSRH的反馈输入,对第三线性反馈移位寄存器LFSRH进行移位赋值;
消息摘要输出单元,用于在所述迭代散列控制单元处理完所有消息块之后,将第三线性反馈移位寄存器LFSRH中的散列值进行串联,得到消息摘要。
与现有技术相比,本发明实施例生成消息摘要的方法及系统具有以下有益效果:
1.现有技术需要存储80个消息调度表元素(SHA-224、SHA-256需要存储64个),本发明实施例只需要存储16个LFSRW的寄存器值。因此,大大降低了所需的存储空间。
2.现有技术在生成消息调度表元素和更新变量时,需要选择逻辑选择参与计算的消息调度表元素,或为每个消息调度表元素设置加法逻辑或异或逻辑。本发明实施例只使用固定位置的消息调度表元素计算LFSRW和LFSRV的输入数据,通过反馈移位更新消息调度表和变量。现有技术在计算散列值时,需要8个加法逻辑(SHA-1需要5个)对变量和散列值计算。本发明实施例只使用2个加法逻辑(SHA-1需要1个)对临时变量和散列值计算,通过反馈移位获取散列值。因此,大大减少了实现过程中所需的运算单元。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和实施方式对本发明实施例作进一步的详细说明。
如图1所示,是本发明实施例生成消息摘要的方法的流程图,包括以下步骤:
步骤101,对消息进行填充和划分,生成多个消息块。
步骤102,设置一个由16个消息调度表元素w0,w1,...,w15构成的第一线性反馈移位寄存器LFSRW、一个由变量构成的第二线性反馈移位寄存器LFSRV、以及一个由散列值构成的第三线性反馈移位寄存器LFSRH;并将初始散列值H(0)作为初始值,对LFSRH进行赋值。
步骤103,对生成的多个消息块顺序进行迭代散列计算,在迭代过程中,同时进行反馈移位及相加的操作得到散列值。
具体过程如下:
将当前消息块作为初始值,对第一线性反馈移位寄存器LFSRW进行赋值;将前一次计算的中间散列值作为初始值,对第二线性反馈移位寄存器LFSRV;
在循环处理的每个周期内,通过消息调度表元素计算第一临时变量w,将第一临时变量w作为第一线性反馈移位寄存器LFSRW的反馈输入,对第一线性反馈移位寄存器LFSRW进行移位赋值;同时,通过w0和第一临时变量w计算第二临时变量v,将第二临时变量v作为第二线性反馈移位寄存器LFSRV的反馈输入,对第二线性反馈移位寄存器LFSRV进行移位赋值;
在循环处理的第一预定周期至最后一个周期内,通过第二临时变量v和散列值计算第三临时变量h,将第三临时变量h作为第三线性反馈移位寄存器LFSRH的反馈输入,对第三线性反馈移位寄存器LFSRH进行移位赋值;
步骤104,在所有消息块处理完毕之后,将第三线性反馈移位寄存器LFSRH中的散列值进行串联,得到消息摘要。
与现有技术相比,本发明实施例生成消息摘要的方法,只需要存储16个LFSRW的寄存器值。与现有技术需要存储80个LFSRW的寄存器值相比,大大降低了所需要的存储空间。另外,现有技术在生成消息调度表元素和更新变量时,需要选择逻辑选择参与计算的消息调度表元素,或为每个消息调度表元素设置加法逻辑或异或逻辑;而本发明实施例的方法只使用固定位置的消息调度表元素计算LFSRW和LFSRV的输入数据,通过反馈移位更新消息调度表元素和变量。现有技术在计算散列值时,需要8个加法逻辑(SHA-1需要5个)对变量和散列值计算。本发明实施例的方法只使用2个加法逻辑(SHA-1需要1个)对临时变量和散列值计算,通过反馈移位获取散列值。因此,大大减少了实现过程中所需要的运算单元。
由于SHA不同算法类型定义的LFSR不同,因此,下在针对不同的SHA类型,对本发明实施例生成消息摘要的方法做进一步的详细说明。
●针对SHA-1
如图2所示,是本发明实施例中针对SHA-1类型生成消息摘要的各线性反馈移位寄存器的结构示意图;
图3是本发明实施例中针对SHA-1类型生成消息摘要的实现流程图,包括以下步骤:
步骤301,获取待散列消息M。
步骤302,对消息进行填充。
具体地,对小于264比特的消息进行填充,确保填充之后的消息长度为512比特的整数倍。定义64比特的l为消息M的长度,在M之后填充1个″1″比特和k个″0″比特,满足(l+1+k)mod 512≡448,0≤k<512。将l附加在填充比特之后,构成总长度为length=l+1+k+64比特的待处理消息。
步骤303,消息划分,将填充后的消息划分为N个消息块。
具体地,将待处理消息划分为N个512比特的消息块M(1),M(2),...,M(N),N=length/512,并将M(i)(1≤i≤N)划分为16个32位字M0 (i),M1 (i),...,M15 (i),即M(i)=M0 (i)||M1 (i)|...||M15 (i)。
步骤304,定义LFSRW、LFSRV、LFSRH,并设置LFSRH的初始值H(0)。
具体地,定义一个由16个32位消息调度表元素构成的LFSRW,以及一个由5个32位的变量a,b,c,d,e构成的LFSRV和一个由5个32位散列值H0,H1,...,H4构成的LFSRH,并按照公式(1)对LFSRH赋初始值:
Hn=Hn (0),0≤n<5 (1)
然后,按照M(1),M(2),...,M(N)的顺序,对M(i)(1≤i≤N)进行迭代散列计算,具体过程如下:
步骤305,对于当前消息块Mi,按照公式(2)对LFSRW的消息调度表元素赋初始值:
wn=Mn (i),0≤n<16 (2)
并对LFSRV的变量字段赋初始值,如式(3)所示:
a=H0 (i-1)
b=H1 (i-1)
c=H2 (i-1)
(3)
d=H3 (i-1)
e=H4 (i-1)
步骤306,判断是否t<80;如果是,则执行步骤307;如果否,则执行步骤310。
步骤307,对LFSRW和LFSRV进行移位赋值,具体如下:
按照式(4)对LFSRW进行移位赋值。
w0=w1 w1=w2 w2=w3 w3=w4 w4=w5 w5=w6 w6=w7 w7=w8 (4)
w8=w8 w9=w10 w10=w11 w11=w12 w12=w13 w13=w14 w14=w15 w15=w
其中,ROTLn表示循环左移n位。
按照式(5)对LFSRV进行移位赋值。
v=ROTL5(a)+ft(b,c,d)+e+Kt+w0
e=d
d=c
c=ROTL30(b) (5)
b=a
a=v
其中,ft、Kt为标准规定的常数。
步骤308,判断是否t≥75;如果是,则执行步骤309;否则返回步骤306。
步骤309,对LFSRH进行移位赋值,具体地,按照式(6)对LFSRH进行移位赋值。其中函数ht(v)如式(7)所示,其结构示意图如图4所示。
h=ht(v)+H4
H4=H3
H3=H2
(6)
H2=H1
H1=H0
H0=h
步骤310,判断是否i≤N,则返回步骤305;否则执行步骤311。
步骤311,在消息块M(N)处理完毕之后,将LFSRH的散列值H0,H1,...,H4进行串联,得到消息摘要,即MD=H0||H1||H2||H3||H4。
本发明实施例,针对SHA-1类型,将80×32位消息调度表简化为16×32位LFSRW,在循环处理的每个周期更新消息调度表,并且固定使用w0计算LFSRV的反馈输入,不需要选择消息调度表元素,不占用额外的存储空间和运算单元。同时,仅使用一个加法器对函数ht(v)的输出和H4相加,通过反馈移位更新LFSRH,获取SHA-1的消息摘要。因此,能够减小SHA-1实现所需要的存储空间和运算单元。
●针对SHA-256和SHA-224
如图5所示,是本发明实施例中针对SHA-256和SHA-224类型生成消息摘要的各线性反馈移位寄存器的结构示意图。
生成消息摘要的具体过程如下:
1.按照SHA-256标准规定,对于小于264比特的消息进行消息填充,具体与前面步骤302相同。
2.按照SHA-256标准规定,将待处理消息进行消息划分,具体与前面步骤303相同。
3.定义一个由16个32位消息调度表元素构成的LFSRW,以及一个由8个32位的变量a,b,c,d,e,f,g,h构成的LFSRV和一个由8个32位散列值H0,H1,...,H7构成的LFSRH。
4.按照式(8)对LFSRH赋初始值。
Hn=Hb (0),0≤n<8 (8)
5.按照M(1),M(2),...,M(N)的顺序,对M(i)(1≤i≤N)进行迭代散列计算,包括:
i)按照前面公式(2)对LFSRW的消息调度表字段赋初始值。
ii)对LFSRV的变量字段赋初始值,如式(3)所示。
iii)在0≤t<64的循环处理中:
按照式(9)对LFSRW进行移位赋值;
w=σ1 {256}(w14)+w9+σ0 {256}(w1)+w0
w0=w1 w1=w2 w2=w3 w3=w4 w4=w5 w5=w6 w6=w7 w7=w8 (9)
w8=w9 w9=w10 w10=w11 w11=w12 w12=w13 w13=w14 w14=w15 w15=w
按照式(10)对LFSRV进行移位赋值;
v=∑1 {256}(e)+Ch(e,f,g)+h+Kt {256}+w0
v1=∑0 {256}(a)+Maj(a,b,c)+v
v2=d+v
(10)
h=g g=f f=e e=v2
d=c c=b b=a a=v1
其中,公式(9)中σ0 {256}、σ1 {256}、以及公式(10)中的∑0 {256}、∑1 {256}、Ch、Maj、Kt {256}为标准规定的函数或常数。
当60≤t<64时,按照式(11)对LFSRH进行4次移位赋值。
h1=H3+v1
h2=H7+v2
H7=H6 H6=H5 H5=H4 H4=h2 (11)
H3=H2 H2=H1 H1=H0 H0=h1
6.在M(N)处理完毕之后,将LFSRH的散列值H0,H1,...,H7进行串联,得到消息摘要,即MD{256}=H0||H1||H2||H3||H4||H5||H6||H7。
需要说明的是,SHA-224和SHA-256的实现步骤相同,在生成224位消息摘要时,将LFSRH的散列值H0,H1,...,H6进行串联,即MD{224}=H0||H1||H2||H3||H4||H5||H6。
本发明实施例,针对SHA-256和SHA-224类型,将64×32位消息调度表简化为16×32位LFSRW,不占用额外的存储空间和运算单元。同时,使用两个加法器对v1和H3、v2和H7相加,通过反馈移位更新LFSRH,获取SHA-256和SHA-224的消息摘要。因此,能够减小SHA-256和SHA-224实现所需要的存储空间和运算单元。
●针对SHA-512和SHA-384
SHA-512和SHA-256的算法步骤相同,结构图与图2类似,不同之处在于:LFSRW、LFSRV、LFSRH均为64位;在80次循环处理中,使用SHA-512标准规定的函数计算64位临时变量w和v1、v2;当76≤t<80时对LFSRH进行4次移位赋值。
SHA-384和SHA-512的算法步骤相同,在生成384位消息摘要时,将LFSRH的散列值H0,H1,...,H5进行串联,即MD{384}=H0||H1||H2||H3||H4||H5。
可见,本发明实施例针对SHA-512和SHA-384类型,将80×64位消息调度表简化为16×64位LFSRW,使用两个加法器的输出更新LFSRH,获取消息摘要。因此,能够减小SHA-512和SHA-384实现所需要的存储空间和运算单元。
需要说明的是,本发明并不限于上述几种具体实施方式,还可以进行各种变形。例如,SHA-1的ht函数的输入可以是变量a,此时需要在76≤t<80以及80次循环处理结束后的一个周期时,对LFSRH进行5次移位赋值。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
相应地,本发明实施例还提供一种生成消息摘要的系统,如图6所示,是该系统的一种结构示意图。
在该实施例中,所述系统包括:
消息块生成单元601,用于对消息进行填充和划分,生成多个消息块;
寄存器器组602,包括:一个由16个消息调度表元素w0,w1,...,w15构成的第一线性反馈移位寄存器LFSRW、一个由变量构成的第二线性反馈移位寄存器LFSRV、以及一个由散列值构成的第三线性反馈移位寄存器LFSRH;
初始化单元603,用于将初始散列值H(0)作为初始值,对LFSRH进行赋值;
迭代散列控制单元604,用于对生成的多个消息块顺序进行如下迭代散列计算:
将当前消息块作为初始值,对第一线性反馈移位寄存器LFSRW进行赋值;将前一次计算的中间散列值作为初始值,对第二线性反馈移位寄存器LFSRV;
在循环处理的每个周期内,通过消息调度表元素计算第一临时变量w,将第一临时变量w作为第一线性反馈移位寄存器LFSRW的反馈输入,对第一线性反馈移位寄存器LFSRW进行移位赋值;同时,通过w0和第一临时变量w计算第二临时变量v,将第二临时变量v作为第二线性反馈移位寄存器LFSRV的反馈输入,对第二线性反馈移位寄存器LFSRV进行移位赋值;
在循环处理的第一预定周期至最后一个周期内,通过第二临时变量v和散列值计算第三临时变量h,将第三临时变量h作为第三线性反馈移位寄存器LFSRH的反馈输入,对第三线性反馈移位寄存器LFSRH进行移位赋值;
消息摘要输出单元605,用于在所述迭代散列控制单元处理完所有消息块之后,将第三线性反馈移位寄存器LFSRH中的散列值进行串联,得到消息摘要。
利用本发明实施例的系统,可以生成针对SHA-1类型的消息摘要,相应地,所述消息调度表元素为32位的消息调度表元素w0,w1,...,w15,所述变量为5个32位变量a,b,c,d,e,所述散列值为5个32位散列值H0,H1,...,H4;所述迭代散列控制单元,具体用于对生成的512位消息块顺序进行迭代散列计算;所述消息摘要输出单元,具体用于将第三线性反馈移位寄存器LFSRH的散列值H0,H1,...,H4进行串联,得到160位消息摘要。具体实现过程可参照前面的描述,在此不再赘述。
利用本发明实施例的系统,还可以生成针对SHA-256和SHA-224类型的消息摘要,相应地,所述消息调度表元素为32位的消息调度表元素w0,w1,...,w15,所述变量为8个32位变量a,b,c,d,e,f,g,h,所述散列值为8个32位散列值H0,H1,...,H7;所述迭代散列控制单元,具体用于对生成的512位消息块顺序进行迭代散列计算;所述消息摘要输出单元,具体用于将第三线性反馈移位寄存器LFSRH的散列值H0,H1,...,H7进行串联,得到256位消息摘要;或者将第三线性反馈移位寄存器LFSRH的散列值H0,H1,...,H6进行串联,得到224位消息摘要。具体实现过程可参照前面的描述,在此不再赘述。
利用本发明实施例的系统,还可以生成针对SHA-512和SHA-384类型的消息摘要,相应地,所述消息调度表元素为64位的消息调度表元素w0,w1,...,w15,所述变量为8个64位变量a,b,c,d,e,f,g,h,所述散列值为8个64位散列值H0,H1,...,H7;所述迭代散列控制单元,具体用于对生成的1024位消息块顺序进行迭代散列计算;所述消息摘要输出单元,具体用于将第三线性反馈移位寄存器LFSRH的散列值H0,H1,...,H7进行串联,得到512位消息摘要;或者将第三线性反馈移位寄存器LFSRH的散列值H0,H1,...,H5进行串联,得到384位消息摘要。具体实现过程可参照前面的描述,在此不再赘述。
与现有技术相比,本发明实施例生成消息摘要的系统,只需要存储16个LFSRW的寄存器值。与现有技术需要存储80个LFSRW的寄存器值相比,大大降低了所需要的存储空间。另外,现有技术在生成消息调度表元素和更新变量时,需要选择逻辑选择参与计算的消息调度表元素,或为每个消息调度表元素设置加法逻辑或异或逻辑;而本发明实施例的方法只使用固定位置的消息调度表元素计算LFSRW和LFSRV的输入数据,通过反馈移位更新消息调度表元素和变量。现有技术在计算散列值时,需要8个加法逻辑(SHA-1需要5个)对变量和散列值计算。本发明实施例的方法只使用2个加法逻辑(SHA-1需要1个)对临时变量和散列值计算,通过反馈移位获取散列值。因此,大大减少了实现过程中所需要的运算单元。
本发明实施例生成消息摘要的方法及系统,可以广泛地应用于数字签名、消息认证码生成与验证技术等领域。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上对本发明实施例进行了详细介绍,本文中应用了具体实施方式对本发明进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及设备;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。