《密码学基础》课件第5章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《密码学基础》课件第5章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码学基础 密码学 基础 课件
- 资源描述:
-
1、5.1 公钥密码体制的基本原理 5.2 背包算法 5.3 RSA算法*5.4 Rabin算法 5.5 ElGamal算法 5.6 椭圆曲线算法 习题 5.1 公钥密码体制的基本原理公钥密码体制的基本原理5.1.1 公钥密码的基本思想公钥密码的基本思想运用诸如DES等经典密码系统进行保密通信时,通信双方必须拥有一个共享的秘密密钥来实现对消息的加密和解密,而密钥具有的机密性使得通信双方如何获得一个共同的密钥变得非常困难。通常采用人工传送的方式分配各方所需的共享密钥,或借助一个可靠的密钥分配中心来分配所需要的共享密钥。但在具体实现过程中,这两种方式都面临很多困难,尤其是在计算机网络化时代更为困难。1
2、976年两位美国密码学者W.Diffie和M.Hellman在该年度的美国国家计算机会议上提交了一篇名为“密码学的新方向(New Directions in Cryptography)”的论文,文中首次提出了公钥密码体制的新思想,它为解决传统经典密码学中面临的诸多难题提供了一个新的思路。其基本思想是把密钥分成两个部分:公开密钥和私有密钥(简称公钥和私钥),分别用于消息的加密和解密。公钥密码体制又被称为双钥密码体制(Asymmetric Cryptography System,非对称密码体制),与之对应,传统的经典密码体制被称为单钥密码体制(Symmetric Cryptography Syst
3、em,对称密码体制)。公钥密码体制中的公开密钥可被记录在一个公共数据库里或者以某种可信的方式公开发放,而私有密钥必须由持有者妥善地秘密保存。这样,任何人都可以通过某种公开的途径获得一个用户的公开密钥,然后进行保密通信,而解密者只能是知道相应私钥的密钥持有者。用户公钥的这种公开性使得公钥体制的密钥分配变得非常简单,目前常用公钥证书的形式发放和传递用户公钥(见7.3节),而私钥的保密专用性决定了它不存在分配的问题(但需要用公钥来验证它的真实性,以防止欺骗)。公钥密码算法的最大特点是采用两个具有一一对应关系的密钥对k=(pk,sk)使加密和解密的过程相分离。当两个用户希望借助公钥体制进行保密通信时,
4、发信方Alice用收信方Bob的公开密钥pk加密消息并发送给接收方,而接收方Alice使用与公钥相对应的私钥sk进行解密。根据公、私钥之间严格的一一对应关系,只有与加密时所用公钥相对应的用户私钥才能够正确解密,从而恢复出正确的明文。由于这个私钥是通信中的收信方独有的,其他用户不可能知道,因此只有该收信方Bob才能正确地恢复出明文消息,其他有意或无意获得消息密文的用户都不能解密出正确的明文,达到了保密通信的目的。图5-1给出了公钥密码体制的基本流程。图5-1 公钥密码体制的基本流程5.1.2 公钥密码算法应满足的要求公钥密码算法应满足的要求基于图5-1 给出的公钥密码体制的基本流程,一个实际可用
5、的公钥密码体制(M,C,K,E,D)的基本要求如下:(1)对于K中的每一个公私钥对k=(pk,sk),都存在E中的一个加密变换Epk:MC和D中的一个解密变换Dsk:CM,使得任意明文消息mM都能找到一个惟一的cC满足c=Epkm,且m=Dskc=DskEpkm;(2)对于任意的公私钥对k=(pk,sk)K,加密变换Epk和解密变换Dsk都是多项式时间可计算的函数,但由加密变换Epk推出解密变换Dsk在计算上是不可行的,或者说在知道公钥pk的情况下推知私钥sk是计算上不可行的。由上面的基本要求可以看出,公钥密码体制的核心在于加密变换与解密变换的设计。在密码算法中,加解密变换是互逆的,但条件(2
6、)说明在公钥密码体制中加解密变换不能简单地直接互推。上述条件表明公钥密码体制的加解密变换类似于陷门单向函数,因此可以利用陷门单向函数来构造公钥密码体制。所谓的陷门单向函数是一个可逆函数f(x),满足对于定义域中的任何x,计算函数值y=f(x)都是容易的,但对几乎所有的x要由y=f(x)求x在计算上不可行(即使已经知道函数f(x),除非知道某些辅助信息(称为陷门信息)。这里所说的“容易计算”是指函数值能在其输入长度的多项式时间内计算出来,比如若输入长度为n比特,求函数值的计算时间是na的某个倍数,则称此函数是容易计算的,否则就是不可行的,这里a是一个固定常数。针对公钥密码体制(M,C,K,E,D
7、)的基本要求,一个可行的公钥密码算法应该满足如下要求:(1)接收方Bob产生密钥对k=(pkB,skB)在计算上是容易的;(2)发送方Alice用收信方Bob的公钥pkB加密消息m产生密文在计算上是容易的;(3)接收方Bob用自己的私钥skB解密密文c,还原明文消息在计算上是容易的;mEcBpkcDmBsk(4)不仅攻击者由密文c和Bob的公钥pkB恢复明文m是计算上不可行的,而且攻击者由Bob的公钥pkB求解对应的私钥skB也是计算上不可行的;(5)一般情况下,加解密的次序可交换,即。mDEmEDBBBBskpkpksk公钥密码体制的思想完全不同于单钥密码体制,公钥密码算法的基本操作不再是单
8、钥密码体制中使用的代换和置换,公钥密码体制通常将其安全性建立在某个尚未解决(且尚未证实能否有效解决)的数学难题的基础上,并经过精心设计来保证其具有非常高的安全性。公钥密码算法以非对称的形式使用两个密钥,不仅能够在实现消息加/解密基本功能的同时简化了密钥分配任务,而且还对密钥协商与密钥管理、数字签名与身份认证等密码学问题产生了深刻的影响。可以说公钥密码思想为密码学的发展提供了新的理论和技术基础,是密码学发展史上的一次革命。下面分别给出常用公钥密码算法:背包算法、RSA公钥算法、Rabin算法、ElGamal算法、椭圆曲线密码的原理和算法分析。5.2 背包算法背包算法当W.Diffie和M.Hel
9、lman提出公钥密码体制的设想时,并没有给出一个具体的实例。直到两年后的1978年,由R.Merkle和M.Hellman给出了第一个公钥密码算法,这就是基于组合数学中背包问题(或者说是子集和问题)的背包公钥密码算法,也称为MH背包算法,简称背包算法。5.2.1 背包问题背包问题在组合数学中有一个背包问题:假设有一堆物品,体积各不相同,问能否从这堆物品中找出几个正好装满一个给定容量的背包?(假定物品之间不留空隙)记物品的体积分别为v1,v2,vn,背包的容量为C,则背包问题可表示为b1v1+b2v2+bnvn=C其中,bi(i=1,2,n)等于1或者0。bi=1表示第i个物品在背包中,bi=0
10、表示第i个物品不在背包中,称物品体积的序列(v1,v2,vn)为背包向量。理论上讲,通过检查背包向量V的所有子集,计算出每个子集的元素之和,总可找出一个子集作为背包问题的解,因此背包问题又称为子集和问题。然而长度为n的背包向量V的全体子集共有2n个,当n很大时,对全部2n个子集进行穷举式搜索是不可能的。事实上,背包问题是一类NP完全(NPC)问题,而目前还没有发现比穷举式搜索更好的NPC问题求解方法。幸运的是并非所有的背包问题都没有有效算法,有一类特殊的背包问题是容易求解的,这就是超递增背包问题。设V=(v1,v2,vn)是一个背包向量,若V满足即V中每一项都大于它前面所有项之和,则称V是一个
11、超递增向量,或者称序列v1,v2,vn是一个超递增序列,以V为背包向量的背包问题被称做超递增背包问题。比如,序列1,2,4,2n就是一个超递增序列。nivvijji,2,1,11超递增背包问题的解很容易通过以下过程找到:设背包容量为C,从右向左(从大到小)依次检查超递增背包向量V中的每个元素,以确定问题的解。若Cvn,则vn在解中,对应的bn应为1,并将C的值更新为C-vn;否则如果C32,得b6=1,更新C为43-32=11;C=118,得b4=1,更新C为11-8=3;C=32,得b2=1,更新C为3-2=1;C=1得b1=1,最后C减小到0。所以问题的解为110101。超递增背包问题是很
12、容易求解的。下面给出利用数论中的模乘运算将超递增序列变为非超递增序列的方法。选择满足如下条件的模数k和乘数t:即t与k互素,确保t在模k下的乘法逆元t-1存在。令 UtV mod kt(v1,v2,vn)mod k=(tv1 mod k,tv2 modk,tvn mod k)那么U是一个非超递增向量。1),gcd(,1ktvknii5.2.2 背包算法的描述背包算法的描述借助于背包问题中的超递增向量和相应的非超递增向量,可以构造一个公钥密码算法:背包算法。具体如下:私有密钥设置为将一个超递增向量V转换为非超递增向量U的参数t、t-1和k,公开密钥设置为非超递增向量U。具体的加/解密过程如下:(
13、1)加密变换:首先将二进制明文消息划分成长度与非超递增向量U长度相等的明文分组b1b2bn;然后计算明文分组向量B=(b1,b2,bn)与非超递增向量U=(u1,u2,un)的内积BU=b1u1+b2u2+bnun,所得结果为密文。(2)解密变换:先还原出超递增背包向量V=t-1U mod kt-1tV mod k,再将密文BU模k乘以t-1的结果作为超递增背包问题的背包容量,求解超递增背包问题,得到消息明文。例例5.2 设V=(1,3,7,13,26,65,119,267)是一个超递增背包向量,取模数k=523,乘数t=467,则t-1=28 mod 523。对V模k乘以t,计算出公钥:Ut
14、V mod k467(1,3,7,13,26,65,119,267)mod 523 (467,355,131,21,135,215)并对外公布U。假设发送方有一明文消息m=10101100,用公钥U对m加密得到密文:c=mU=(1,0,1,0,1,1,0,0)(467,355,131,318,113,21,135,215)=467+131+113+21 =732接收方利用公钥U与私钥t-1和k还原出超递增背包V,对密文c=732模k乘以t-1,得到ct-1mod k73228 mod 52320496 mod 523=99 以99作为背包的容量去解超递增背包问题:由99267得m8=0;由99
15、65得m6=1;由99-65=3426得m5=1;由34-26=87 得m3=1;由8-7=13得m2=0,m1=1。解密得到明文分组为10101100,即为原来的m。要解决类似例5.2这样的背包向量仅有8个分量的背包问题并不困难,甚至对非超递增的背包向量也是如此。但实用的背包向量至少应包含250个以上的分量,每个分量的大小一般要在200到400位,模数也应在100到200位之间。这些值可以使用随机序列发生器来生成。对于这样的背包算法,试图用穷举式搜索攻击来破译是无用的。5.2.3 背包算法的安全性背包算法的安全性背包算法利用难解的一般背包问题作为公开密钥,可以方便地对明文进行加密;而私有密钥
16、则利用易解的超递增背包问题给出一个解密的简单方法。那些不知道私钥的攻击者要想破译密文就不得不求解一个困难的背包问题,这在计算上看似是不可行的。背包算法提出两年后即被破解。破解的基本思想是不必找出真正的模数k和乘数t,也不用穷举式搜索背包向量的所有子集,而是找出一对任意的k和t,使得用公开的背包向量U模k乘t后能得到一个超递增向量。究其原因是Merkle-Hellman背包体制的公开密钥是由超递增向量变换而来的,虽然经过模乘置乱,但超递增向量内在的规律性并不能完全被隐藏,这就给攻击者留下了可乘之机。随后Merkle又提出了多次迭代背包体制,但最终也被破解。1984年Brickell最终证明了Me
17、rkle-Hellman背包体制的不安全性,并发现了一种算法可将难解的背包问题转化为易解的背包问题。背包算法是第一个使公钥密码体制成为现实的密码算法,它说明了如何将数学难题应用于公钥密码算法的设计。背包体制的优势是加解密速度很快,但它存在的不安全性使其不能用于商业目的。5.3 RSA算法算法数论里有一个大数分解问题:计算两个素数的乘积非常容易,但分解该乘积却异常困难,特别是在这两个素数都很大的情况下。基于这个事实,1978年美国MIT的三名数学家R.Rivest,A.Shamir和L.Adleman提出了著名的公钥密码体制:RSA算法。该算法以两个大素数的乘积作为算法的公钥来加密消息,而密文的
18、解密必须知道相应的两个大素数。迄今为止,RSA算法是思想最简单、分析最透彻、应用最广泛的公钥密码体制。RSA算法非常容易理解和实现,经受住了密码分析,密码分析者既不能证明也不能否定它的安全性,这恰恰说明了RSA具有一定的可信度。5.3.1 RSA算法的描述算法的描述基于大数分解问题,为了产生公、私钥,首先独立地选取两个大素数p和q(注:为了获得最大程度的安全性,选取的p和q的长度应该差不多,都应为长度在100位以上的十进制数字)。计算n=pq 和 (n)=(p)(q)=(p-1)(q-1)这里(n)表示n的欧拉函数,即(n)为比n小且与n互素的正整数的个数。随机选取一个满足1e(n)且gcd(
19、e,(n)=1的整数e,那么e存在模(n)下的乘法逆元d=e-1mod(n),d可由扩展的欧几里得算法求得(附录A)。这样由p和q获得了三个参数:n、e、d。在RSA算法里,以n和e作为公钥,d作为私钥(注:p和q不再需要,可以销毁,但一定不能泄露)。具体的加/解密过程如下:(1)加密变换:先将消息划分成数值小于n的一系列数据分组,即以二进制表示的每个数据分组的比特长度应小于lbn。然后对每个明文分组m进行如下的加密变换来得到密文c:c=me mod n(2)解密变换:m=cd mod n。命题命题5.3.1 RSA算法中的解密变换m=cd mod n是正确的。证明:证明:数论中的欧拉定理指出
20、,如果两个整数a和b互素,那么a(b)1 mod b。在RSA算法中,明文m必与两个素数p和q中至少一个互素。不然的话,若m与p和q都不互素,那么m既是p的倍数也是q的倍数,于是m也是n的倍数,这与mn矛盾。由de1 mod(n)可知,存在整数k使得de=k(n)+1。下面分两种情形来讨论:情形一:m仅与p、q二者之一互素,不妨假设m与p互素且与q不互素,那么存在整数a使得m=aq,由欧拉定理可知mk(n)mod pmk(p)(q)mod p(m(p)k(q)mod p 1 mod p于是存在一个整数t使得mk(n)=tp+1。给mk(n)=tp+1两边同乘以m=aq得到mk(n)+1=tap
21、q+m=tan+m由此得cd=med=mk(n)+1=tan+mm mod n。情形二:如果m与p和q都互素,那么m也和n互素,有cd=med=mk(n)+1=mmk(n)m mod nRSA算法实质上是一种单表代换系统。给定模数n和合法的明文m,其相应的密文为c=me mod n且对于mm必有cc。RSA算法的关键在于当n极大时,在不知道陷门信息的情况下,很难确定明文和密文之间的这种对应关系。例例5.3 选取p=5,q=11,则n=55且(n)=40,明文分组应取为1到54的整数。如果选取加密指数e=7,则e满足1e(n)且与(n)互素,于是解密指数为d=23。假如有一个消息m=53197,
22、分组可得m1=53,m2=19,m3=7。分组加密得到711mod53 mod5537ecmn722mod19 mod5524ecmn733mod7 mod5528ecmn密文的解密为最后恢复出明文m=53197。2311mod37mod5553dcnm2322mod24mod5519dcnm2333mod28mod557dcnm5.3.2 RSA算法的安全性算法的安全性RSA算法的安全性完全依赖于对大数分解问题困难性的推测,但面临的问题是迄今为止还没有证明大数分解问题是一类NP问题。为了抵抗穷举攻击,RSA算法采用了大密钥空间,通常模数n取得很大,e和d也取为非常大的自然数,但这样做的一个明
23、显缺点是密钥产生和加/解密过程都非常复杂,系统运行速度比较慢。与其他的密码体制一样,尝试每一个可能的d来破解是不现实的。那么分解模数n就成为最直接的攻击方法。只要能够分解n就可以求出(n),然后通过扩展的欧几里得算法可以求得加密指数e模(n)的逆d,从而达到破解的目的。目前还没有找到分解大整数的有效方法,但随着人们计算能力的不断提高和计算成本的不断降低,许多被认为是不可能分解的大整数已被成功分解。例如模数为129位十进制数字的RSA-129已于1994年4月在Internet上通过分布式计算被成功分解出一个64位和一个65位的因子。更困难的RSA-130也于1996年被分解出来,紧接着RSA-
24、154也被分解,据报导158位的十进制整数也已被分解,这意味着512比特模数的RSA已经不安全了。更危险的安全威胁来自于大数分解算法的改进和新算法的不断提出。当年破解RSA-129采用的是二次筛法,而破解RSA-130使用的算法称为推广的数域筛法,该算法使破解RSA-130的计算量仅比破解RSA-129多10%。尽管如此,密码专家们认为一定时期内1024到2048比特模数的RSA还是相对安全的。除了对RSA算法本身的攻击外,RSA算法还面临着攻击者对密码协议的攻击,即利用RSA算法的某些特性和实现过程对其进行攻击。下面介绍一些攻击方法。1.共用模数攻击共用模数攻击在RSA的实现中,如果多个用户
25、选用相同的模数n,但有不同的加解密指数e和d,这样做会使算法运行起来更简单一些,但却是不安全的。假设一个消息用两个不同的加密指数加密且共用同一个模数,如果这两个加密指数互素(一般情况下都这样),则不需要知道解密指数,任何一个加密指数都可以恢复明文。理由如下:设e1和e2是两个互素的加密密钥,共用的模数为n。对同一个明文消息m加密得。攻击者知道n、e1、e2、c1和c2,他可以用如下方法恢复出明文m。nmcnmceemodmod2121和由于e1和e2互素,由扩展的欧几里德算法可找到满足re1+se2=1的r和s。由此可得明文消息m被恢复出来。(注意:r和s必有一个为负整数,上述计算需要用扩展的
展开阅读全文