Loading...

公开密钥的加密法: RSA加密算法

假如AliceBob需要经过一个不可靠媒介传送一条消息, 他们大概会把这条消息加密, 而普遍使用的字母移位法(凯撒加密法)太容易被破解, 所以他们可能会考虑使用更加安全的加密法.


在上个世纪70年代被麻省理工学院的三位教授发明的RSA加密算法就是一个足够安全的加密法, 当今互联网的SSL安全连接协议的重要加密算法就包括了RSA加密算法. 连接到你的网上银行, 查看这个安全连接的证书, 证书上很可能写的就是“RSA加密”.

当然, RSA被广泛使用的原因还有一个, 那就是它的加密钥匙是公开的, 也就是说, 任何人都可以使用公开的密钥给消息加密, 却无法给刚加密的消息解密.

现在, Alice需要接收一条来自Bob的消息, 她可以这样来生成密钥:

  1. 随机选取两个不相等的较大素数pq, 计算N=pq.

  2. 根据欧拉函数, 计算不大于N且与N互质的正整数个数 φ(N) = (p-1)(q-1).

  3. 选取小于φ(N)且与φ(N)互质的正整数e.

  4. 选取小于φ(N)的正整数d, 使得ed满足 (d×e) Mod φ(N)=1.

  5. 将公钥Ne公开, 保存好私钥d, 销毁pq的记录.

关于私钥d的计算, 在实际应用中经常通过对e做模逆运算来得到d, 而高效解模逆运算的算法就是扩展Euclid算法.


此时, Bob已经知道了公钥Ne, 对于他要发送的消息n (n<N), 他可以计算出把n加密后的消息c=ne Mod N. Bob此时可以放心地把c发送给Alice.


对于Alice收到的加密消息c, 她可以解密出原消息n=cd Mod N.


这样解密的原理是: 因为 cne (Mod N), 所以 cdned (Mod N), 又因为(ed) Mod φ(N)=1, 根据费马小定理, 会有 nedn (Mod N) , 从而 n=cd Mod N.


若中间偷听者Eve截获了密文c, 目前直接由公钥N, e,密文c导出原消息n的唯一方法就是将公钥N因式分解得到pq, 计算得φ(N), 再由公钥e计算出私钥d, 而目前因式分解的较优算法仍然有O(n1/2)的复杂度, 所以Eve想要还原消息n是相当困难的.


上个世纪90年代, 数百台计算机用了五个月的时间合作因式分解了一个长达512位的RSA-155号公钥N, 所以, 现代SSL安全协议对公钥N的要求是起码1024, 而且φ(N)不应有过小的质因数, 所以在生成p,q, 通常是选取随机值再用Miller-Rabin测试来检验随机值是否为素数.


现在的RSA加密算法看起来无懈可击, 但是若多项式时间的因式分解算法被发现, 或者能在多项式时间内分解因式的量子计算机被发明, 那么RSA也会变得跟凯撒加密法一样脆弱, 到那时, 我们就需要发明新的加密传输方法了.

参考资料:

1. Classical and Contemporary Cryptology, Richard Spillman.

2. RSA entry from Wikipedia.

Share and Enjoy:
  • Digg
  • Google Bookmarks
  • del.icio.us
  • Facebook
  • Mixx
Categories: Informatics Tags: , ,
  1. July 23rd, 2009 at 06:35 | #1

    “而目前因式分解的较优算法仍然有O(n^1/2)的复杂度”
    呃…比线性还快…?

  2. July 23rd, 2009 at 18:27 | #2

    @Mgccl
    Pollard p-1 算法只有O(sqrt(n))的复杂度.
    目前因式分解的最快算法NFS仍有O((log n)^(1/3)(log log n)^(2/3))的复杂度.
    线性算法是比较慢的了.

  3. July 25th, 2009 at 17:08 | #3

    我以为O(n^c)以下就是多项式时间啊…= =

  4. Nimo
    August 5th, 2009 at 03:37 | #4

    很久没有更新了,期待啊

  5. August 17th, 2009 at 11:48 | #5

    @Nimo
    很快就会有更新了.

  6. October 2nd, 2009 at 20:07 | #6

    更新太慢了

    学学matrix67

  7. January 11th, 2010 at 02:18 | #7

    768-bit RSA cracked

  8. January 26th, 2010 at 18:21 | #8

    博客不错!

  1. No trackbacks yet.