文档库 最新最全的文档下载
当前位置:文档库 › 浅谈背包公钥密码体制全解

浅谈背包公钥密码体制全解

浅谈背包公钥密码体制全解
浅谈背包公钥密码体制全解

背包密码体制之背包算法

姓名:张全英

学号:20143967

专业:信息与计算科学1班

学院:数学与信息科学

摘要:网络和信息安全正在成为一个国家政治、军事、经济以及社会生活正常运行的基础,它将是一个国家综合实力的重要体现。而密码学是信息安全的核心。公钥密码又是将加密、解密密钥甚至加密、解密函数分开,用户只保留解密密钥,而将加密密钥和加密函数一起公之于众,是密码学的重要组成部分。背包公钥和RSA一样是著名的公钥体制之一,特别是背包公钥的安全基础是背包问题,这是一个NP难问题。虽然在提出不久就遭到破解,但是在提出的背包公钥系统的改进方案中依然有几个被证明是安全的。背包公钥是首个把NP问题用于公钥密码的密码体制,而其他现阶段应用的公钥密码体制都是基于因式分解或离散对数问题的,他们都不是NP问题构造的,因此背包公钥体制的研究是十分有意义的。本文从背包体制的常用攻击方法入手,寻找被破解的原因,并针对这些原因提出了新的构造思路,利用非超递增序列构造背包体制。利用非超递增序列构造背包公钥有2个必须解决的问题是加密结果的不唯一性和解密的困难性。本文对一种同余多模背包序列进行分析,并利用得出的性质构造一种新的L序列,并证明了L序列能解决以上2个问题,并提出了利用L序列构造背包公钥体制的方案。为了加快加解密速度,还提出了模M和W-1的逆向构造算法。然后给出了非超递增背包公钥体制的模拟实现。

关键字:模逆,欧几里德算法,同余式,超递增序列

目录:

1.公钥密码的原理

2.公钥密码的数学基础:

一个公开密钥密码系统必须满足的条件是:

A.通讯双方A和B容易通过计算产生出一对密钥(公开密钥K1,私钥密钥K2)。

B.在知道公开密钥K1和待加密报文M的情况下,对于发送方A,很容易通过计算产生对应的密文:

C.C = Ek1(M)

D.接收方B使用私有密钥容易通过计算解密所得的密文以便恢复原来的报文:

E.M = Dk2(C)= Dk2[Ek1(M)]

F.除A和B以外的其他人即使知道公钥k1,要确定私钥K2在计算上也是不可行的。

G.除A和B以外的其他人即使知道公钥k1和密文C,要想恢复原来的明文C在计算上也是不可行的。

3.数论基础知识:

这些要求最终可以归结到设计一个单向陷门函数。

4.单向函数:单项陷门函数:

一个单向函数是满足下列条件的函数:它将一个定义域映射到值域,使得每个函数值有一个唯一的原像,同时还要满足下列条件:函数值计算很容易,而逆计算是不可行的。

所谓单向陷门函数是这样的函数,即除非知道某种附加的信息,否则这样的函数在一个方向上容易计算,而在另外的方向上要计算是不可行的。有了附加的信息,函数的逆就可以在多项式时间内计算出来。

一个实用的公开密钥密码系统的建立和发展依赖于找到一个单向陷门函数。

5.公开密钥密码分析

6.公钥密码的的应用和优缺点

7.背包问题(Knapsack Problem):贪心算法程序等

引言:基于背包密码算法是密码学历史上最早被设计出来的几个公钥密码算法之一.由于背包密码的快速加解密优势和背包问题是NP完全问题,很长一段时间内背包算法受到普遍的关注.自从Hellman提出第一个背包算法以来,密码学界提出了很多背包型加密算法.然而,这些背包算法易于遭受低密度子集和攻击、GCD攻击、联立丢番图逼近攻击以及正交格攻击等. 背包密钥密码体制所依赖的困难问题,大多数公钥密码体制可以分为两大类:一类是建立在数论问题基础之上,另一类则以背包问题为基础.这两种类型的公钥密码体制各数论难题的公钥密码系统保密性较强,但加、解密速度比较慢;基于背包问题的公钥密码系统的加、解密速度较快,但随着各种攻击的出现,其安全性似乎越来越得不到保障.基于此,为了兼顾加、解密算法的速度和安全性,对基于背包问题的现有公钥密码算法和GF(p)上椭圆曲线密码体制进行了深入的研究。

正文:

公钥密码体制的核心思想是:加密和解密采用不同的密钥。这是公钥密码体制和传统的对称密码体制最大的区别。对于传统对称密码而言,密文的安全性完全依赖于密钥的保密性,一旦密钥泄漏,将毫无保密性可言。但是公钥密码体制彻底改变了这一状况。在公钥密码体制中,公钥是公开的,只有私钥是需要保密的。知道公钥和密码算法要推测出私钥在计算上是不可行的。这样,只要私钥是安全的,那么加密就是可信的。

显然,对称密码和公钥密码都需要保证密钥的安全,不同之处在于密钥的管理和分发上面。在对称密码中,必须要有一种可靠的手段将加密密钥(同时也是解密密钥)告诉给解密方;而在公钥密码体制中,这是不需要的。解密方只需要保证自己的私钥的保密性即可,对于公钥,无论是对加密方而言还是对密码分析者而言都是公开的,故无需考虑采用可靠的通道进行密码分发。这使得密钥管理和密钥分发的难度大大降低了。

两种密码体制的特征对比

表 1将对称密码和公钥密码的特征进行了对比。如前所述,公钥密码体制使用两个密钥,习惯上,为了将其与对称密码体制中的密钥相区分,把公钥密码体制中使用的两个密钥分别称为公钥和私钥。公钥是可公开的,而私钥则是要保密的。

公钥密码的两种基本用途

公钥密码的两种基本用途是用来进行加密和认证。为了便于说明,不妨假设消息的发送

方为A,相应的公钥对为(PUA,PRA)。这里,PUA表示A的公钥,PRA表示A的私钥。

同理,假设消息的接收方为B,相应的公钥对为(PUB,PRB)。其中,PUB表示B的公钥,PRB表示B的私钥。对于A而言,既知道自己的公钥PUA,也知道B的公钥PUB。通常,就将A所知道的公钥集合称为公钥环。当需要对消息进行加密时,A从自己的公钥环中取出接收方的公钥,对消息进行加密,然后将消息发送给接收方。接收方收到加密消息后,用自己的私钥对密文进行解密。这个过程如图 1所示。

公钥密码体制原理简介及补遗 - 2 -

方为A,相应的公钥对为(PUA,PRA)。这里,PUA表示A的公钥,PRA表示A的私钥。同理,假设消息的接收方为B,相应的公钥对为(PUB,PRB)。其中,PUB表示B的公钥,PRB表示B的私钥。对于A而言,既知道自己的公钥PUA,也知道B的公钥PUB。通常,就将A所知道的公钥集合称为公钥环。当需要对消息进行加密时,A从自己的公钥环中取出接收方的公钥,对消息进行加密,然后将消息发送给接收方。接收方收到加密消息后,用自己的私钥对密文进行解密。这个过程如图 1所示。

图 1 公钥密码用于加密

由于A是用B的公钥PUB对消息进行加密,因此只有用B的私钥PRB才能解密密文C,而B的私钥PRB是由B秘密保存的。由于攻击者没有B的私钥PRB,因此攻击者要想仅根据密文C和B的公钥PUB解密消息是不可能的。由此,就实现了保密性的功能。

除了用于实现保密性之外,公钥密码还可以用来实现认证功能。过程如图 2所示

对比图 1,可以看到用公钥密码实现认证和用于保密的区别。最主要的不同在于加解密密钥的使用上,当用公钥密码实现保密功能时,是用接收方的公钥对消息进行加密,接收方用自己的私钥对消息进行解密;而当用公钥密码实现认证功能时,是用发送方的私钥对消息进行

加密,接收方收到之后,用发送方的公钥恢复出明文消息M。由于只有发送方A拥有私钥PRA,因此只要接收方B能够正确解密出密文C,就可以认为消息的确是由发送方A发出的。这样就实现了对发送方的身份的认证。不过,这种简单的公钥认证模型的问题是:第一,这种方式只能对发送端进行认证;第二,由于攻击者也可以知道A的公钥,因此攻击者也可以解密出密文消息C,也就是说,这里只能实现认证能力,而无法实现保密能力。如果要同时实现保密和认证功能,需要对消息进行两次加密。

应满足的条件

公钥密码应满足的5个基本条件是由Diffie和Hellman给出的,这里,假设消息的发送方为A,消息的接收方为B:

z 产生密钥对(公钥PU,私钥PR)在计算上是容易的;

z

已知B的公钥PUb和要发送给B的消息M,A产生相应的密文在计算上是容易的:

C=E(PUb,M)

z

接收方B用自己的私钥PRb解密所接收的密文以恢复明文消息在计算上是容易实现的:

M=D(PRb,C)=D[PRb,E(PUb,M)]

z 假设攻击者已知公钥PUb,要确定出对应的私钥PRb在计算上是不可行的; z

假设攻击者已知公钥PUb和密文C,要恢复明文M在计算上是不可行的;

以上5个条件就是公钥密码的基本要求。通常,现代公钥密码还满足以下条件: z

既可以用公钥作为加密密钥,也可以用私钥作为加密密钥。如果用公钥作为加密密钥,那么私钥就是解密密钥;如果用私钥作为加密密钥,那么公钥就是解密密钥。

比如,著名的RSA密码就满足上述附加条件。但是,这一条件并不是必须的。

RSA的基本数学原理

公钥密码体制的代表当数RSA密码算法。RSA算法从提出至今已有将近三十年历史,是使用最广泛的通用公钥加密方法。

RSA是一种分组密码,其明文和密文的基本单元都是0到n-1之间的整数,一般而言,n<21024。因此,每一个分组的大小必须小于或等于log2n,由于n通常小于21024,因此实际中使用的RSA算法的分组大小都小于等于1024比特位。

假设明文分组为M,密文分组为C,则RSA加密过程如下:

C=Me mod n

解密过程为:

M=Cd mod n=(Me)d mod n=Med mod n

通信的双方均已知n,发送方已知e,只有接收方知道d。由此,公钥加密算法的公钥为PU={e,n},私钥为PR={d,n}。根据前面所述的公钥密码应满足的条件可知,RSA算法必须能够满足下列条件:

1.可以找到e,d和n,使得对所有M

2.对于所有M

3.由e和n确定d在计算上是不可能的。

加解密的过程如图3所示。

0-1背包问题

【问题描述】:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包容

量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包问题。

一、贪心算法

贪心算法是我们在《算法设计技巧与分析》这门课中所学习到的几种重要的算法之一,顾名思义,贪心算法总是作出在当前看来最好的选择。也就是该算法并不从整体最优考虑,它所作出的选择只是在某种意义上的从局部的最优选择,寻找到解决问题的次优解的方法。虽然我们希望贪心算法得到的最终结果也是整体最优的,但是在某些情况下,该算法得到的只是问题的最优解的近似。

1、贪心法的基本思路:

从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。

2、该算法存在问题:

1. 不能保证求得的最后解是最佳的;

2. 不能用来求最大或最小解问题;

3. 只能求满足某些约束条件的可行解的范围。

2、实现该算法的过程:

Begin 从问题的某一初始解出发;

while 能朝给定总目标前进一步do

求出可行解的一个解元素;

由所有解元素组合成问题的一个可行解

3、关于贪心算法在背包问题中的应用的探讨

(1) 问题描述

0-1背包问题:给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物

品时,对每种物品i只有2种选择,即装入背包(1)或不装入背包(0)。不能将物品i装入背包多次,也不能只装入部分的物品i。

背包问题:与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1≤i≤n。

背包问题可以定义如下:给出n个大小为s1,s2,…,sn,值为v1,v2,…,vn的项目,并设背包容量为C,要找到非负实数x1,x2,…,xn, 使和在约束下最大。

(2) 动态规划解决方案:是解决0/1背包问题的最优解

(i) 若i=0或j=0, V[i,j] = 0

(ii) 若j

(iii) 若i>0和j>=si, Max{V[i-1,j],V[i-1,j-si]+vi} (第一种情况是包中的i-1项已经达到最大值,第二种情况是i-1项占j-si的体积再加上第i项的总的价值,取这两种情况的最大值。)

//sj和vj分别为第j项物品的体积和价值,C是总体积限制。

//V[i,j]表示从前i项{u1,u2,…,un}中取出来的装入体积为j的背包的物品的最大//价值。[13] (3)贪心算法解决背包问题有几种策略:

(i) 一种贪婪准则为:从剩余的物品中,选出可以装入背包的价值最大的物品,利用这种规则,价值最大的物品首先被装入(假设有足够容量),然后是下一个价值最大的物品,如此继续下去。这种策略不能保证得到最优解。例如,考虑n=2, w=[100,10,10], p =[20,15,15], c = 105。当利用价值贪婪准则时,获得的解为x= [ 1 , 0 , 0 ],这种方案的总价值为2 0。而最优解为[ 0 , 1 , 1 ],其总价值为3 0。

(ii) 另一种方案是重量贪婪准则是:从剩下的物品中选择可装入背包的重量最小的物品。虽然这种规则对于前面的例子能产生最优解,但在一般情况下则不一定能得到最优解。考虑n= 2 ,w=[10,20], p=[5,100], c= 2 5。当利用重量贪婪策略时,获得的解为x =[1,0], 比最优解[ 0 , 1 ]要差。

(iii) 还有一种贪婪准则,就是我们教材上提到的,认为,每一项计算yi=vi/si,即该项值和大小的比,再按比值的降序来排序,从第一项开始装背包,然后是第二项,依次类推,尽可能的多放,直到装满背包。

有的参考资料也称为价值密度pi/wi贪婪算法。这种策略也不能保证得到最优解。利用此策略试解n= 3 ,w=[20,15,15], p=[40,25,25], c=30 时的最优解。虽然按pi /wi 非递(增)减的次序装入物品不能保证得到最优解,但它是一个直觉上近似的解。

而且这是解决普通背包问题的最优解,因为在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1≤i≤n。

(4)贪心算法解决背包问题的算法实现:

代码如下:

#include struct goodinfo

{

float p; //物品效益

float w; //物品重量

float X; //物品该放的数量int flag; //物品编号

};//物品信息结构体

void Insertionsort(goodinfo goods[],int n)

{//插入排序,按pi/wi价值收益进行排序,一般教材上按冒泡排序

int j,i;

for(j=2;j<=n;j++)

{

goods[0]=goods[j];

i=j-1;

while (goods[0].p>goods[i].p)

{

goods[i+1]=goods[i];

i--;

}

goods[i+1]=goods[0];

}

}//按物品效益,重量比值做升序排列

void bag(goodinfo goods[],float M,int n)

{

float cu;

int i,j;

for(i=1;i<=n;i++)

goods[i].X=0;

cu=M; //背包剩余容量

for(i=1;i

{

if(goods[i].w>cu)//当该物品重量大与剩余容量跳出break;

goods[i].X=1;

cu=cu-goods[i].w;//确定背包新的剩余容量

}

if(i<=n)

goods[i].X=cu/goods[i].w;//该物品所要放的量

/*按物品编号做降序排列*/

for(j=2;j<=n;j++)

{

goods[0]=goods[j];

i=j-1;

while (goods[0].flag

{

goods[i+1]=goods[i];

i--;

}

goods[i+1]=goods[0];

}

cout<<"最优解为:"<

for(i=1;i<=n;i++)

{

cout<<"第"<

cout<

}

}

void main()

{

cout<<"|--------运用贪心法解背包问题---------|"<

int j,n; float M;

goodinfo *goods;//定义一个指针

while(j)

{

cout<<"请输入物品的总数量:";

cin>>n;

goods=new struct goodinfo [n+1];//

cout<<"请输入背包的最大容量:";

cin>>M;

cout<

int i;

for(i=1;i<=n;i++)

{ goods[i].flag=i;

cout<<"请输入第"<

cin>>goods[i].w;

cout<<"请输入第"<

cin>>goods[i].p;

goods[i].p=goods[i].p/goods[i].w;//得出物品的效益,重量比

cout<

}

Insertionsort(goods,n);

bag(goods,M,n);

cout<<"press <1> to run agian"<

cout<<"press <0> to exit"<>j;

}

}

[例] 即教材例7.6,假如有容量为9(C=9)的背包,要装入4(n=4)种体积为2,3,4和5的物品,它们的价值分别是3,4,5和7。对这个问题课本是用动态规划的方式给予实现通过列表格可知,有两种方案可以达到最优解,装物品价值为5和7或者是装入物品价值为3,4和5。这样我们获得的价值是12。

现在我们来讨论用上述贪心算法把这个问题看成普通背包问题进行讨论,以这个实例运行程序可以有这样的结果:(WindowsXP系统,Microsoft Visual C++ 2005

这样得到的结果是价值为3体积是2的放1,价值是3体积是4的放0.666667,价值是5体积是7的放1,最后得到的结果是占的体积是9.000001,(期望值是C=9),而总的价值是12.66668,(动态规划我们得出的结论是12),所以我们可以看到用贪心算法解决普通背包问题时得到的解是最优解。

二、分支限界法

1、设计思想与分析:

对物品的选取与否构成一棵解树,左子树表示不装入,右表示装入,通过检索问题的解树得出最优解,并用结点上界杀死不符合要求的结点。

对此我们有以下几点结论:

A)分支限界法迭代次数与物品单位重量价值数组的取值范围关系紧密。

首先,按照搜索算法的理论知识,我们知道0-1背包问题是一个子集树问题,在最坏的情形下,我们在给定迭代次数不超过一个限制值(m)的话(在我们的算法中,迭代次数与算法过程中创建的部分子集树的结点数相同),我们所能解决的问题规模为[log(n+1)]-1,事实上,我们在实验中给定m=100000,物品个数为n=30,在特别情形下(即下面所要说的物品的单位重量价值非常均匀的情形下)迭代溢出的可能很大。

其次,我们的实验结论是物品的单位重量价值越均匀(即分布在一个较小的区间范围内),分支限界法所需的迭代次数越大。而此时的贪心算法所得到的解的相对误差也越小,所以如果不是在严格要求求精确解或给定很小的精度范围内的解的话,不妨使用贪心算法先找一个近似解试试。

B)分支限界法迭代次数跟物品重量与背包容量的比关系紧密。因为物品重量与背包容量的比越小,则背包能装的物品个数就越多,所生成的子集树的深度也就越大,因而在一般情况下(例如在剪枝率差不多的情况下)所需的迭代次数也就越大。

C)分支限界法迭代次数与背包容量占物品总重的百分比关系关系也很紧密,但同时还与其他参数有关,如上面提到的物品重量与背包容量的比等,它们之间的关系十分复杂。我们只能笼统的说,分支限界法迭代次数随着背包容量占物品总重的百分比的增加总体上先升后降。需要指出的,这只是最笼统的估计,事实上情形要复杂的多。

D) 分支限界法解决问题的最大实际输入大小的小结。

在给定迭代次数不超过一个限制值(m)时,最坏的情形下(物品的单位重量价值非常均匀时)只能解决[log(m+1)]-1个实际输入大小的问题。但在物品的单位重量价值的均匀性较为宽松时,我们的程序也能解决较大规模的问题,我们在实验中取m为100000时,一般都能以较大可能在这种宽松条件下解决好几百甚至上千的实际输入大小的问题。但在物品的单位重量价值很均匀时,往往连30个物品都难以解决。一般情形下,我们的程序能解决的问题规模大致为50左右,超过100时堆溢出的可能较大。

2、算法实现

#include

struct good

{

int weight;

int benefit;

int flag;//是否可以装入标记

};

int number=0;//物品数量

int upbound=0;

int curp=0, curw=0;//当前效益值与重量

int maxweight=0;

good *bag=NULL;

void Init_good()

{

bag=new good [number];

for(int i=0; i

{

cout<<"请输入第件"<

cin>>bag[i].weight;

cout<<"请输入第件"<

cin>>bag[i].benefit;

bag[i].flag=0;//初始标志为不装入背包

cout<

}

}

int getbound(int num, int *bound_u)//返回本结点的c限界和u限界

{

for(int w=curw, p=curp; num

w=w+bag[num].weight;

p=w+bag[num].benefit;

}

*bound_u=p+bag[num].benefit;

return ( p+bag[num].benefit*((maxweight-w)/bag[num].weight) );

}

void LCbag()

{

int bound_u=0, bound_c=0;//当前结点的c限界和u限界

for(int i=0; i

{

if( ( bound_c=getbound(i+1, &bound_u) )>upbound )//遍历左子树

upbound=bound_u;//更改已有u限界,不更改标志

if( getbound(i, &bound_u)>bound_c )//遍历右子树

//若装入,判断右子树的c限界是否大于左子树根的c限界,是则装入

{

upbound=bound_u;//更改已有u限界

curp=curp+bag[i].benefit;

curw=curw+bag[i].weight;//从已有重量和效益加上新物品

bag[i].flag=1;//标记为装入

}

}

}

void Display()

{

cout<<"可以放入背包的物品的编号为:";

for(int i=0; i

if(bag[i].flag>0)

cout<

cout<

delete []bag;

} 非

三、回溯法

回溯法(Backtracking Algorithm)有“通用的解题法”之称。用它可以系统地搜索一个问题的所有解或任一解。回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先策略搜索。回溯法求问题的所有解时,要回溯到根,且根结点的所有子树都已经被搜索遍才结束。回溯法求问题的一个解时,只要搜索到问题的一个解就可以结束。这种以深度优先方式系统搜索问题解的算法称为回溯法,它适用于解组合数较大的问题。

用回溯法解问题时,应明确定义问题的解空间,问题的解空间应至少包含问题的一个(最优)解。定义了问题的解空间后,还应将解空间很好地组织起来,使得能用回溯法方便地搜索整个解空间。通常将解空间组织成树或图的形式。

确定了解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜索整个解空间。这个开始结点成为活结点,同时也成为当前的扩展结点。在当前的扩展节点处,搜索向纵深方向移至一个新结点。这个新结点就成为新的活结点,并成为当前扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。回溯法以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已无活结点时为止。

1、算法分析:

0-1背包问题是子集选取问题。一般情况下,0-1背包问题是NP难的。0-1背包问题的解空间可用子集树表示。在搜索解空间树时,只要其左儿子结点是一个可行结点,搜索就进入左子树。当右子树中有可能包含最优解时才进入右子树搜索。否则将右子树剪去。设r是当前剩余物品价值总和;cp是当前价值;bestp是当前最优价值。当cp+r<=bestp时,可剪去右子树。计算右子树中解的上界的更好方法是将剩余物品依其单位重量价值排序,然后依次装入物品,直至装不下时,再装入该物品的一部分而装满背包。由此得到的价值是右子树中解的上界。为了便于计算上界,可先将物品依其单位重量价值从大到小排列,此后只要按顺序考察各物品即可。

2、算法实现:Knapsack算法的C++实现如下:

(其中背包信息从文件中读取,点击进入该文件下载界面)

view source

print

#include "iostream"

using namespace std;

class Knap

{

friend int Knapsack(int p[], int w[], int c, int n); private:

int Bound(int i);

void Backtrack(int i);

int c; //背包容量

int n; //物品数

int *w; //物品重量数组

int *p; //物品价值数组

int cw; //当前重量

int cp; //当前价值

int bestp; //当前最优价值

};

void Knap::Backtrack(int i)

{

if(i > n - 1) //到达叶子节点

{

bestp = cp;

return;

} if(cw + w[i] <= c) //进入左子树

{

cw += w[i];

cp += p[i];

Backtrack(i + 1);

cw -= w[i];

cp -= p[i];

}

if(Bound(i + 1) > bestp) //进入右子树

{

Backtrack(i + 1);

}

}

int Knap::Bound(int i)

{ //计算节点所相应价值的上界

int cleft = c - cw; //剩余容量

int b = cp; //以物品单位重量价值递减顺序装入物品while(i < n && w[i] <= cleft)

{

cleft -= w[i];

b += p[i];

i++;

}

{

b += p[i] * cleft / w[i];

}

return b;

}

class Object

{

friend int Knapsack(int p[], int w[], int c, int n); public:

int operator <= (Object a) const

{

return (d >= a.d);

} private:

int ID;

float d; //单位重量价值

};

int Knapsack(int p[], int w[], int c, int n)

{

//为Knap::Backtrack初始化

int W = 0;

int P = 0;

int i, j, max;

Object *Q = new Object[n];

Object qtmp;

for(i = 0;i < n;i++)

{

Q[i].ID = i;

Q[i].d = 1.0 * p[i] / w[i];

W += w[i];

P += p[i];

}

if(W <= c)

{

return P; //装入所有物品

}

//依物品单位重量价值排序

for(i = 0;i < n;i++)

{

max = i;

for(j = i + 1;j < n;j++)

{

if(Q[max].d < Q[j].d)

{

}

}

qtmp = Q[i];

Q[i] = Q[max];

Q[max] = qtmp;

}

Knap K;

K.p = new int[n];

K.w = new int[n];

for(i = 0;i < n;i++)

{

K.p[i] = p[Q[i].ID];

K.w[i] = w[Q[i].ID];

}

K.cp = 0;

K.cw = 0;

K.c = c;

K.n = n;

K.bestp = 0;

//回溯搜索

K.Backtrack(0);

delete[] Q;

delete[] K.w;

delete[] K.p;

return K.bestp;

}

#define n 50 //物品的数量

//物体重量、收益、背包容量

int weight[n], profit[n], contain;

//从文件中读取背包信息

int read_infor() {

FILE *fp;

int i;

if ((fp=fopen("knapsack.txt","r"))==NULL)

{

printf("The file is not found!");

return 0;

}//读取物体收益信息

for(i = 0;i < n;i++)

{

fscanf(fp, "%d", &profit[i]);

}

//读取物体重量信息,计算物体的单位重量价值

for(i = 0;i < n;i++)

{

fscanf(fp, "%d", &weight[i]);

}

//读取背包容量

fscanf(fp, "%d", &contain);

fclose(fp);

return 1;

}

void main()

{

int result;

if(read_infor())

{

result = Knapsack(profit, weight, contain, n);

printf("The maximum profit is: %d.", result);

}

scanf("%d", &result);

}

3、算法复杂度分析:计算上界需要O(n)时间,在最坏情况下有O(pow(2,n))个右儿子结点需要计算上界,故解0-1背包问题的回溯算法所需的计算时间为O(n*pow(2,n))。

参考文献和注释:

《算法设计技巧与分析》吴伟昶等译

《算法导论(第二版)》高等教育出版社

《计算机算法设计与分析》(第3版)王晓东编著

《0-1背包问题的贪心算法》.黄与林.鄂州大学学报

《算法设计技巧与分析研究》北京:电子工业出版

《背包问题的实用求解算法研究》。史今驰

《计算机算法设计与分析》。苏德富,钟诚北京:电子工业出版社

《算法设计与分析》.朱红。上海:上海科学技术文献出版社

公钥密码体制

数学文化课程报告论文题目:公钥密码体制的现状与发展 公钥密码体制的现状与发展 摘要:文中对公钥密码体制的现状与发展进行了介绍,其中着重讨论了几个比较重要的公钥密码体制M-H背包算法、RSA、ECC、量子密码、NTRU密码体制和基于辫群上的密码体制。 关键词:公钥密码体制;离散对数问题;格基归约;量子密码

1949年,Claude Shannon在《Bell System Technical Journal》上发表了题为“Communication Theory of Secrecy Systems”的论文,它是现代密码学的理论基础,这篇论文将密码学研究纳入了科学轨道,但由于受到一些因素的影响,该篇论文当时并没有引起人们的广泛重视。直到20世纪70年代,随着人类社会步入信息时代才引起人们的普遍重视,那个时期出现了现代密码的两个标志性成果。一个是美国国家标准局公开征集,并于1977年正式公布实施的美国数据加密标准;另一个是由Whitfield Diffie和Martin Hellman,在这篇文章中首次提出了公钥密码体制,冲破了长期以来一直沿用的私钥体制。自从公钥密码体制被提出以来,相继出现了许多公钥密码方案,如RSA、Elgamal密码体制、背包算法、ECC、XTR和NTRU等。 公钥密码体制的发现是密码学发展史上的一次革命。从古老的手工密码,到机电式密码,直至运用计算机的现代对称密码,这些编码系统虽然越来越复杂,但都建立在基本的替代和置换工具的基础上,而公钥密码体制的编码系统是基于数学中的单向陷门函数。更重要的是,公钥密码体制采用了两个不同的密钥,这对在公开的网络上进行保密通信、密钥分配、数字签名和认证有着深远的影响。文章共分为5部分:第1部分首先介绍了Merkle-Hellmen背包算法,第2,3,4,5,5部分分别讨论了RSA、ECC、量子密码、NTUR,同时对公钥密码体制进行了展望。 1、Merkle-Hellmen背包算法 1978年,Ralph Merkle和Martin Hellmen提出的背包算法是公钥密码体制用于加密的第一个算法,它起初只能用于加密,但后来经过Adi Shamtr的改进使之也能用于数字签名。其安全性基于背包难题,它是个NP完全问题,这意味

背包密码体制

背包密码体制 作者: 指导老师: 摘要背包公钥加密是第一个具体实现了的公钥加密的方案.本文主要分析背包公钥加密算法的 数学理论基础,描述背包公钥加密算法的体制,讨论背包公钥加密算法的加密算法与解密算法的过 程和原理。采用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提出第一个背包型公钥密码以来,许多陷门背包被提了出来.背包型公钥密码的设计极大地丰富了公钥密码,在陷门背包的发展过程中,人们使用了各种各样

公钥密码体制的介绍

目录 第一章绪论 (1) 1.1 研究背景与意义 (1) 第二章预备知识 (7) 2.1 复杂性理论 (7) 2.2 可证明安全理论 (8) 2.2.1 困难问题假设 (8) 2.2.2 形式化证明方法 (10) 2.3 公钥密码体制 (11) 2.3.1 PKE形式化定义 (11) 2.3.2 PKE的安全模型 (12) 2.5 密钥泄露 (12) 2.5.1 问题描述 (12) 2.5.2 解决方法 (13) 2.6 本章小结 (14) 致谢 (16)

第一章绪论 第一章绪论 本章主要阐述了公钥密码体制的研究背景和积极意义,并简单介绍了代理重加密体制的研究现状以及该密码体制在云存储数据共享领域的独特优势。最后,本章介绍了本文的主要研究工作和论文结构。 1.1 研究背景与意义 密码学是伴随着信息保密而产生的,但是随着密码学技术本身的不断发展和通信网络技术的不断发展,现代的密码学研究已经远远超越了信息保密的范围,被广泛应用于各种安全和隐私保护应用之中。它是一门古老的学科,又是一门新兴的交叉学科,在今后人类社会的发展历程中必将发挥越来越重要的作用。密码学的发展可分为3个阶段: 第一阶段:从古代一直到1949年,密码学都是停留在应用于军事政治等神秘领域的实践技术。从1949年香农(Shannon)发表了《保密系统的信息理论》错误!未找到引用源。后,密码学才由理论基础指导而上升为学科。这一阶段,密码学研究的突破并不大,而且应用方面仍然只局限于特殊领域。 第二阶段:以1976年迪菲(Diffie)与赫尔曼(Hellman)发表的论文《密码学的新方向》错误!未找到引用源。以及1977年美国发布的数据加密标准(DES)加密算法为标志,密码学进入了现代密码学。 第三阶段:伴随着相关理论的完善,以及由集成电路和因特网推动的信息化工业浪潮,密码学进入了一个全新爆发的时代:研究文献和成果层出不穷,研究的方向也不断拓展,并成为了一个数学、计算机科学、通信工程学等各学科密切相关的交叉学科,同时各种密码产品也走进了寻常百姓家,从原来局限的特殊领域进入了人民群众的生产、生活之中。 在信息社会,加密体制为保证信息的机密性提供了重要的技术手段。根据密钥的特点,可将加密体制分为对称密钥体制和非对称密钥体制两种。在对称加密体制中,通信双方为了建立一个安全的信道进行通信,需要选择相同的密钥,并将密钥秘密保存。根据对明文的加密方式不同,对称密码算法又分为分组加密算法和流密码算法。分组加密算法将明文分为固定长度的分组进行加密,而流密码算法则将明文按字符逐位加密,二者之间也不是有着不可逾越的鸿沟,很多时候,分组加密算法也可以用于构建流密码算法。目前,世界上存在的分组密码算法可能有成千上万种,而其中最有名的就是美国的DES、AES以及欧洲的IDEA算法。

公钥密码体制原理及展望---读《New Directions in Cryptography》

公钥密码体制原理及展望 ----读《New Directions in Cryptography》 姓名 学号 指导教师 时间2010年11月19日星期五

公钥密码体制原理及展望 ----读《New Directions in Cryptography》 摘要:本文通过读《New Direction in Cryptography》一文,简述了密码学的发展,重点讨论了公钥密码体制的算法及安全性。并在此基础上介绍了ECC和量子密码,了解了非对称密码体制的应用,展望了密码学未来的发展方向。 关键字:公钥密码体制,单向陷门函数、ECC、量子密码 一概述 密码学是研究如何隐密地传递信息的学科。在现代特別指对信息以及其传输的数学性研究,常被认為是数学和计算机科学的分支,和信息论也密切相关。回顾密码学的发展历程: 第一个阶段是古典密码学(19世纪以前),主要包括代替密码、换位密码以及代替密码与换位密码的组合方式等。 第二阶段是中世纪密码学,它是宗教上被刺激的原文分析对Quran那些导致了发明频率分析打破的技术替换密码。它是最根本的cryptanalytic前进直到WWII。所有暗号根本上依然是脆弱直到这个cryptanalytic技术发明polyalphabetic暗号。 第三阶段是从1800到第二次世界大战,由第二次世界大战机械和机电暗号机器在宽用途,虽然这样机器是不切实际的地方继续的人工制在使用中。巨大前进被做了暗号打破所有在秘密。 第四阶段是现代密码学,C.E.Shannon于1949年发表的划时代论文“The Communication Theory of Secret Systems”,这是现代密码学的第一次发展也是开端。而更重要的一次发展是1976年,当时在美国斯坦福大学的迪菲(Diffie)和赫尔曼(Hellman)两人提出了公开密钥密码的新思想,论文《New Direction in Cryptography》把密钥分为加密的公钥和解密的私钥,这是现代密码学的经典之作,是密码学的一场革命。 《New Direction in Cryptography》一文为解决传统密码体制(主要针对对称密码体制)密钥分发困难、密钥集中了密文的安全性等缺陷,设计了公钥密码体制,是非对称密码学的开山之作。下面简要地介绍一下这篇文章的主要内容。 二公钥密码体制基本原理 公钥密码算法中的密钥依性质划分,可分为公钥和私钥两种。用户或系统产生一对密钥,将其中的一个公开,称为公钥;另一个自己保留,称为私钥。任何获悉用户公钥的人都可用用户的公钥对信息进行加密与用户实现安全信息交互。由于公钥与私钥之间存在的依存关系,只有用户本身才能解密该信息,任何未受授权用户甚至信息的发送者都无法将此信息解密。所以在公钥密码系统中,首先要求加密函数具有单向性,即求逆的困难性。即: 一个可逆函数f:A→B,若它满足: 1o对所有x∈A,易于计算f(x)。 2o对“几乎所有x∈A”由f(x)求x“极为困难”,以至于实际上不可能做到,则称f为一单向(One-way)函数。 但是,要做加密处理,对加密函数仅有单向的要求还不够,必须还要满足,

ElGamal公钥密码体制

ElGamal公钥密码体制 1、问题描述 设计ElGamal公钥密码体制算法。 2、算法设计 (1)选取大素数p和p的一个原根a,(a,p)=1,1

r[j+1]=r[j-1]-q[j]*r[j]; if(j>=2) { s[j]=s[j-2]-q[j-1]*s[j-1]; t[j]=t[j-2]-q[j-1]*t[j-1]; } } return s[j-1]; } int gcd(int a,int b) { int c; if(a>p>>g>>k; s=2; for(i=1;i<=k;i++) { t*=s; t=t%p; } while(t<0) { t=t+p-1; } cout<<"public key is"<<"("<>r;

公钥密码体制的研究

公钥密码体制的研究

目录 第一章绪论 (1) 1.1 研究背景与意义 (1) 第二章预备知识 (7) 2.1 复杂性理论 (7) 2.2 可证明安全理论 (8) 2.2.1 困难问题假设 (8) 2.2.2 形式化证明方法 (10) 2.3 公钥密码体制 (11) 2.3.1 PKE形式化定义 (11) 2.3.2 PKE的安全模型 (12) 2.5 密钥泄露 (12) 2.5.1 问题描述 (12) 2.5.2 解决方法 (13) 2.6 本章小结 (14) 致谢 (17)

第一章绪论 本章主要阐述了公钥密码体制的研究背景和积极意义,并简单介绍了代理重加密体制的研究现状以及该密码体制在云存储数据共享领域的独特优势。最后,本章介绍了本文的主要研究工作和论文结构。 1.1 研究背景与意义 密码学是伴随着信息保密而产生的,但是随着密码学技术本身的不断发展和通信网络技术的不断发展,现代的密码学研究已经远远超越了信息保密的范围,被广泛应用于各种安全和隐私保护应用之中。它是一门古老的学科,又是一门新兴的交叉学科,在今后人类社会的发展历程中必将发挥越来越重要的作用。密码学的发展可分为3个阶段: 第一阶段:从古代一直到1949年,密码学都是停留在应用于军事政治等神秘领域的实践技术。从1949年香农(Shannon)发表了《保密系统的信息理论》错误!未找到引用源。后,密码学才由理论基础指导而上升为学科。这一阶段,密码学研究的突破并不大,而且应用方面仍然只局限于特殊领域。 第二阶段:以1976年迪菲(Diffie)与赫尔曼(Hellman)发表的论文《密码学的新方向》错误!未找到引用源。以及1977年美国发布的数据加密标准(DES)加密算法为标志,密码学进入了现代密码学。 第三阶段:伴随着相关理论的完善,以及由集成电路和因特网推动的信息化工业浪潮,密码学进入了一个全新爆发的时代:研究文献和成果层出不穷,研究的方向也不断拓展,并成为了一个数学、计算机科学、通信工程学等各学科密切相关的交叉学科,同时各种密码产品也走进了寻常百姓家,从原来局限的特殊领域进入了人民群众的生产、生活之中。 在信息社会,加密体制为保证信息的机密性提供了重要的技术手段。根据密钥的特点,可将加密体制分为对称密钥体制和非对称密钥体制两种。在对称加密体制中,通信双方为了建立一个安全的信道进行通信,需要选择相同的密钥,并将密钥秘密保存。根据对明文的加密方式不同,对称密码算法又分为分组加密算法和流密码算法。分组加密算法将明文分为固定长度的分组进行加密,而流密码算法则将明文按字符逐位加密,二者之间也不是有着不可逾越的鸿沟,很多时候,分组加密算法也可以用于构建流密码算法。目前,世界上存在的分组密码算法可能有成千上万种,而其中最有名的就是美国的DES、AES以及欧洲的IDEA算法。

公钥密码体制综述及展望

关键词公钥密码体制-数字签名身份认证 引言 公开密钥密码体制地概念是年由美国密码学专家狄匪()和赫尔曼()提出地,有两个重要地原则:第一,要求在加密算法和公钥都公开地前提下,其加密地密文必须是安全地;第二,要求所有加密地人和把握私人秘密密钥地解密人,他们地计算或处理都应比较简单,但对其他不把握秘密密钥地人,破译应是极困难地.随着计算机网络地发展,信息保密性要求地日益提高,公钥密码算法体现出了对称密钥加密算法不可替代地优越性.近年来,公钥密码加密体制和、数字签名、电子商务等技术相结合,保证网上数据传输地机密性、完整性、有效性、不可否认性,在网络安全及信息安全方面发挥了巨大地作用.本文具体介绍了公钥密码体制常用地算法及其所支持地服务.文档来自于网络搜索 公钥密码算法 公钥密码算法中地密钥依性质划分,可分为公钥和私钥两种.用户或系统产生一对密钥,将其中地一个公开,称为公钥;另一个自己保留,称为私钥.任何获悉用户公钥地人都可用用户地公钥对信息进行加密与用户实现安全信息交互.由于公钥与私钥之间存在地依存关系,只有用户本身才能解密该信息,任何未受授权用户甚至信息地发送者都无法将此信息解密.在近代公钥密码系统地研究中,其安全性都是基于难解地可计算问题地.如:文档来自于网络搜索 ()大数分解问题;()计算有限域地离散对数问题;()平方剩余问题;()椭圆曲线地对数问题等. 基于这些问题,于是就有了各种公钥密码体制.关于公钥密码有众多地研究,主要集中在以下地几个方面: ()公钥体制地研究;()椭圆曲线密码体制地研究;()各种公钥密码体制地研究;()数字签名研究.文档来自于网络搜索 公钥加密体制具有以下优点: ()密钥分配简单;()密钥地保存量少;()可以满足互不相识地人之间进行私人谈话时地保密性要求;()可以完成数字签名和数字鉴别.文档来自于网络搜索 .算法 算法是,和在年提出地,是一种公认十分安全地公钥密码算法.算法是目前网络上进行保密通信和数字签名地最有效安全算法.算法地安全性基于数论中大素数分解地困难性.所以,需采用足够大地整数.因子分解越困难,密码就越难以破译,加密强度就越高.其公开密钥和私人密钥是一对大素数地函数.从一个公开密钥和密文中恢复出明文地难度等价于分解两个大素数之积.因式分解理论地研究现状表明:所使用地密钥至少需要比特,才能保证有足够地中长期安全.文档来自于网络搜索 为了产生两个密钥,选取两个大素数和.为了获得最大程度地安全性,两数地长度一样.计算乘积:=,然后随机选取加密密钥,使和互素.最后用欧几里得扩展算法计算解密密钥,以满足:=则=-注重:和也互素.和是公开密钥,是私人密钥.两个素数和不再需要,可以舍弃,但绝不能泄漏.文档来自于网络搜索 加密消息时,首先将它分成比份小地数据分组.加密后地密文,将由相同长度地分组组成.加密公式可表示为:=×()解密消息时,取每一个加密后地分组并计算:=×().文档来自于网络搜索 由于:=()==(-)(-)=×(-)(-)=×=()这个公式能恢复出全部明文.公开密钥:两个素数和地乘积;:与互素.私人密钥:与互素.加密=×();解密=×().文档来自于网络搜索 .算法

公钥密码体制的研究

目录 第一章绪论 1.1 研究背景与意义 第二章预备知识 2.1 复杂性理论 2.2 可证明安全理论 2.2.1 困难问题假设 2.2.2 形式化证明方法 2.3 公钥密码体制 2.3.1 PKE形式化定义 2.3.2 PKE的安全模型 2.5 密钥泄露 2.5.1 问题描述 2.5.2 解决方法 2.6 本章小结 致谢

第一章绪论 本章主要阐述了公钥密码体制的研究背景和积极意义,并简单介绍了代理重加密体制的研究现状以及该密码体制在云存储数据共享领域的独特优势。最后,本章介绍了本文的主要研究工作和论文结构。 1.1 研究背景与意义 密码学是伴随着信息保密而产生的,但是随着密码学技术本身的不断发展和通信网络技术的不断发展,现代的密码学研究已经远远超越了信息保密的范围,被广泛应用于各种安全和隐私保护应用之中。它是一门古老的学科,又是一门新兴的交叉学科,在今后人类社会的发展历程中必将发挥越来越重要的作用。密码学的发展可分为3个阶段:第一阶段:从古代一直到1949年,密码学都是停留在应用于军事政治等神秘领域的实践技术。从1949年香农(Shannon)发表了《保密系统的信息理论》[1]后,密码学才由理论基础指导而上升为学科。这一阶段,密码学研究的突破并不大,而且应用方面仍然只局限于特殊领域。 第二阶段:以1976年迪菲(Diffie)与赫尔曼(Hellman)发表的论文《密码学的新方向》[2]以及1977年美国发布的数据加密标准(DES)加密算法为标志,密码学进入了现代密码学。 第三阶段:伴随着相关理论的完善,以及由集成电路和因特网推动的信息化工业浪潮,密码学进入了一个全新爆发的时代:研究文献和成果层出不穷,研究的方向也不断拓展,并成为了一个数学、计算机科学、通信工程学等各学科密切相关的交叉学科,同时各种密码产品也走进了寻常百姓家,从原来局限的特殊领域进入了人民群众的生产、生活之中。 在信息社会,加密体制为保证信息的机密性提供了重要的技术手段。根据密钥的特点,可将加密体制分为对称密钥体制和非对称密钥体制两种。在对称加密体制中,通信双方为了建立一个安全的信道进行通信,需要选择相同的密钥,并将密钥秘密保存。根据对明文的加密方式不同,对称密码算法又分为分组加密算法和流密码算法。分组加密算法将明文分为固定长度的分组进行加密,而流密码算法则将明文按字符逐

公钥密码体制的核心思想是

公钥密码体制的核心思想是:加密和解密采用不同的密钥。这是公钥密码体制和传统的对称密码体制最大的区别。对于传统对称密码而言,密文的安全性完全依赖于密钥的保密性,一旦密钥泄漏,将毫无保密性可言。但是公钥密码体制彻底改变了这一状况。在公钥密码体制中,公钥是公开的,只有私钥是需要保密的。知道公钥和密码算法要推测出私钥在计算上是不可行的。这样,只要私钥是安全的,那么加密就是可信的。 显然,对称密码和公钥密码都需要保证密钥的安全,不同之处在于密钥的管理和分发上面。在对称密码中,必须要有一种可靠的手段将加密密钥(同时也是解密密钥)告诉给解密方;而在公钥密码体制中,这是不需要的。解密方只需要保证自己的私钥的保密性即可,对于公钥,无论是对加密方而言还是对密码分析者而言都是公开的,故无需考虑采用可靠的通道进行密码分发。这使得密钥管理和密钥分发的难度大大降低了。 加密和解密:发送方利用接收方的公钥对要发送的明文进行加密,接受方利用自己的 私钥进行解密,其中公钥和私钥匙相对的,任何一个作为公钥,则另一个 就为私钥.但是因为非对称加密技术的速度比较慢,所以,一般采用对称 加密技术加密明文,然后用非对称加密技术加密对称密钥,即数字信封技术. 签名和验证:发送方用特殊的hash算法,由明文中产生固定长度的摘要,然后利用 自己的私钥对形成的摘要进行加密,这个过程就叫签名。接受方利用 发送方的公钥解密被加密的摘要得到结果A,然后对明文也进行hash操 作产生摘要B.最后,把A和B作比较。此方式既可以保证发送方的身份不 可抵赖,又可以保证数据在传输过程中不会被篡改。 首先要分清它们的概念: 加密和认证

浅析几种公钥密码体制

浅析几种公钥密码体制 摘要:论述了RSA、Merkle-Hellman背包加密体制和椭圆曲线密码体制的基本原理,以及它们的优缺点,通过对比指出椭圆曲线密码体制的明显优点。 关键词:RSA;Merkle-Hellman背包加密体制;ECC;优缺点 1引言 公钥密码体制于1976年由W.DIffie和M.Hellman提出,同时R.Merkle在1978年也独立的提出这一体制[2]。该密码体制就是针对私钥密码体制的缺陷被提出来的。在公钥加密系统中,加密和解密是相对独立的,加密和解密会使用两把不同的密钥。加密密钥向公众公开,谁都可以使用。解密密钥只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥。故其可称为公钥密码体制。 自从公钥密码体制被提出以来,出现了许多公钥密码方案如RSA、ELGamal 密码体制、背包算法和ECC、XTR、NTRU等。 下面就介绍一下各种密码体制的优缺点,并进行比较。 2RSA 在Diffie和Hellman提出公钥系统观点以后,1977年麻省理工大学的Rivest、Shamir和Adleman提出了第一个比较完善的公钥密码算法,即RSA算法[2]。 RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已经二十多年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NP问题。 RSA的缺点主要有:(1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。(2)分组长度太大,为保证安全性,至少也要600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级,且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化[6]。 3Merkle-Hellman背包加密体制

浅谈背包公钥密码体制全解

背包密码体制之背包算法 姓名:张全英 学号:20143967 专业:信息与计算科学1班 学院:数学与信息科学 摘要:网络和信息安全正在成为一个国家政治、军事、经济以及社会生活正常运行的基础,它将是一个国家综合实力的重要体现。而密码学是信息安全的核心。公钥密码又是将加密、解密密钥甚至加密、解密函数分开,用户只保留解密密钥,而将加密密钥和加密函数一起公之于众,是密码学的重要组成部分。背包公钥和RSA一样是著名的公钥体制之一,特别是背包公钥的安全基础是背包问题,这是一个NP难问题。虽然在提出不久就遭到破解,但是在提出的背包公钥系统的改进方案中依然有几个被证明是安全的。背包公钥是首个把NP问题用于公钥密码的密码体制,而其他现阶段应用的公钥密码体制都是基于因式分解或离散对数问题的,他们都不是NP问题构造的,因此背包公钥体制的研究是十分有意义的。本文从背包体制的常用攻击方法入手,寻找被破解的原因,并针对这些原因提出了新的构造思路,利用非超递增序列构造背包体制。利用非超递增序列构造背包公钥有2个必须解决的问题是加密结果的不唯一性和解密的困难性。本文对一种同余多模背包序列进行分析,并利用得出的性质构造一种新的L序列,并证明了L序列能解决以上2个问题,并提出了利用L序列构造背包公钥体制的方案。为了加快加解密速度,还提出了模M和W-1的逆向构造算法。然后给出了非超递增背包公钥体制的模拟实现。 关键字:模逆,欧几里德算法,同余式,超递增序列 目录: 1.公钥密码的原理 2.公钥密码的数学基础: 一个公开密钥密码系统必须满足的条件是: A.通讯双方A和B容易通过计算产生出一对密钥(公开密钥K1,私钥密钥K2)。 B.在知道公开密钥K1和待加密报文M的情况下,对于发送方A,很容易通过计算产生对应的密文: C.C = Ek1(M) D.接收方B使用私有密钥容易通过计算解密所得的密文以便恢复原来的报文: E.M = Dk2(C)= Dk2[Ek1(M)] F.除A和B以外的其他人即使知道公钥k1,要确定私钥K2在计算上也是不可行的。 G.除A和B以外的其他人即使知道公钥k1和密文C,要想恢复原来的明文C在计算上也是不可行的。 3.数论基础知识: 这些要求最终可以归结到设计一个单向陷门函数。 4.单向函数:单项陷门函数: 一个单向函数是满足下列条件的函数:它将一个定义域映射到值域,使得每个函数值有一个唯一的原像,同时还要满足下列条件:函数值计算很容易,而逆计算是不可行的。 所谓单向陷门函数是这样的函数,即除非知道某种附加的信息,否则这样的函数在一个方向上容易计算,而在另外的方向上要计算是不可行的。有了附加的信息,函数的逆就可以在多项式时间内计算出来。 一个实用的公开密钥密码系统的建立和发展依赖于找到一个单向陷门函数。

公钥密码体制总结及展望

公钥密码体制总结及展望 摘要:计算机网络的发展突飞猛进,与此同时产生了公钥密码体制,本文重点介绍了当前公钥密码体制的几种常见的算法以及公钥密码体制的未来发展趋势。 关键词公钥密码体制 RSA DSA ECDSA SHA-1 数字签名身份认证 1 引言 公开密钥密码体制的概念是1976年由美国密码学专家狄匪(Diffie)和赫尔曼(Hellman)[1]提出的,有两个重要的原则:第一,要求在加密算法和公钥都公开的前提下,其加密的密文必须是安全的;第二,要求所有加密的人和掌握私人秘密密钥的解密人,他们的计算或处理都应比较简单,但对其他不掌握秘密密钥的人,破译应是极困难的。随着计算机网络的发展,信息保密性要求的日益提高,公钥密码算法体现出了对称密钥加密算法不可替代的优越性。近年来,公钥密码加密体制和PKI、数字签名、电子商务等技术相结合,保证网上数据传输的机密性、完整性、有效性、不可否认性,在网络安全及信息安全方面发挥了巨大的作用。本文详细介绍了公钥密码体制常用的算法及其所支持的服务。 2 公钥密码算法 公钥密码算法中的密钥依性质划分,可分为公钥和私钥

两种。用户或系统产生一对密钥,将其中的一个公开,称为公钥;另一个自己保留,称为私钥。任何获悉用户公钥的人都可用用户的公钥对信息进行加密与用户实现安全信息交互。由于公钥与私钥之间存在的依存关系,只有用户本身才能解密该信息,任何未受授权用户甚至信息的发送者都无法将此信息解密。在近代公钥密码系统的研究中, 其安全性都是基于难解的可计算问题的。如: (1)大数分解问题;(2)计算有限域的离散对数问题;(3)平方剩余问题;(4)椭圆曲线的对数问题等。 基于这些问题, 于是就有了各种公钥密码体制。关于公钥密码有众多的研究, 主要集中在以下的几个方面: (1)RSA 公钥体制的研究;(2)椭圆曲线密码体制的研究;(3)各种公钥密码体制的研究;(4)数字签名研究。 公钥加密体制具有以下优点: (1)密钥分配简单;(2)密钥的保存量少;(3)可以满足互不相识的人之间进行私人谈话时的保密性要求;(4)可以完成数字签名和数字鉴别。 2.1 RSA算法 RSA算法[2]是Ron Rivest, Adi Shamir和Len Adleman 在1978年提出的,是一种公认十分安全的公钥密码算法。RSA算法是目前网络上进行保密通信和数字签名的最有效安全算法。RSA算法的安全性基于数论中大素数分解的困难性。

多变量公钥密码体制的设计与安全性分析研究

多变量公钥密码体制的设计与安全性分析研究随着量子计算研究的进展,后量子公钥密码逐渐成为了密码学研究的热点之一。多变量公钥密码学是后量子公钥密码学的研究分支之一。由于多变量公钥密码体制尚未有适当的可证明安全方法,因此衡量多变量公钥密码体制的安全性依赖于抵抗现有的攻击方法。目前,多数二次多变量公钥密码算法遭受到了各种代数工具的分析,难以确保体制既高效又安全。本文的研究工作首先对现有的一些公钥密码体制进行了安全性分析,然后针对现有攻击方法,考虑将体制的次数提高到三次来抵抗现有的攻击,提出了一系列的三次多变量公钥密码体制。具体如下:(1)利用线性化方程结合差分攻击破解了一类l-可逆循环类的公钥加密体制。该体制和l-可逆循环公钥加密体制一样满足线性化方程,在找到所有的线性化方程后,给定合法密文,可将原体制退化为Square加密体制,从而可用差分攻击破解,找到合法密文相应的明文。利用二次化方程结合直接攻击方法破解了扩展的多变量公钥密码体制的两个实例。在找到所有的二次化方程后,给定合法密文,就可得到明文变量的二次多项式方程,从而降低了求解过程中的正则次数,使得直接攻击方法可以找到合法密文相应的明文。(2)提出了三次中间域方程公钥加密体制和数字签名体制。方案中设计使用三个二阶矩阵的乘积来构造中心映射中的三次多项式,而且采用二阶矩阵的行列式来作为锁多项式隐藏其中的三角形结构。当公钥多项式的次数从二次提高到三次,有效地避免线性化方程的出现,也能够抵抗直接攻击。和三次简单矩阵多变量公钥密码体制相比,在同等安全强度下,

本文提出的体制密钥规模较小。(3)提出了三次不平衡油醋签名体制。三次不平衡油醋体制中存在大量的油变量的二次项,可以抵抗油醋分 离攻击,而且醋变量个数可以少于油变量的个数。相比于二次不平衡 油醋签名体制,三次方案的签名长度要短得多,密钥生成的时间也更短。选择合适的参数之后,该方案同样可以抵抗秩攻击和直接攻击。(4)提出了两个三次多变量数字签名体制。第一个三次签名体制使用 的中心映射是立方映射,结合投影方法和减方法可使得构造的签名体 制能够抵抗差分攻击,同时合适的参数选择可使得体制能够抵抗现有 的其他攻击方法。第二个三次签名体制的中心映射类似于l-循环公 钥密码体制,不过l-循环体制的中心映射是二次的,而本文的方案中 心映射是三次的,合适选择参数后,可抵抗差分攻击、线性化方程攻击、直接攻击等现有攻击。本文中所提出的密码体制和攻击及安全性分析过程均在普通PC机上通过Magma来实现,验证了文中的理论分析结果。论文的工作为多变量公钥密码体制的设计与分析提供了新的思路。

RSA公钥密码体制开题报告

毕业设计(论文)开题报告 题目公钥密码体制RSA安全分析及应用 系(院)数学与信息科学系年级 专业数学与应用数学班级 学生姓名学号 指导教师职称 学院教务处 二〇一二年三月

一、课题的目的意义: 随着计算机和电子通讯技术,包括因特网的迅猛发展,金融电子化的步伐大大加快,这种电子化、数字化的趋势已经波及社会生活的几乎所有的方面。人与人之间的许多交往活动,包括商业贸易、金融财务和其他经济活动中,不少已以数字化信息的方式在网上流动着。"数字化经济"(Economy Digital)的图景已经浮现,电子商业、电子银行和电子货币的研究、实施和标准化正在紧锣密鼓地进行中。许多传统上基于纸面的,常常需要签名盖章的重要凭证,诸如纸币、存单、支票、股票、公函、合同、租约、遗嘱、选票、法律文书、身份证件、学历证书等等,已陆续转化为数字电子媒体的形式出现。 那些机密的、甚至价值连城的重要信息常常需要在公开的网络上传送。怎样才能确保原始信息不会被窃取、窃听不能被伪造、篡改怎样才能确认信息发送者的真实性怎样才能保证信息发送者无法抵赖?。"公开密钥密码系统"ystem keycryptos public ,或称"公开密钥密码体制")的巧妙方法比较成功地解决了上述问题,并已在业界得到了广泛的应用。 公开密钥密码体制是现代密码学的最重要的发明和进展。说起密码学在大家的印象中主题应该是保护信息传递的机密性。确实,保护敏感的通讯一直是密码学多年来的重点。但这仅仅是当今密码学的主题的一个方面,对信息发送人的身份的验证,正是密码学主题的另一方面。公开密钥密码体制为这两方面的问题都给出了出色的答案,并正在继续产生许多新的思想和方案。目前公钥密码体制最典型的代表是RSA体制。 二、文献综述: 中国古代秘密通信的手段,已有一些近于密码的雏形。宋曾公亮、丁度等编撰《武经总要》“字验”记载,北宋前期,在作战中曾用一首五言律诗的40个汉字,分别代表40种情况或要求,这种方式已具有了密本体制的特点。 公开密钥密码体制的概念是由ford S tan大学的研究人员Diffie及Hellman于1976年提出的。公开密钥密码体制的产生主要有两方面的原因:一是由于常规密钥密码体制的密钥分配问题;而是由于对数字签名的需求。目前比较流行的公钥密码体制主要有两类:一类是基于大整数因子分解问题的,其中RSA算法是公钥密码体制中的重要成员,也是目前最流行的公钥密码体制之一。另一类是基于离散对数问题的,如ElGamal公钥密

基于公钥密码体制的数据加密

基于公钥密码体制的数据加密 摘要:公开密钥算法的原理是加密密钥和解密密钥分离,可将加密密钥公之于众,谁都可以使用;而解密密钥只有解密人自己知道。任何人利用这个加密密钥和算法向该用户发送的加密信息,该用户均可以将之还原。公钥加密算法中使用最广的是RSA。RSA使用两个密钥,一个公共密钥,一个专用密钥。如用其中一个加密,则可用另一个解密。本文综述了公钥体系及其应用RSA算法,也讨论了相关的攻击手段。 关键字:公钥密码加密技术 RSA Abstrat:Public-key algorithm encryption and decryption key principle is key separation, but will encryption key in the open, who can use; And decryption decryption key only themselves know. Any person to use the encryption key and to the user to send the algorithm of the encrypted information, the user can be will restore. Public key encryption algorithm used in the most extensive is RSA. RSA use two keys, a public key, a special key. If use one of the encryption, usable another decryption. This paper reviewed the application of RSA public key system and its algorithm, and also discussed the related attack means. Key:Public key password Encryption technology RSA 1 公钥密码体系背景 通常信息安全的目标可以概括为解决信息的以下问题:保密性(Confidentiality)保证信息不泄露给未经授权的任何人;完整性(Integrity)防止信息被未经授权的人篡改;可用性(Availability)保证信息和信息系统确实为授权者所用;可控性(Controllability)对信息和信息系统实施安全监控,防止非法利用信息和信息系统。 密码是实现一种变换,利用密码变换保护信息秘密是密码的最原始的能力,然而,随着信息和信息技术发展起来的现代密码学,不仅被用于解决信息的保密性,而且也用于解决信息的完整性、可用性和可控性。可以说,密码是解决信息安全的最有效手段,密码技术是解决信息安全的核心技术。 公开密钥算法是在1976年由当时在美国斯坦福大学的迪菲(Diffie)和赫尔曼(Hellman)两人首先发明的(论文"New Direction in Cryptography"),思想不同于传统的对称密钥密码体制,它要求密钥成对出现,一个为加密密钥(e),另一个为解密密钥(d),且不可能从其中一个推导出另一个,其原理是加密密钥和解密密钥分离。在公钥体制中,加密密钥不同于解密密钥。人们将加密密钥公之于众,谁都可以使用;而解密密钥只有解密人自己知道。这样,一个具体用户就可以将自己设计的加密密钥和算法公诸于众,而只保密解密密钥。任何人利用这个加密密钥和算法向该用户发送的加密信息,该用户均可以将之还原。 自1976年以来,已经提出了多种公开密钥密码算法,其中许多是不安全的,一些认为是安全的算法又有许多是不实用的,它们要么是密钥太大,要么密文扩展十分严重。多数密码算法的安全基础是基于一些数学难题,这些难题专家们认为在短期内不可能得到解决。因为一些问题(如因子分解问题)至今已有数千年的历史了。 一般理解密码学(Cryptography)就是保护信息传递的机密性,而对信息发送与接收人的真实身份的验证、对所发出/接收信息在事后的不可抵赖以及保障数据的完整性是现代密码学主题的另一方面。公开密钥密码体制对这两方面的问题都给出了出色的解答,并正在继续产生许多新的思想和方案。 公用密钥的优点就在于,也许你并不认识某一实体,但只要你的服务器认为该实体的CA是可靠

相关文档