400 likes | 637 Views
计算机安全与保密. 公钥密码体系. 杭州电子科技大学. 对称算法的不足. 密钥必须通过某一信道协商,对这个信道的安全性的要求比正常的传送消息的信道的安全性要高. 公钥密码背景. 公钥密码体制的特点: 加密密钥与解密密钥在本质上是不同的,即已知一个密钥并不能轻易地求出另一个密钥。 不需要增加分发密钥的额外信道。. 公钥密码体制的要求: 产生一对密钥是计算可行的 已知公钥和明文,产生密文是计算可行的 接收方利用私钥来解密密文是计算可行的 对于攻击者,利用公钥来推断私钥是计算不可行的 已知公钥和密文,恢复明文是计算 不可行的 ( 可选 ) 加密和解密的顺序可交换.
E N D
计算机安全与保密 公钥密码体系 杭州电子科技大学
对称算法的不足 • 密钥必须通过某一信道协商,对这个信道的安全性的要求比正常的传送消息的信道的安全性要高
公钥密码背景 公钥密码体制的特点: • 加密密钥与解密密钥在本质上是不同的,即已知一个密钥并不能轻易地求出另一个密钥。 • 不需要增加分发密钥的额外信道。
公钥密码体制的要求: • 产生一对密钥是计算可行的 • 已知公钥和明文,产生密文是计算可行的 • 接收方利用私钥来解密密文是计算可行的 • 对于攻击者,利用公钥来推断私钥是计算不可行的 • 已知公钥和密文,恢复明文是计算不可行的 • (可选)加密和解密的顺序可交换
公钥密码的安全性依赖于从已知的公钥,加密算法和密文中无法求出明文或秘钥。公钥密码的安全性依赖于从已知的公钥,加密算法和密文中无法求出明文或秘钥。 • Diffie和Hellman提出了一种陷门单向函数概念,为建立公钥密码体制找到了一种途径。
单向函数 • 函数f 若满足下列条件 • 1)对任意给定的x,容易计算f(X)=y • 2)对任意给定的y,求出x使得f(x)=y是困难的。
求离散对数问题 y=gx mod p 若给出p,g,y求x称为求离散对数问题 • 因子分解问题 n=pq 若给定n,求p,q称为因子分解问题 • 背包问题 给定一个有限个自然数序列集合B=(b1,b2,……,bn)及二进制数序列x=(x1,x2,……,xn),S= x1 b1 +x2 b2 +…… + xn bn 给定B,S,求x序列,称为求背包问题
单向陷门函数: 单向陷门函数是满足下列条件的函数f: • 给定x,计算y=f(x)是容易的; • 给定y, 计算x使x=f-1(y)是不可行的; • 存在陷门t,已知t时,对给定的任何y,若相应的原象x存在,则计算x是容易的。
通过陷门单向函数建立公钥密码 • f(x)是单向陷门函数,陷门为t。 那 么设计公钥密码系统时f(x)作为公钥,陷门t作为私钥,任何人都可将明文m利用公钥f(x)加密得到密文y=f(m),而任何人不知道私钥即陷门,由密文y都无法求出m,因为f(x)是单向的,但拥有私钥,便可容易求出m
RSA公钥密码体制 1 、1977年由Rivest、Shamir和 Adleman发明并于1978年公布。 2 、明文和密文在0~n-1之间,n是一个正整数 3 、应用最广泛的公钥密码算法 4 、只在美国申请专利,且已于2000年9月到期
RSA密码体制的描述 • 密钥生成算法:每个用户执行以下操作 • 随机生成两个不同大素数p,q; • 计算n=pq,(n)=(p-1)(q-1); • 随机选取整数e,1<e<(n),满足(e,(n))=1; • 利用扩展欧基里德算法求出满足ed=1 mod((n))的整数d; • 公开(n,e),保密(p,q,(n),d)。其中e就是加密密钥,而d就是解密密钥,n称为模数。 例如取p=7,q=17,则 n=pq=7×17=119 (n)=(7-1)(17-1)=6 × 16=96 任取e=5,则d=77.注意5 ×77=385=1 mod96
RSA加解密:若B要利用A的公钥进行加密,则B执行RSA加解密:若B要利用A的公钥进行加密,则B执行 • 获得A可信的公钥(n,e); • 把消息按分组的方式表示为区间[0,n-1]之间的整数m; • 计算c=Ee(m)=me mod n; • 将密文c发送给A; 解密:为从c中恢复明文m,A利用解密密钥d,计算 m=cd mod n 例如在上面的例子中,假设m=19,则 c=195 =19 ×(192)2=19 ×3612=19 ×42 mod 119 =304=66 mod 119 因此密文为c=66
对于密文c=66,其解密过程如下 m=6677=(662)38 × 66 mod 119 =7238 ×66 mod 119 =4738 ×66 mod 119 =6719 ×66 mod 119 =(672)9 × 67 × 66 mod 119 =869 × 19 mod 119 =(862)4 × 86 × 19 mod 119 =184 × 87 mod 119 =18 × 87 mod 119 =19 mod 119
解密的正确性: • 费马小定理: 若(a,n)=1,则a(n)=1 mod n • 推论1:若n=pq,p≠q都是素数,k是任意整数,则 m(n)+1=m(p-1)(q-1)+1=m mod n • 推论2: mk(p-1)(q-1)+1=m mod n 由于ed=1 mod(n),则存在整数k,满足 ed=1+k(n)=1+k(p-1)(q-1) 因此 cd=med=mk(p-1)(q-1)+1=m mod n 所以解密成功。
RSA体制的陷门单向函数 加密函数 E(x)=xe mod n 是一个单向函数,所以对攻击的人来说求逆计算不可行。而A能解密的陷门是由分解n=pq,知 (n)=(p-1)(q-1) 从而用欧氏算法解出解密私钥d.所以如果能够分解n,那么就可以完成解密。
RSA的安全性 • RSA的安全性是基于大整数的因子分解的困难性 猜想:攻破RSA与分解n是多项式等价 的。然而,这个猜想至今没有给出可信的 证明!!!
(1)素因子p,q应当是强素数, p是强素数:存在大素数p1,p1|p-1,同时r1 , r2是大素数, r1| p1 -1 ,r2| p1 -1. 选择强素数的目的是因为选择的p,q如果p-1,q-1的素因子都很小,则n=pq存在p-1或p+1分解法
(2)因子p,q的差必须足够大。 如果p,q比较接近,则由p,q的平均值可得 再利用 可得 进而求出p,q
(3)RSA的加解密密钥不能太小,存在低指数攻击(3)RSA的加解密密钥不能太小,存在低指数攻击 已经证明了当d的二进制长度小于模数n长度的1/4时,可以利用连分数法在多项式时间内求解n。
如果解密指数d被泄露,则就可以分解出n,因此就必须重新选取n,而不能只是重新选取e,d.如果解密指数d被泄露,则就可以分解出n,因此就必须重新选取n,而不能只是重新选取e,d.
RSA的实现 • 可供选择的大素数是否多 • 随机选择大素数是否容易 • 模幂运算能否快速实现
模幂运算-平方和乘算法 平方和乘算法的复杂度:执行次数至少要k次模乘,最多需要2k次模乘
素数判定 • 确定性素数判定:判定结果一定正确 • 概率性素数判定:判定结果在某个概率上是正确的。 • 概率性素数判定算法内部使用了一个随机数,在复杂度理论中也称此类算法为随机算法
强伪素数判定算法 • 输入n,b • 输出 n是以b为其的强伪素数,输出true,否则输出false
Miller-Rabin素数判定算法 Prime_test(n) { b=rand(); if test(n,b)=false return false;//输出n不是素数 return true;//输出n是素数 }
Miller-Rabin素数判定算法 Prime_test(n) { For i=0 to 50 { b=rand(); if test(n,b)=false return false;//输出n不是素数 } return true;//输出n是素数 }