360 likes | 455 Views
第五章 公钥密码体制. 公钥密码体制的基本原理 RSA 算法 ElGamal 密码体制 椭圆曲线密码体制. 公钥密码体制. 常规密钥密码体制 采用的是对称方法,使用相同的密码。 缺点: 从加密的算法和密码,可以推导出解密的算法和密码。 在多个发送者和单一接收者来说,不方便。 如何安全地分发密钥。. 公钥密码体制. 能够有效计算公钥 PK 和私钥 SK。 从已知的公钥 PK 不能推导出私钥 SK。 发送方用公钥 PK 进行加密,而接收方用私钥 SK 进行解密, 还原出明文,即: D SK ( E PK ( P )) = P。. 公钥密码学的历史.
E N D
第五章公钥密码体制 • 公钥密码体制的基本原理 • RSA算法 • ElGamal密码体制 • 椭圆曲线密码体制
公钥密码体制 • 常规密钥密码体制采用的是对称方法,使用相同的密码。 缺点: • 从加密的算法和密码,可以推导出解密的算法和密码。 • 在多个发送者和单一接收者来说,不方便。 • 如何安全地分发密钥。
公钥密码体制 • 能够有效计算公钥PK和私钥SK。 • 从已知的公钥PK不能推导出私钥SK。 • 发送方用公钥PK进行加密,而接收方用私钥SK进行解密,还原出明文,即: DSK(EPK(P))= P。
公钥密码学的历史 • 76年Diffie和Hellman发表了“密码学的新方向”,奠定了公钥密码学的基础 • 公钥技术是二十世纪最伟大的思想之一 • 改变了密钥分发的方式 • 可以广泛用于数字签名和身份认证服务 • 78年,RSA算法 • PKI
公开密钥密码体制 如:银行有很多客户,每个客户都用公钥加密,而银行则用密钥解密。
基本思想和要求 • 涉及到各方:发送方、接收方、攻击者 • 涉及到数据:公钥、私钥、明文、密文 • 公钥算法的条件: • 产生一对密钥是计算可行的 • 已知公钥和明文,产生密文是计算可行的 • 接收方利用私钥来解密密文是计算可行的 • 对于攻击者,利用公钥来推断私钥是计算不可行的 • 已知公钥和密文,恢复明文是计算不可行的 • (可选)加密和解密的顺序可交换
如何设计一个公钥算法 • 公钥和私钥必须相关,而且从公钥到私钥不可推断 • 必须要找到一个难题,从一个方向走是容易的,从另一个方向走是困难的 • 如何把这个难题跟加解密结合起来 • 计算可行和不可行的界
公钥密码学的研究情况 • 与计算复杂性理论密切相关 • 计算复杂性理论可以提供指导 • 但是需求不尽相同 • 计算复杂性通常针对一个孤立的问题进行研究 • 而公钥密码学往往需要考虑一些相关的问题比如,密码分析还需要考虑已知明文、选择明文等相关的情形 • 讨论的情形不同 • 计算复杂性考虑最坏的情形 • 而对于公钥密码学则是不够的 • 一个困难问题必然会导致一个保密性很好的密码系统吗? • 不一定,还需要有好的构造
RSA RSA算法由三位科学家Rivest、Shamir和Adleman提出。 选择密钥的步骤: 1.随机选择两个大素数p和q。 2.计算公开的模 n=p*q 。 3.计算欧拉函数 Φ(n)=(p-1)*(q-1)。 4.随机选一整数 e,1≤e<Φ(n) ,(Φ(n),e)=1, 即Φ(n)和e互素。 5.计算d ,满足 ed mod Φ(n) =1。 得到公钥和私钥,公钥为( e , n ),私钥为d。
RSA 加密/解密过程: 1.将明文划分为一个个数据块P,其中0≤P<n。 2.C为P对应的密文。则: 加密:C= Pe (mod n) 解密:P= Cd (mod n)
RSA 举例: 1.选择p=7,q=17。 2.计算n=p*q=119,Φ(n)=(p-1)*(q-1)=96。 3.选e=5,因为5和96互素。 4.根据5d mod 96=1,得d=77。 5.公钥为(5,117),密钥为77。 如:明文为P=6 密文: C=Pe mod n = 65 mod 119 =41。 解密:P=Cd mod n = 4177 mod 119= 6。
RSA的安全性 基本原理:根据数论,寻求两个大素数比较容易,而将它们的乘积分解开则相当困难。
素数:只能被1和它本身整除的自然数;否则为合数。素数:只能被1和它本身整除的自然数;否则为合数。 每个合数都可以唯一地分解出素数因子 6 = 2 ·3 999999 = 3·3·3·7·11·13·37 27641 = 131·121 从2 开始试验每一个小于等于√27641 的素数。 整数n的十进制位数 因子分解的运算次数 所需计算时间(每微秒一次) 50 1.4x1010 3.9小时 75 9.0x1012 104天 100 2.3x1015 74年 200 1.2x1023 3.8x109年 300 1.5x1029 4.0x1015年 500 1.3x1039 4.2x1025年
对RSA的攻击方法 • 1、强力攻击(穷举法):尝试所有可能的私有密钥 • 2、数学分析攻击:各种数学方法,等价与两个素数乘积的因子分解 • 3、对RSA实现的攻击
90年代大数分解的进程 分解数 尺寸bits 分解日期 分解算法 RSA-100 330 1991.4 二次筛法 RSA-110 364 1992.4 二次筛法 RSA-120 397 1993.6 二次筛法 RSA-129 425 1994.4 二次筛法 RSA-130 430 1996.4 数域筛法 RSA-140 463 1999.2 数域筛法 RSA-155 512 1999.8 数域筛法
RSA-155的分解 • 1999.8.22,荷兰H.Riele领导的来自6个国家的研究人员组成的团队找到了一个512-bit RSA 密钥的一个素因子 • 512-bit RSA在电子商务中所占的比例为95% • 用了5个月的时间,计算机时间估计为 • 8000mips years
对RSA的攻击 • 对RSA的具体实现存在一些攻击方法,但不是针对基本算法的,而是针对协议的。 • 对RSA的选择密文攻击 • 对RSA的公共模攻击 • 对RSA的小加密指数攻击 • 对RSA的小解密指数攻击 • 时间性攻击:取决于解密算法的运算时间
对RSA的选择密文攻击 现在E让A对y签名,即解密y, A向E发送u=yd mod n 而E计算 tu mod n=r-1yd mod n =r-1xdcd mod n =cd mod n =m • 例1:E监听A的通信,收集由A的公开密钥加密的密文c,E想知道消息的明文m,使 m=cd mod n • 他首先选择随机数r,使r<n. 然后用A的公开密钥e计算 x=re mod n y=xc mod n t=r-1 mod n • 如果x=re mod n,则 r=xd mod n
对RSA的公共模攻击 c1=me1 mod n c2=me2 mod n 由于e1和e2互素,所以可以用扩展的Euclid算法找到r,s使 re1+se2=1, 假设r是负数,可以用扩展的Euclid算法计算c1-1,而 (c1-1)-r*c2s= m mod n • 一种可能的RSA实现方法是给每个人相同的n,但指数d和e不同。 • 问题:如果相同的消息曾用两个不同的指数加密,而这两个指数是互素的,则明文可以不用任何一个解密密钥来恢复。 • 令m为明文消息,两个加密密钥为e1,e2,两个密文消息为c1,c2 注意:不要让一群用户共享一个模n
对RSA的小加密指数攻击 • 如果使用一个较小的e值,则进行RSA签名和加密会很快,但也不安全。 • 如果用相同e值的不同公开密钥加密e(e+1)/2个线性相关的消息,则系统是可破的。如果有少于这些的消息或消息不相关,则无问题。 • 比如:消息为mj,使用同样的指数e, 模数分别为q1,q2,…qs(两两互素),则密文为mjemod q1, mjemod q2,… mjemod qs,根据中国剩余定理,对于较小的e,可以解出mj。 • 解决办法:加密前将消息与随机值混合,并保证m与n有相同的长度。
对RSA的小解密指数攻击 • 使用较小的d会产生穷尽解密攻击的可能 • 当d为n的1/4长度时,而e小于n时,可以恢复d,当e,d是随机选择的时,这种情况很少发生,当e很小时不会发生。 • 注意:应选择一个大的d值
实现要求 • 若要使RSA安全,p与q必为足够大的素数,使分析者没有办法在多项式时间内将n分解出来。 • 目前介于1024比特和2048比特之间的RSA算法是安全的。
素数的选取 • 为了抵抗现有的整数分解算法,对RSA模n的素因子 p和q还有如下要求: (1)|p-q|很大,通常 p和q的长度相同; (2)p-1 和q-1分别含有大素因子p1和q1 (3)P1-1和q1-1分别含有大素因子p2和q2 (4)p+1和q+1分别含有大素因子p3和q3
加密指数e的选取 • 为了提高加密速度,通常取e为特定的小整数,如EDI国际标准中规定 e=216+1,ISO/IEC9796中甚至允许取e=3。这时加密速度一般比解密速度快10倍以上。e=216+1优于e=3之处在于它能够抵抗对RSA的小加密指数攻击
实现中的问题 (1)如何计算ab mod n (2)如何判定一个给定的整数是素数? (3)如何找到足够大的素数p和q ?
ElGamal加密算法 • 选择: 一个素数p,p的一个原根α ,一个整数a,令 β = αa mod p,公开{p, α , β },保密a. • 对于明文信息x, 加密: 秘密选择随机数r, 计算 (y1,y2)=(αr mod p, xβr mod p)作为密文 • 解密: y2(y1a) –1=(xβr)((αr )a)-1 = x mod p 信息有扩张
椭圆曲线密码介绍 • 1985年Miller,Koblitz 独立提出 y2+axy+by=x3+cx2+dx+e • 曲线上的点连同无穷远点O的集合 • 运算定义: • 若曲线三点在一条直线上,则其和为O • O用作加法的单位:O = -O; P+O = P • 一条竖直线交X轴两点P1、P2,则P1+P2+O=O,于是P1 = -P2 • 如果两个点Q和R的X轴不同,则画一连线,得到第三点P1,则Q+R+P1=O,即Q+R=-P1 • 2倍,一个点Q的两倍是,找到它的切线与曲线的另一个交点S,于是Q+Q=2Q=-S
有限域上椭圆曲线 • 有限域上椭圆曲线 • y2x3+ax+b mod p • p是奇素数,且4a3+27b20 mod p • 针对所有的0<= x <p,可以求出有效的y,得到曲线上的点(x,y),其中x,y < p。记为Ep(a,b) • Ep(a,b)中也包括O • 加法公式: • P+O=P • 如果P=(x,y),则P+(x,-y)=O,(x,-y)点是P的负点,记为-P。而且(x,-y)也在Ep(a,b)中 • 如果P=(x1,y1),Q=(x2,y2),则 P+Q=(x3,y3)为x3=2-x1-x2 (mod p)y3=(x1-x3)-y1 (mod p)其中,如果PQ,则 = (y2-y1)/(x2-x1) 如果P=Q,则 = (3x12+a)/(2y1)
椭圆曲线用于加密 • 找到一个难题: • 考虑等式Q=kP,其中Q、P属于Ep(a,b),k<p • 已知k和P,计算Q,是容易的 • 已知Q和P,计算k,是困难的 • 选择Ep(a,b)的元素G,使得G的阶n是一个大素数 • G的阶是指满足nG=O的最小n值 • 秘密选择整数r,计算P=rG,然后 • 公开(p,a,b,G,P),P为公钥 • 保密r • 加密M:先把消息M变换成为Ep(a,b)中一个点Pm • 然后,选择随机数k,计算密文Cm={kG,Pm+kP) • 如果k使得kG或者kP为O,则要重新选择k. • 解密Cm: (Pm+kP)-r(kG)=Pm+krG-rkG=Pm • 加密信息有扩张
椭圆曲线密码的安全性 • 难点: 从P和kP获得k • 对椭圆曲线研究的时间短 • 椭圆曲线要求密钥长度短,速度快 • 对比: ECC RSA*Pollard rho分析方法