背包密码体制
作者: 指导老师:
摘要 背包公钥加密是第一个具体实现了的公钥加密的方案.本文主要分析背包公钥加密算法的数学理论基础,描述背包公钥加密算法的体制,讨论背包公钥加密算法的加密算法与解密算法的过程和原理。采用MH法通过掩盖超递增背包序列,进而对背包公钥加密算法加以该进,用实例加以实现,并对它的安全性进行讨论和分析.
关键字 模逆; 同余式; 欧几里德算法; 超递增序列;掩盖超递增序列
1 引言
加密技术是一门古老而深奥的学科,它对一般人来说是陌生而神秘的,因为长期依赖,它只在很少的范围内,如军事、外交、情报等部门使用.计算机机密技术是研究计算机信息加密、解密及其变换科学,是数学和计算机的交叉学科,也是一门新兴的学科,但它已成为计算机安全主要的研究方向,也是计算机安全课程教学中主要内容.
密码学(Cryptology月度计划表模板)一词源自希腊语“krypto’s”及“logos”两词,意思为“隐藏”及“消息”.它是研究信息系统安全保密的科学.其目的为两人在不安全的信道上进行通信而不被破译者理解他们通信的内容.
密码学根据其研究的范围可分为密码编码学和密码分析学.密码编码学研究密码体制的设计,对信息进行编码实现隐蔽信息的一门学问,密码分析学是研究如何破译被加密信息或信息伪造的学问.它们是相互对立、相互依存、相互促进并发展的.密码学的发展大致可以分为3个阶段:
第一阶段是从几千年前到1949年.这一时期密码学还没有成为一门真正的科学,而是一门艺术.密码学专家常常是凭自己的直觉和信念来进行密码设计,而对密码的分析也多给予密码分析者(即破译者)的直觉和经验来进行的.
第二阶段是从1949年到1975年.1949年,美国数学家、信息论的创始人Shannon,Claude Elwood发表了《保密系统的信息理论》一文,它标志这密码学阶段的开始.同时以这篇文章为标志的信息论为对称密钥密码系统建立了理论基础,从此密码学成为一门科学.由于保密的需要,这时人们基本上看不到关于密码学的文献和资料,平常人们是接触不到密码的.19
76年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 mo
d 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;
el if(a>b) return gcd (a-b,b);
el 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.Sc
s6直播hroeppel和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法又称为陷门背包密码方法。