1 / 40

公钥密码体系

计算机安全与保密. 公钥密码体系. 杭州电子科技大学. 对称算法的不足. 密钥必须通过某一信道协商,对这个信道的安全性的要求比正常的传送消息的信道的安全性要高. 公钥密码背景. 公钥密码体制的特点: 加密密钥与解密密钥在本质上是不同的,即已知一个密钥并不能轻易地求出另一个密钥。 不需要增加分发密钥的额外信道。. 公钥密码体制的要求: 产生一对密钥是计算可行的 已知公钥和明文,产生密文是计算可行的 接收方利用私钥来解密密文是计算可行的 对于攻击者,利用公钥来推断私钥是计算不可行的 已知公钥和密文,恢复明文是计算 不可行的 ( 可选 ) 加密和解密的顺序可交换.

Télécharger la présentation

公钥密码体系

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 计算机安全与保密 公钥密码体系 杭州电子科技大学

  2. 对称算法的不足 • 密钥必须通过某一信道协商,对这个信道的安全性的要求比正常的传送消息的信道的安全性要高

  3. 公钥密码背景 公钥密码体制的特点: • 加密密钥与解密密钥在本质上是不同的,即已知一个密钥并不能轻易地求出另一个密钥。 • 不需要增加分发密钥的额外信道。

  4. 公钥密码体制的要求: • 产生一对密钥是计算可行的 • 已知公钥和明文,产生密文是计算可行的 • 接收方利用私钥来解密密文是计算可行的 • 对于攻击者,利用公钥来推断私钥是计算不可行的 • 已知公钥和密文,恢复明文是计算不可行的 • (可选)加密和解密的顺序可交换

  5. 公钥密码的安全性依赖于从已知的公钥,加密算法和密文中无法求出明文或秘钥。公钥密码的安全性依赖于从已知的公钥,加密算法和密文中无法求出明文或秘钥。 • Diffie和Hellman提出了一种陷门单向函数概念,为建立公钥密码体制找到了一种途径。

  6. 单向函数 • 函数f 若满足下列条件 • 1)对任意给定的x,容易计算f(X)=y • 2)对任意给定的y,求出x使得f(x)=y是困难的。

  7. 求离散对数问题 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序列,称为求背包问题

  8. 单向陷门函数: 单向陷门函数是满足下列条件的函数f: • 给定x,计算y=f(x)是容易的; • 给定y, 计算x使x=f-1(y)是不可行的; • 存在陷门t,已知t时,对给定的任何y,若相应的原象x存在,则计算x是容易的。

  9. 通过陷门单向函数建立公钥密码 • f(x)是单向陷门函数,陷门为t。 那 么设计公钥密码系统时f(x)作为公钥,陷门t作为私钥,任何人都可将明文m利用公钥f(x)加密得到密文y=f(m),而任何人不知道私钥即陷门,由密文y都无法求出m,因为f(x)是单向的,但拥有私钥,便可容易求出m

  10. RSA公钥密码体制 1 、1977年由Rivest、Shamir和 Adleman发明并于1978年公布。 2 、明文和密文在0~n-1之间,n是一个正整数 3 、应用最广泛的公钥密码算法 4 、只在美国申请专利,且已于2000年9月到期

  11. 欧拉函数

  12. 欧拉函数

  13. 欧拉函数

  14. 欧拉函数

  15. 欧拉函数

  16. 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

  17. 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

  18. 对于密文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

  19. 解密的正确性: • 费马小定理: 若(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 所以解密成功。

  20. RSA体制的陷门单向函数    加密函数 E(x)=xe mod n 是一个单向函数,所以对攻击的人来说求逆计算不可行。而A能解密的陷门是由分解n=pq,知 (n)=(p-1)(q-1) 从而用欧氏算法解出解密私钥d.所以如果能够分解n,那么就可以完成解密。

  21. RSA的安全性 • RSA的安全性是基于大整数的因子分解的困难性 猜想:攻破RSA与分解n是多项式等价 的。然而,这个猜想至今没有给出可信的 证明!!!

  22. (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分解法

  23. (2)因子p,q的差必须足够大。 如果p,q比较接近,则由p,q的平均值可得 再利用 可得 进而求出p,q

  24. (3)RSA的加解密密钥不能太小,存在低指数攻击(3)RSA的加解密密钥不能太小,存在低指数攻击   已经证明了当d的二进制长度小于模数n长度的1/4时,可以利用连分数法在多项式时间内求解n。

  25. 如果解密指数d被泄露,则就可以分解出n,因此就必须重新选取n,而不能只是重新选取e,d.如果解密指数d被泄露,则就可以分解出n,因此就必须重新选取n,而不能只是重新选取e,d.

  26. RSA的实现 • 可供选择的大素数是否多 • 随机选择大素数是否容易 • 模幂运算能否快速实现

  27. 模幂运算

  28. 模幂运算

  29. 模幂运算-平方和乘算法 平方和乘算法的复杂度:执行次数至少要k次模乘,最多需要2k次模乘

  30. 素数分布

  31. 素数判定 • 确定性素数判定:判定结果一定正确 • 概率性素数判定:判定结果在某个概率上是正确的。 • 概率性素数判定算法内部使用了一个随机数,在复杂度理论中也称此类算法为随机算法

  32. Miller-Rabin素数判定算法

  33. 强伪素数判定算法 • 输入n,b • 输出 n是以b为其的强伪素数,输出true,否则输出false

  34. Miller-Rabin素数判定算法 Prime_test(n) { b=rand(); if test(n,b)=false return false;//输出n不是素数 return true;//输出n是素数 }

  35. Miller-Rabin素数判定算法正确概率

  36. Miller-Rabin素数判定算法 Prime_test(n) { For i=0 to 50 { b=rand(); if test(n,b)=false return false;//输出n不是素数 } return true;//输出n是素数 }

  37. P-1分解法

More Related