基表变量伪随机序列和杂凑函数 技术领域:密码学对称密钥加密,杂凑函数
背景介绍:
1).用于加密的基表变量伪随机序列BTS
BTS基表变量循环体是以变量取代MD5中固定字表,IV,以及消息输入子块,融入了加密密钥K进行运算的循环体,输出大周期伪随机序列。它利用并增强了MD5随机性又具有庞大周期,不依赖于任何预置的IV,因而BTS既可以获得MD5的输出随机性,在计算安全性基础上又可以随意设置IV,用同一个密钥K下组织多个独立循环体,从而可进行大规模并行运算,为加密提供高速和安全的伪随机序列。
2).用于杂凑的基表杂凑函数BTH
将明文的每一个分组块512比特当作BTS的加密密钥,作4轮16步的运算,寄存器变量abcd的4个第16步输出的128位,即h1,h2,h3,h4级联构成这个明文块的256位杂凑值;以每个第16步时abcd和连续多个运算过程中的查表变量值为下一轮(第四轮的状态为下一个明文块的)的初始IV。以多层查表变量取代了MD5或SHA的固定字表以及IV设置,并定义为下一轮的初始IV,独特的BTH在预防自由起始端攻击,生日攻击等各类攻击时,比通常的杂凑函数更具有优良的抗碰撞特性。
发明内容:
1.基表变量序列BTS
1.1建立一个公开固定的基础表
我们以所有不同的单节字为基元,随机乱序排列成总共长度为256B的固定序列表“PBS”,
将PBS基础表放在连续的物理内存中,它是只读顺序表,因而,对于此表上的任意一个数据单
元,都可以随机读取。
实际建立独立的2个PBS基础表,“PS”和“QS”
用P(t)来表示在PS上查表获得单字节基元,t为对应基元的地址;
用Q(t)来表示在QS上查表获得单字节基元,t为对应基元的地址;
要求:PS和QS上的基元分布随机均匀,且对于任意一个t(0≤t≤255),有P(t)≠Q(t)
1.2定义基元项Ri
密钥K为144比特长,拆分为16比特的子密钥K0,K1,…,Ki,…,K8
Ri是由四个8比特基元P(t1i),P(t2i),Q(t1i),Q(t2i)串接构成的32比特字Ri=P(t1i)P(t2i)Q(t1i)Q(t2i)是以16位子密钥产生的32位的特定字,可排除规律的特殊的比特排列,例如Ri≠0
1.3利用MD5形式,主寄存器运算器变量ABCD
和MD5一样,由4个32比特的寄存器A,B,C,D组成的累加器,a,b,c,d代表这4个寄存器变量组成abcd,进行运算并存储运算结果)。
初始化后,输入Ri及其他输入项,每轮进行9步的移位和累加运算,输出128比特。
1.4基表变量序列BTS算法
(以下所有加法为模加,“←”表示同时赋值,“<<<”为循环左移。)
初始化:abcd=N0 R-1=N1,R-2=N2,R-3=N3,R-4=N4,R-4=N5,常量W=N6其中N0,N1,N2,N3,N4,N5,N6
为6个给定的32比特常量,N0为给定的128比特常量
整型变量i,j 步数i(0≤i≤8),设定最大轮数jmax。
每一轮共9步,每一步输入Ki获得Ri后,输入为abcd,Ri,Ri-5
对于j轮,第i步0≤i≤8(0≤j≤jmax)
(1)第j轮第i步开始时,abcd记为(abcd)i。j,abcd中32比特的b顺序写为4个8比特的s1,s2和q1,q2,子密钥16比特Ki写为2个8比特的K1i,K2i
t1i=q1i+i+j+K1i (8位模加)
t2i=q2i+i+j+K2i (8位模加)
Ri。j=P(t1i)P(t2i)Q(t1i)Q(t2i)
b=b+(Ri-4。j<<<(i+1)+W)<<<(s1mod32)(加法为32位模加)
a=a+(ProcessPi(b,c,d)+Ri。j+b)<<<(s2mod32)(ProcessPi(b,c,d)为处理P函数,见后)(加法为32位模加)
(a,b,c,d)←(d,a,b,c)(同时赋值)此时abcd即为(abcd)i+1。j
(2)(abcd)8。j为j轮的yj,
j+1轮的初始化:令(abcd)0。j+1=(abcd)8。j;
(R-5,j+1,R-4,j+1R-1,R-3,j+1,R-2,j+1,R-1,j+1)←(R4,j R5,j R6,j R7,j R8,j);(同时赋值)
j=0时,获得y0,1≤j起输出Yj为输出序列
j+1,进入下轮
……,
直至j=jmax,结束
2.基表变量循环体构造的杂凑函数BTH
将明文的一个512分组当作基表变量循环体的密钥K,把基表变量循环体稍作改动,就可以构成一个新杂凑函数BTH。进行MD强化后,明文总共m个512位分组,我们用K1K2,……Kj,……,Km来表示各个分组
每个分组为512比特,依次拆为32比特的Ki。j 其中0≤i≤15,1≤j≤m
每个明文分组进行4轮,各16步的运算,每轮的第16步的(abcd)15输出128比特,分别记为h1,h2,h3,h4h1,h2串接成256比特,h1||h2,||为级联符号,表示位异或,<<<表示循环左移,←表示同时赋值。
Hj=((h1||h2)⊕(h3||h4))⊕Hj-1]]>为256比特
当j=m时,最终的Hm为整个明文的杂凑值。预定义H0值杂凑时的Ri定义:
第i步,abcd中32比特的b顺序写为4个8比特的q1,q2,q3,q4明文分组Kj的第i+1个32比特的ki。j拆为8比特的k1i,k2i,k3i,k4i
t1i=q1+i+j+k1i (8位模加)
t2i=q2+i+j+k2i (8位模加)
t3i=q3+i+j+k3i (8位模加)
t4i=q4+i+j+k4i (8位模加)
其中ri=P(t1i)P(t2i)Q(t3i)Q(t4i)
(1)第j分组第n轮第i步开始时,(1≤n≤4)
Ri.n=ki-1.n⊕(P(t1i)P(t2i)Q(t3i)Q(t4i))]]>
b=b+(T1+W)<<<(q1mod32);
(T1,T2,T3,T4,T5)←(T2,T3,T4,T5,Ri.n<<<(i+1))此为(T1,T2,T3,T4,T5)i.n
a=a+(ProcessPi(b,c,d)+Ri.n+b)<<<(q2mod32)
(a,b,c,d)←(d,a,b,c)此为(abcd)i.n
(2)n+1轮的初始化:
(abcd)0.n+1=(abcd)15.n;
(T1,T2,T3,T4,T5)0.n+1=(T1,T2,T3,T4,T5)15.n
即:n轮最后一步abcd和T1,T2,T3,T4,T5的状态,为n+1轮的初始状态。
hn=(abcd)15.n
n=n+1,…,直到n=4时,得到h4
Hj=((h1||h2)⊕(h3||h4))⊕Hj-1]]>
(3)j+1分组的初始状态(i=0,n=1)为j分组最后一轮最后一步(i=15,n=4)的状态:
(abcd)0.1.j+1=(abcd)15.4.j
(T1,T2,T3,T4,T5)0.1.j+1=(T1,T2,T3,T4,T5)15.4.j
j=j+1,
……,
一直到j=m,求出Hm
【具体实施方式】
以所有不同的单节字为基元,随机乱序排列成总共长度为256B的固定序列表“PBS”
建立独立的2个PBS基础表,“PS”和“QS”
用P(t)来表示在PS上查表获得单字节基元,t为对应基元地地址;
用Q(t)来表示在QS上查表获得单字节基元,t为对应基元的地址;
要求:PS和QS上的基元分布随机均匀,且对于任意一个t(0≤t≤255),有P(t)≠Q(t)
定义N0,N1,N2,N3,N4,N5,N6为6个给定的32比特常量,N0为给定的128比特常量。
设置4个32比特的寄存器A,B,C,D组成的累加器,a,b,c,d代表这4个寄存器变量组成abcd,进行运算并存储运算结果。设置辅助的5个寄存器变量T1,T2,T3,T4,T5,每个为32比特.定义一个32比特的固定字W。
所有加法为模加,“←”表示同时赋值,“<<<”为循环左移,表示对应位异或,所有变量为整形变量。
1)对于基表变量序列BTS
密钥K为144比特长,拆分为16比特的子密钥K0,K1,…,Ki,…,K8初始化时,T1=N1,T2=N2,T3N3,T4=N4,T5=N5,常量W=N6(abcd)0=N0变量i,j
步数i(0≤i≤8),设定最大轮数jmax。
每一轮共9步,每一步输入Ki获得Ri后,输入为abcd,Ri,T1算法
对于j轮,第i步0≤i≤8(0≤j≤jmax)
(1)第j轮第i步开始时,abcd记为(abcd)i。j,abcd中32比特的b顺序写为4个8比特的s1,s2和q1,q2,子密钥16比特Ki写为2个8比特的K1i,K2i
t1i=q1i+i+j+K1i (8位模加)
t2i=q2i+i+j+K2i (8位模加)
定义Ri是由四个8比特基元P(t1i),P(t2i),Q(t1i),Q(t2i)串接构成的32比特字
Ri。j=P(t1i)P(t2i)Q(t1i)Q(t2i)
b=b+(T1+W)<<<(s1mod32);(加法为32位模加)
(T1,T2,T3,T4,T5)←(T2,T3,T4,T5,Ri。j<<<(i+1))此为(T1,T2,T3,T4,T5)i。j
a=a+(ProcessPi(b,c,d)+Ri。j+b)<<<(s2mod32)(ProcessP1(b,c,d)为处理P函数,见后)
(a,b,c,d)←(d,a,b,c)(同时赋值)此时abcd即为(abcd)i+1。j
(2)j+1轮的初始化:
(abcd)0。j+1=(abcd)8。j,(T1,T2,T3,T4,T5)0。j+1=(T1,T2,T3,T4,T5)8。j
即:j轮最后一步abcd和T1,T2,T3,T4,T5的状态,为j+1轮的初始状态。
(3)(abcd)8。j为j轮的yj,
j=0时,获得y0,1≤j起输出Yj为输出序列
j+1,进入下轮
……,
直至j=jmax,结束
(4)ProcessPi(b,c,d)处理P函数:
i=0,1,2时:ProcessPi=(bANDc)OR((NOTb)AND(d))
i=3,4,5时:ProcessPi=(bANDd)OR(cAND(NOTd))
i=6,7,8,时:ProcessPi=bXORcXORd
2).基表变量循环体构造的杂凑函数BTH
将明文分成每个为512比特的分组,并进行MD强化:
原明文长度x,在明文后添加b比特(添加第一个比特为1,后面接着添加b-1个0),使得添加后的长度x+b=512m-64(m是正整数)b≤512,若x=512m-64,则b=512。最后的明文块b比特后再加上64位长度值xmod264。这样明文总共m个512位分组,我们用K1,K2,……Kj,……,Km来表示各个分组
每个分组为512比特,依次拆为32比特的Ki。j其中0≤i≤15,1≤j≤m
每个明文分组进行4轮,各16步的运算,每轮的第16步的(abcd)15输出128比特,分别记为h1,h2,h3,h4
h1||h2表示h1,h2串接成256比特,h3||h4表示h3,h4串接成256比特,“||”为级联符号,表示对应比特位异或运算
Hj=((h1||h2)⊕(h3||h4))⊕Hj-1]]>为256比特
当j=m时,最终的Hm为整个明文的杂凑值。预定义H0值,设置5个辅助的寄存器变量
T1,T2,T3,T4,T5,每个为32比特。定义变量i,j,n,
(1)初始化设置以及杂凑时的Ri定义:
第一个明文块首轮第一步(j=0,n=0,i=0)
初始化:T1=N1,T2=N2,T3=N3,T4=N4,T5=N5,常量W=N6(abcd)0=N0第i步,abcd中32比特的b顺序写为4个8比特的q1,q2,q3,q4明文分组Kj的第i+1个32比特的ki。j拆为8比特的k1i,k2i,k3i,k4i
t1i=q1+i+j+k1i (8位模加)
t2i=q2+i+j+k2i (8位模加)
t3i=q3+i+j+k3i (8位模加)
t4i=q4+i+j+k4i (8位模加)
定义ri是由四个8比特基元P(t1i),P(t2i),Q(t3i),Q(t4i)串接构成的32比特字
ri=P(t1i)P(t2i)Q(t3i)Q(t4i)
(2)算法
(i)对于第j分组第n轮第i步(1≤n≤4,0≤i ≤8)
Ri.n=ki-1.n⊕(P(t1i)P(t2i)Q(t3i)Q(t4i))]]>
b=b+(T1+W)<<<(q1mod32);
(T1,T2,T3,T4,T5)←(T2,T3,T4,T5,Ri.n<<<(i+1))此为(T1,T2,T3,T4,T5)i.n
a=a+(ProcessPi(b,c,d)+Ri.n+b)<<<(q2mod32)
(a,b,c,d)←(d,a,b,c)此为(abcd)i.n
(ii)(abcd)0.n+1=(abcd)15.n;
(T1,T2,T3,T4,T5)0.n+1=(T1,T2,T3,T4,T5)15.n
即:n+1轮的初始状态为n轮最后一步abcd和T1,T2,T3,T4,T5的状态。
hn=(abcd)15.n
直到n=4时,分别得到h1,h2,h3,h4
Hj=((h1||h2)⊕(h3||h4))⊕Hj-1]]>
(iii)j+1分组的初始状态(i=0,n=1)为j分组最后一轮最后一步(i=15,n=4)的状态:
(abcd)0.1.j+1=(abcd)15.4.j
(T1,T2,T3,T4,T5)0.1.j+1=(T1,T2,T3,T4,T5)15.4.j
j=j+1,
……,
一直到j=m,求出Hm
(iv)ProcessPi(b,c,d)同MD5
n=1时,ProcessPi(b,c,d)=(bANDc)OR((NOTb)AND(b))
n=2时,ProcessPi(b,c,d)=(bANDd)OR(cAND(NOTd))
n=3时,ProcessPi(b,c,d)=bXORcXORd
n=4时,ProcessPi(b,c,d)=cXOR(bOR(NOTd))。