背包密码体制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

背包密码体制
作者: 指导老师:
摘要背包公钥加密是第一个具体实现了的公钥加密的方案.本文主要分析背包公钥加密算法的
数学理论基础,描述背包公钥加密算法的体制,讨论背包公钥加密算法的加密算法与解密算法的过
程和原理。

采用MH法通过掩盖超递增背包序列,进而对背包公钥加密算法加以该进,用实例加
以实现,并对它的安全性进行讨论和分析.
关键字模逆; 同余式; 欧几里德算法; 超递增序列;掩盖超递增序列
1 引言
加密技术是一门古老而深奥的学科,它对一般人来说是陌生而神秘的,因为长期依赖,它只在很少的范围内,如军事、外交、情报等部门使用.计算机机密技术是研究计算机信息加密、解密及其变换科学,是数学和计算机的交叉学科,也是一门新兴的学科,但它已成为计算机安全主要的研究方向,也是计算机安全课程教学中主要内容.
密码学(Cryptology)一词源自希腊语“krypto’s”及“logos”两词,意思为“隐藏”及“消息”.它是研究信息系统安全保密的科学.其目的为两人在不安全的信道上进行通信而不被破译者理解他们通信的内容.
密码学根据其研究的范围可分为密码编码学和密码分析学.密码编码学研究密码体制的设计,对信息进行编码实现隐蔽信息的一门学问,密码分析学是研究如何破译被加密信息或信息伪造的学问.它们是相互对立、相互依存、相互促进并发展的.密码学的发展大致可以分为3个阶段:
第一阶段是从几千年前到1949年.这一时期密码学还没有成为一门真正的科学,而是一门艺术.密码学专家常常是凭自己的直觉和信念来进行密码设计,而对密码的分析也多给予密码分析者(即破译者)的直觉和经验来进行的.
第二阶段是从1949年到1975年.1949年,美国数学家、信息论的创始人Shannon,Claude Elwood发表了《保密系统的信息理论》一文,它标志这密码学阶段的开始.同时以这篇文章为标志的信息论为对称密钥密码系统建立了理论基础,从此密码学成为一门科学.由于保密的需要,这时人们基本上看不到关于密码学的文献和资料,平常人们是接触不到密码的.1976年Kahn出版了一本叫做《破译者》的小说,使人们知道了密码学.20世纪70年代初期,IBM发表了有关密码学的几篇技术报告,从而使更多的人了解了密码学的存在,但科学理论的产生并没有使密码学失去艺术的一面,如今,密码学仍是一门具有艺术性的科学.
第三阶段为1976年至今.1976年,Diffie和Hellman发表了《密码学的新方向》一文,他们首次证明了在发送端和接受端不需要传输密码的保密通信的可能性,从而开创了公钥密码学的新纪元.该文章也成了区分古典密码和现代密码的标志.1977年,美国的数据加密标准(DES)公布.这两件事情导致了对密码学的空前研究.从这时候起,开始对密码在民用方面进行研究,密码才开始充分发挥它的商用价值和社会价值,人们才开始能够接触到密码学.这种转变也促使了密码学的空前发展.密码学发展至今,已有两大类密码系统:第一类为对称密钥(Symmetric Key)密码系统,第二类为非对称密钥(Public Key)密码系统.
和RSA公钥体制一起,背包公钥体制被认为是两个著名的公钥体制之一.1978年Merkle 和Hellman首先提出了一个现在称为MH背包体制的密码体制,虽然它和其几个变形在20世纪80年代初被Shamir等人破译了,但是,它的思想和有关理论首先解释了公钥密码算法的本质,所以仍然具有深刻的理论研究价值.
自从Merkle和Hellman提出第一个背包型公钥密码以来,许多陷门背包被提了出来.背包型公钥密码的设计极大地丰富了公钥密码,在陷门背包的发展过程中,人们使用了各种各样
的技术来设计陷门背包.比如,使用加法背包的公钥加密,使用紧凑背包的公钥加密,使用二次背包即矩阵覆盖的公钥加密,使用模背包的公钥加密,使用丢翻图方程的公钥密码等.背包型公钥加密由于其加解速度快而备受关注,然而,现有的背包型公钥密码几乎都被证明是不安全的.
陷门背包的设计思想是从一个简单的背包问题出发来进行构造:把易解的背包问题伪装成一个看似困难的背包问题,这易伪装的方法就是陷门信息.合法的接受者Alice由于掌握了陷门信息因而能够把该问题恢复成一个易解背包问题,通过求解该易解背包问题,Alice能够重构明文,而对于非法的接受者Eve来说,他从密文恢复明文就意味着求解一个困难的背包问题.
2 背包公钥加密算法的数学理论
2.1 素数与因式分解
定义1:如果一个自然数m可以被另一个自然数n除尽,则称m整除n,记为:n|m.
定义2:除1外,只能被1和其本身整除的自然数称为素数,不是1,且非素数的正整数称为合数.
2.2 欧几里德算法
2.2.1欧几里德算法的概述
欧几里德(Euclid)算法是数论中的一个基本技术,是求两个正整数的最大公因子的简化过程。

而推广的欧几里德算法不仅可求两个正整数的最大公因子,而且当两个正
整数互素时,还可以求出一个数关于另一个数的乘法逆元。

欧几里德算法是基于下面的一个基本理论:
引理:对于任意的非负整数a和正整数b,有gcd(a,b)=gcd(b,a mod b)。

证明:b是正整数,因此可将a表示为a=kb+r,a mod b=r,其中k为一整数,所以有
a mod b=a-kb.
设d是的a,b的公因子,即d|a和d|b,所以d|kb。

由d|a和d|kb得d|(a mod b),因此d 是b和a mod b的公因子。

所以得出a,b的公因子集合与的b,a mod b公因子集合相等,两个集合的最大值也相等。

2.2.2欧几里得算法设计
欧几里算法设计如下:由于gcd(a,b)=gcd(|a|,|b|),且假定算法中输入的两个正整数分别为f,d 且f>d。

欧几里德算法如下:
int Euclid(int f, int d)
{
int x=f; int y=d; int r;
while(y!=0 || y!=1)
{
if(y==0) then return x=gcd(f,d);
if(y==1) then return y=gcd(f,d);
r=x mod y;
x=y;
y=r;
}
}
其中函数gcd是求两正整数的最大公因子。

设输入的两正整数为a,b,算法如下:
int gcd(int a,int b)
{
int m,n,k;
if(a==b) return a;
else if(a>b) return gcd (a-b,b);
else return gcd (a,b-a);
}
2.3 求逆元
2.3.1相关概念及定理
乘法逆元定义:如果gcd(a,b)=1,则若b在mod a下有乘法逆元(不妨设b<a),即存在一数值x(x<a),使得b *x=1mod a 恒成立。

此时即有x为b在mod a下的逆元。

将上述推广到欧几里德算法有先求出gcd(a,b),当gcd(a,b)=1时,则可以返回b的逆元。

2.3.2模逆算法
由推广的欧几里德算法,有类C加以实现,求乘法逆元:
Extended Euclid(int f , int d)
{
int x1=1,x2=0,x3=f;
int y1=0,y2=1,y3=d;
int t1,t2,t3;
int q;
while(y3!=0||y3!=1)
{
if (y3==0) x3=gcd(f,d); return 0;
if (y3==1) y3=gcd(f,d); return y2;
q=x3/y3;
t1=x1-q*y1;t2=x2-q*y2;t3=x3-q*y3;
x1=y1;x2=y2;x3=y3;
y1=t1;y2=t2;y3=t3;
}
}
据以上过程,不难给出模逆算法的流程图:
3 背包公钥加密算法
背包问题也称为子集和问题,已证明是一个NP完全问题,没有有效的算法.1979年,
R.Schroeppel和A.Shamir提出了一种求解一般背包问题的算法,算法的时间复杂性为O(2n/2),
空间复杂性为O(2n/4).一般情况下,问题不能在多项式时间内来求解,但是,在某些特殊情况
下,仍然可能在多项式时间内求解。

3.1 背包问题的引入
背包问题:可通俗的举例描述为:设有物件的重量分别为:1,2,4,8,16,32kg,背包的
载重为23kg,问背包中载有哪几件物品,这是一个易解得背包问题,由二进制表示式:
23=1+2+4+16,立即可知,背包载的重量分别为:1,2,4,16kg物品。

一般的背包问题的数
学描述为:给定的背包向量a=(a1,a2,a3,a4,...,an),背包载重重量S,求向量
X=(x1,x2,...xn)使得S =a1*x1+a2*x2+a3*x3+...+an*xn
问方程是否有二进制解xi=0或1(其中i为自然数:1,2,3,...,n)如有二进制解,则求其解.
对于某些特殊的背包问题很容易解决,如上述的例子是递增背包问题,ai>∑aj,简称易解背
包问题,若ai是随机性分布的背包问题,则很难解决,称为难背包问题。

3.2易解背包问题
超递增背包问题是一个易解得背包问题,假设已知ai (其中有i为1,2,3,4,...,n),并且有
a>∑aj。

为了满足低密度子集和攻击的条件我们令一横不等式:k^n> ai,其中k表示进制,即表
示k进制,此处我们置k恒为2,即在本文中恒用二进制。

已知S为背包容积,对A从右向左检查每一元素,以确定是否在解中。

若s>=an,则an 在解中,
令xn=1,若s<an ,则an 不在解中xn=0。

下面令:
S S<an
S=
S-an S>=an
对an-1重复上述过程,一直下去,知道检查出ai 是否在解中。

检查结束后得到x=(x1,x2,x3,...xn),
即为密文.
3.3 MH 法及简单背包密码算法的改进
美国斯坦福大学的R.C.Merkle 和M.E.Hellman 在1978年提出了一个背包陷门背包公开密
钥的方法,简称为MH 法。

MH 法的基本思想是先选择一个简易的背包,然后选择了陷门信息,
使易解得背包转为难解背包问题,如果知道了陷门信息,这难解背包又成为易解背包问题,
因此MH法又称为陷门背包密码方法。

陷门背包的设计思想几乎总是从一个简单的背包问题出发来进行构造:把易解的背包问题
伪装成一个看似困难的背包问题,这一伪装的方法就是陷门信息。

合法的接收者Alice 由于掌
握了陷门信息因而能够把该问题恢复成一个易解背包问题,通过求解该易解背包问题,Alice
能够重构明文;而对于非法的接收者Eve 来说,他从密文恢复明文就意味着求解一个困难的
背包问题。

首先,建立陷门背包
(1) 选择简单超递增背包序列向量 a=(a1,a2,a3,...,an),构成一个易解得背包:求得二进
制解集,即xi 取0或1,使得对给的S>0,有等式S =a1*x1+a2*x2+a3*x3+...+an*xn ,其中S 是明
文,例如选择 a=(171,196 ,457,1191,2410)。

( 2 ) 选择一个大数值P 及与P 互素的的大数值W,使得(W ,P )=1,其中P>∑ai ,
例如:我们取P=8443,W=2550
( 3 ) 利用以上给定的条件构造一个难解的背包向量b=(b1,b2,b3,...,bn),使得bi=W *a
mod P,例如以上数据算得到掩盖的背包序列。

b=(5457,1663,216,6013,7439).
( 4 ) 计算W 关于模P 的乘逆1W
-(P)即解方程1W -* W=1(mod P),例如由以上数据计算得到:1W -=3950至此,我们已经建立了一个陷门背包,其中难解背包向量b 是公开钥,用于
加密,模P 及陷门信息1W
-是一个不公开的解密密钥。

其次,执行加密过程 假设二进制数值M 为明文,且有M=m1,m2,m3,...,mn ,则M=∑m*2,例如我们令M=11,
即有M=(0,1,0,1,1)用b 加密为密文,例如按上述数据算得E=15115.
再次,执行解密过程
合法的文件接收者知道大数值模P ,及陷门信息1W
-,如果不知道或者没有保存易解得
W-及公开钥b计算出背包向量a=(a1,a2,a3,...,an)满足同余式:
背包向量a,可以利用1
W-*bj(mod P)。

aj=1
例如按以上的数据算的原来的易解背包向量为
a=(171,196,457,1191,2410)。

建立易解背包问题,求mj(j=0,1,2,..,n)使得
W-*E=∑mbj=∑ mj a(mod)P 例如上数据有S=3950*15115=3797(mod8443)易解S=1
背包问题:
S= ∑aj,aj=(171,196,457,1191,2410) ,解得m=(0,1,0,1,1) =11,从而恢复了明文。

4、背包公钥加密算法模拟实现
4.1 实例
英文字母表及字母的二进制表示
下设带加密的明文为是:SAUNA AND HEALTH ,由以上表格有相应的二元序列为: 1001100001,1010101110,0000100000,0000101110,
0010000000,010*******,0000101100,1010001000
4.2 密钥生成
取模数k=1590,及与之相互素的乘数W=43,即 gcd (43,1590)=1,与此同时密钥为:模数1590,乘数43.密钥与此同时得到由掩盖背包向量为
b=(43,129,215,473,903,302,561,1165,697,1523).
4.3 加密
再得到掩盖背包序列B 后,对明文加密为:
1001100001=43+473+903+1523=2942
1010101110=43+215+903+561+1165+697=3584
0000100000=903
0000101110=903+561+1165+697=3326
0010000000=215
010*******=129+1165+1523=2817
0000101100=903+561+1165=2629
1010001000=43+215+561=819
综合所知有加密后的密文为:(2942,3584,903,3326,215,2817,2629,819)
4.4 解密
为了解密,先对乘数W ,求得其逆元1W -,利用欧几里得算法求得乘法逆元1W -=37,可解密如下:
37*2942=734 mod 1590 37*3584=638 mod 1590 37*903=21 mod 1590 37*3326=632 mod 1590 37*215=5 mod 1590 37*2817=879 mod 1590 37*2629=283 mod 1590 37*819=93 mod 1590
得到明文为:(734,638,21,632,5,879,283,93)对应于原来的A 序列为:
1001100001,1010101110,0000100000,0000101110,
0010000000,010*******,0000101100,1010001000
再根据表格中对应的字母有,对应的明文为:SAUNA AND HEALTH
5、背包公钥加密算法的安全性分析
5.1、低密度子集和攻击
影响陷门背包的安全性的一个重要的参数是背包密度,背包密度小于0.9408 的陷门背包都容易遭受低密度子集和攻击。

因而,要设计安全的背包型公钥密码,其背包密度必须大于0.9408。

如果背包密度大于1,则该体制在实现过程中就会存在解密不唯一的问题。

因此,要设计安全的背包型公钥密码必须兼顾到背包密度不能太小以及解密必须唯一这两个要求。

低密度子集和攻击的基本思想是,把求解低密度子集和问题与格理论中的基规约算法联系起来。

通过低密度子集和问题来构造格基,对该基实施LLL 算法或者它的改进算法,找到格基的一个规约基,该规约基的第一个向量很短,这个短向量以很大的概率等于低密度子集和问题的解向量。

低密度子集和问题就是求解Σ ai *xi=S, 其中xi 取值0或1,构造格基V.其中V 的列向量记为v1 ,v2,...,vn+1, V 生成了一个n+1维的格。

设x1 ,... , xn 是该问题的解,则(x1 ,..., xn,0)是格中的向量,这是因为( x1,...,xn,0) =Σxi*vi +vn+1.其中xi 仅可以取值0或1说明向量(x1 ,..., xn, 0)很短,对由V 生成的格实施格基规约算法所获得的规约基的第一个向量也很短,该向量以一定的概率等于(x1 ,..., xn, 0)。

低密度子集和攻击算法成功的概率依赖于背包密度:
d = nlog2 k |log2 max ai . 其中k=2,且如果背包密度小于0.9408的陷门背包都
容易遭受低密度子集和攻击。

但背包密度大于1 时,该攻击算法对背包体制并不构成致命的威胁。

所以为了满足低密度子集和攻击的条件我们在上面定义时令2^n>max ai,从而很明显可得到d = nlog2 2|log2 max ai>1, 因此,本文的密码体制能够抵抗低密度子集和攻击。

5.2 暴力攻击
一种显然的暴力攻击模式是:给定密文 C ,穷举搜索子X=(x1 ,..., xn),0 ≤ xi ≤ 1 ,直到探出明文为止。

这种穷举搜索成功的概率为1/2^n 。

另外一种暴力攻击模式是:给定公钥B=(b1 ,..., bn),穷举搜索(1W -, M)使背包向量ai ≡ bi*1W -(modM ) 满足条件。

假定M 已知,1W -= a1*b1(modM ),因此,只需穷举搜索a1。

这共有|U|^n=10n 种选择,因此穷举搜索a1 成功的概率为1/10^n 。

本文的密码体制能够抵抗暴力攻击。

6、结束语
本文提出了一类新的易解背包问题并且据此构造了一个背包型密码体制。

本文提出的公钥密码体制不仅能够抵抗低密度子集和攻击,而且能够抵抗暴力攻击,然而这并不能说明该体制就是安全的。

对于背包密码系统的破解,一般是基于一个超递增序列这一特性,从而利用公钥来构造新的超递增序列即可实现破解。

而本例中原来的超递增背包序列被完全掩盖,从而其保密性相对较强。

背包密码体制的安全性一方面取决于超递增序列的元素个数和该序列中每个元素的位长。

而在一般的背包密码体制中过分强调加强超递增背包序列中的元素位数长度也是不切实际的。

参考书目
[1] Alfren Menezes,Paulc 等. 《应用密码学手册》[M] .北京:电子工业出版社.
[2] 王衍波,薛通. 《应用密码学》[M] . 北京:机械工业出版社.
[3] 潘承桐,潘承彪.,《初等数论(第二版)》[M] . 北京:北京大学出版社.
[4] 杨子胥. 《近世代数(第二版)》[M] . 北京:高等教育出版社.
[5] Kenneth H.Rosen. 《Elementary number theory (5th edition) 》[M]. 北京:机械工业出版社.
[6]赵泽茂.数字签名理论[M].北京:科学出版社,2007:155-159.
The packsack public key encryption Algorithm
Author:WangChengxi Supervisor:CHEN Fenglin
Abstract The packsack public key encryption is the first public key encryption scheme which has been specifically realized.This thesis mainly analyses its mathematical theory foundation with desccription of its system structure and disscusses the process and principle of both pubilckey-encryption algorithm and publickey-deciphering algorithm, and then use MH algorithm to cover the ultra-increasing sequence to inprove the algorithm, focus on the realization of the algorithm with examples.In the end,the paper disscusses and analyses the algorithm’s security in addition.
Key words modular inverse; gruence; Euclid algorithm; ultra-increasing sequence cover-ultra-increasing sequence。

相关文档
最新文档