即便通过量次模乘运算进行迭代构造,如多重MH背包,依旧不能充分隐藏初始序列的冗余度,破译者能够从公钥序列动身找到并利用该冗余度,进而完全破译[10,11]。
王背包算法仅运用中国剩余定理进行一次迭代变换,有如下关系:
ui=ai-kpi*p
vi=ai-kqi*qi=1,…,n
显然中国剩余定理所包括的关系等同于模乘运算关系。
另外,王保仓还有一个公钥算法[12],运用中国剩余定理和模乘运算进行迭代构造,也是容易被破译的,该算法简述如下:
随机选取6个不同的素数P1,…,P6,其长度均为k=333比特,令n=P1…P6。
随机选择一个6阶可逆矩阵A=(aij),其中aij的长度不超过30比特。
记矩阵A的逆为B。
由中国剩余定理计算a1,…,a6,知足a1≡a11(modP1),a1≡a21(modP1),…,a1≡a61(modP1);a2≡a12(modP2),a2≡a22(modP2),…,a2≡a62(modP2);…;a6≡a16(modP6),a6≡a26(modP6),…,a6≡a66(modP6)。
a6模n存在逆元b,即ba6≡1(modn)。
计算b1≡ba1(modn),…,b5≡ba5(modn)。
公钥为模数n和b1,…,b5;私钥为a6,P1,…,P6和矩阵B。
破译方式简述如下:
运用格规约算法[3]能够求出b模n的逆元a6,具体方式参考文献[14]破译法的前脸部份,进而求出a1,a2…a5。
由于a6是通过中国剩余定理生成的,因此(a6-a16)同n存在最大公因子p1(此为初始序列P1,…,P6的冗余度),a16的位数是30比特,故穷举a16是可行的,每猜想一次,验证gcd(a6-a16,n)是不是大于1,若是是,则P1=gcd(a6-a16,n),依此能够破译整个算法。
综上,从目前的研究看,仅通过模乘运算或中国剩余定理构造的背包公钥算法都是不安全的[1,13,14],缘故是只利用了混乱技术,不足以充分隐藏初始序列中的冗余度。
加法扩散
如上所述,仅依托混乱技术还不能确保安全,需要引进扩散技术,以分散初始序列的冗余度,使得解决者难以利用。
扩散技术有多种类型[9],大体方式是换位,如DES,但关于背包机制来讲,换位将引发加法进位的改变,难以还原,故换位方式不适用;IDEA采纳模加、模异或(即无进位加)运算实现扩散。
背包公钥系统的背包值是初始序列各项及其变换形式的子集和。
鉴于加法易于通过逆运算----减法恢恢复值,因此,初始序列的冗余度适合采取加法的方式来实现扩散。
不同的背包公钥的初始序列所包括的冗余度是不同的,为分散这些冗余度而采纳的加法扩散技术也是不同的,必需依照具体情形而定,但整体原则有两条:
一是在模乘运算的基础上,进一步增强雪崩效应;二是阻止破译者从公钥动身利用初始序列及冗余度。
5扩散技术
下面将混乱技术和项内扩散技术加入“王背包算法”,构造新型背包公钥算法。
算法描述
(1)选取超递增初始序列B=(b1,…,bi…,bn),b1=max(bi),i=1,…,n
(2)选互素的正整数w和m。
其中,
<m<2b1
(3)w作为模乘因子,对序列B中的bi进行模乘运算,将B序列转换D序列:
di≡wbi(modm)i=1,…,n
D=(d1,…,dn)
(4)将n比特位的di进行不对称分组:
在第j位(从左到右记数)分为左、右二部份,形成ei和vi,位数别离为j比特和n-j比特,其中,j>>n-j,di=ei*2n-j+vi,
“>>”表示“远远大于”;
(5)选正整数t,知足(ei+t*vi)<2j-1,即被加数ei无进位
令ui=ei+t*vi,i=1,…,n
(6)选互素的正整数p和q,知足:
p>
,q>
运用中国剩余定理,生成n项公钥A=(a1,…,an),即
0≤ai≤pq−1,ai≡ui(modp),ai≡vi(modq),i=1,…,n
私钥为:
p,q,t,w-1,m
其中,w-1为w模m的逆。
而超递增初始序列B作为固定值嵌入算法中。
加密
二进制明文x=(x1,…,xn),xi为0或1,被加密为c=a1x1+…+an
解密
(1)计算u=c(modp),v=c(modq)
(2)计算e=u-t*v
(3)计算d=e*2n-j+v
(4)计算y=w-1*dmodm
(5)运用超递增初始序列B计算得明文x
安全性分析
以上算法的第(3)和第(6)步为模乘运算关系,属混乱技术。
第(4)步和第(5)步实施不对称分组,将n比特位的di分为左、右二部份,左部长度远大于右部,右部扩展t倍后叠加到左部,使得超递增初始序列bi各项之间及模乘因子w的微小转变在整个项分散开来,弥补当bi和w低位转变时,模乘结果雪崩效应不明显的缺点。
不对称分组及扩展叠加技术为项内扩散技术。
关于背包公钥密码算法有两种大体的解决:
明文恢复解决和密钥恢复解决。
前者指从密文动身来求解明文,后者是指从公钥动身寻觅密钥,现讨论这两种解决。
5.4.1明文恢复解决
如上所述,背包密度只有处在和1之间背包公钥算法才是安全的。
以n=512为例,说明本算法构造的背包密度能够大于。
(1)选初始序列B=(b1,…,bi…,b512)
(2)选互素的w和m,m须大于B中所有项的和,由于初始序列B的超递增性质,m最小可选513比特位与w互素的正整数。
(3)运用w和m,对B序列进行模乘运算,转换为D序列
di≡wbi(modm)i=1,…,512
由于m的位数是513比特,因此,di的位数不大于513比特。
(4)将513比特位的di进行不对称分组:
在第352比特的位置分为左、右二部份,形成ei和vi,长度别离为352比特和161比特,di=ei*2161+vi
(5)选正整数t,知足ei+t*vi<2352-1,即被加数ei无进位;
令ui=ei+t*vi,i=1,…,512
ui的位数仍然是352比特。
ei和vi长度相差191比特,t能够取100比特以上的正整数。
(6)选素数p和q,知足:
p>
,q>
运用中国剩余定理,生成512项公钥A=(a1,…,a512),即
0≤ai≤pq−1,ai≡ui(modp),ai≡vi(modq),i=1,…,512
下面考察p和q的位数:
512个ui相加,最多扩展log2512=9比特。
因此,p能够取361比特位的素数。
同理,q能够取170比特位的素数。
由此,公钥A的项应该为361+170=531比特。
背包密度D=512/531=,处在和1之间。
5.4.2密钥恢复解决
本算法的初始序列B是固定的,能够公布的,因此,对安全性的要求类似于要求一个对称密码能够抵御“已知明文解决”。
第一,本算法运用不对称分组方式,将序列D分成序列U和V,各序列中的项存在以下关系:
di=(ui-tvi)*2n-i+vi。
其中,t能够是100比特以上的整数,由于t的存在,破译者无法运用解多重MH背包的方式[10,11]破译本算法。
第二,即便解决者从公钥动身逆向破译取得了U和V序列,必需猜想t取得D序列后,再进行格解决[5]或Shamir解决法[8]继续破译。
5.4.1节已经阐明,关于512项的背包算法,ui和vi的长度能够相差191比特,t能够是100比特位以上的正整数,要猜想解决100比特以上的正整数是不可计算的。
由此,t的存在,使得破译者难以取得D序列,无法从公钥动身利用初始序列及冗余度。
再则,若是破译者从初始序列B动身,也不能以此恢复私钥,证明如下:
第(3)步运用模乘因子w对序列B=(b1,…,bn)进行模乘运算,将B序列转换序列D:
di≡wbi(modm)(5-4-2)
D=(d1,…,dn)i=1,…,n
由(5-4-2)式,可得:
bi≡w-1di(modm)i=1,…,n
上式能够以为是一个MH背包关系:
D作为初始序列,B作为公钥序列,w-1作为模乘因子。
但破译者不明白序列D的信息,关于破译者来讲,序列D的冗余度是零,不管是运用格解决法[5]仍是Shamir破译法[8],都不能恢复私钥w和m。
举例说明
取超递增序列为:
b1=58037,b2=29018,b3=14510,b4=7253,b5=3627,b6=1813,b7=907,b8=453,b9=227,b10=113,b11=57,b12=28,b13=15,b14=7,b15=3,b16=2
取模m=965613=(0001001)2
w=724210,w模m的逆w-1=4
计算得:
d1=738719=(0011111)2
d2=490061=(0001101)2
d3=486434=(0100010)2
d4=726023=(0000111)2
d5=242310=(0000110)2
d6=724663=(0110111)2
d7=241630=(0011110)2
d8=724323=(1100011)2
d9=241460=(0010100)2
d10=724238=(0001110)2
d11=724224=(0000000)2
d12=7=(00000000000000000111)2
d13=241407=(0011111)2
d14=241405=(0011101)2
d15=241404=(0011100)2
d16=482807=(0110111)2
在第13比特位与第14比特位间(从左到右)分割di,形成ei和vi,取t=3,得:
u1=e1+t*v1=()2=5864v1=(0011111)2=31
u2=e2+t*v2=(0)2=4059v2=(1001101)2=77
u3=e3+t*v3=(0)2=3902v3=(0100010)2=34
u4=e4+t*v4=()2=5693v4=(0000111)2=7
u5=e5+t*v5=(00)2=1911v5=(0000110)2=6
u6=e6+t*v6=()2=5826v6=(0110111)2=55
u7=e7+t*v7=(0)2=2169v7=(1011110)2=94
u8=e8+t*v8=()2=5955v8=(1100011)2=99
u9=e9+t*v9=(00)2=2042v9=(0110100)2=52
u10=e10+t*v10=()2=5700v10=(0001110)2=14
u11=e11+t*v11=()2=5658v11=(0000000)2=0
u12=e12+t*v12=(0000000010101)2=21v12=(0000111)2=7
u13=e13+t*v13=(0)2=2266v13=(1111111)2=127
u14=e14+t*v14=(0)2=2260v14=(1111101)2=125
u15=e15+t*v15=(0)2=2257v15=(1111100)2=124
u16=e16+t*v16=()2=4128v16=(1110111)2=119
取p=59713,q=977
运用中国剩余定理计算公钥,得:
a1=43775493a2=41206029a3=28188438a4=