RSA加密算法

为什么我的眼里常含泪水?因为我有一个算法不会。为了节约点眼泪,今天我们就来介绍著名的RSA加密算法,它是一种非对称加密算法。在公开密钥加密和电子商务中具有广泛应用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。2002年,三人一起因在公钥密码学RSA加密算法取得的杰出贡献而获得计算机领域的最高奖——图灵奖。

《RSA加密算法》

如上图所示,当Alice要向Bob传递一条消息时。在传统的对称加密方案中,Alice所使用的加密秘钥Key和Bob所使用的解密密钥Key应该是相同的,即二者分享相同的秘钥,既可以用于加密也可用于解密。体制的安全完全依赖于秘钥Key。这就带来一个问题,那就是二者之间传递共享秘钥Key本身就非常容易受到攻击。


而在非对称加密(又称公开密钥加密public-key cryptography)体制中,AliceBob所使用的加密和解密秘钥是不同的(或者已知公钥很难推得私钥)。public key 被用来对数据进行加密,private key 被用来对数据进行解密,而且public key 可以在信道上进行传输,而private key 只有Bob知道且他无需与他人分享。非对称加密的算法有很多,而RSA就是其中最具代表性的一个算法。RSA是如何实现非对称加密的呢?它所依赖的一个重要基础就是这样一个事实:“如果 p 和 q是两个非常大的质数,p×q=N,N是非常容易算得的。但是如果已知 N 想算得p和q却是非常非常困难的”。事实上这是一个NP难的问题。


在正式介绍RSA加密算法之前,先给出几个需要用到的背景知识:

欧拉函数(Euler’s totient function):欧拉函数 φ(n) 是小于或等于 n 的正整数中与 n 互质的数的数目。例如 φ(8) =4φ(8)=4{\displaystyle \varphi (8)=4},因为1,3,5,7均和8互质,即小于等于8的正整数中与8互质的数一共有四个。而且可以证明:如果 p 和 q是两个质数,p×q=N,那么 φ(N)=(p-1)(q-1)。例如,p=2, q=3,则N=6, 则φ(6)=(2-1)×(3-1)=2。可以验证,小于等于6的正整数中与6互质的数一共有两个,即1和5。

以及同余的有关知识,可参见http://blog.csdn.net/baimafujinji/article/details/6472129


下面就来看看RSA加密算法到底是如何运作的。

1、公钥和私钥的产生

(1)随意选择两个大的质数 p 和 q, p 不等于 q,计算 N = p q。
(2)根据欧拉函数,求得 r = φ ( N ) = ( p − 1 ) ( q − 1 ) 。
(3)选择一个小于 r 的整数 e ,使 e 与 r 互质。并求得 e 关于 r 的模逆元(Modular multiplicative inverse),命名为 d,也即是求 d 使得 e d ≡ 1 ( mod r ) 。(模逆元存在,当且仅当 e 与 r 互质)

( N , e ) 是公钥, ( N , d ) 是私钥。Bob 将他的公钥 ( N , e ) 传给Alice,而将私钥 ( N , d ) 藏起来。


注意,第(3)步求模逆元的过程其实用到了欧几里得算法,而根据欧几里得原理,其实就是求得一对x和y,使得ex-ry=1。于是有ex=1+ry=1+(p-1)(q-1)y。此处的x就是前面的d,而y在整个算法中此后将不再被需要,可以忽略它。这也是整个RSA算法的核心。


2、加密消息


假设Alice想给Bob送一个消息 m,她知道Bob产生的公钥  N和 e 。使用起先与Bob约好的格式将 m转换为一个小于 N ,且与 N互质的整数 A。假如她的信息非常长的话,她可以将这个信息分为几段,然后将每一段转换为 A。用下面这个公式他可以将 N 加密为 c:

    A^ e ≡ c  (mod N)

计算 c 并不复杂。Alice算出 c  后就可以将它传递给Bob。

3、解密消息


Bob得到Alice的消息 c 后就可以利用私钥 d来解码。用以下这个公式来将 c转换为 A:

    c^ d ≡ A   ( m o d   N )

得到  A 后,可以将原来的信息 m 重新复原。


下面我来举一个具体的例子。假设p=61, q=53,所以有N=61×53=3233。然后根据欧拉函数,求得 r = φ ( N ) = ( p − 1 ) ( q − 1 ) = 60×52=3120。选择一个小于 r 的整数 e ,使 e 与 r 互质,所以可以令e=17。根据欧几里得原理一定找得到

一对x和y,使得ex-ry=1。于是有17×2753-3120×15=1。也就得到了公钥(3233, 17)和私钥(3233, 2753)。

如果Allice想加密的信息A=123,那么密文就为 123^17 855 (mod 3233)。

Bob得到855之后,即可进行解密,855^2753 123 (mod 3233)。


至于为什么这样解密之后就可以得到A,其中用到了数论里的费马-欧拉定理。本文不做详细讨论,有兴趣的读者可以查阅相关资料已了解更多。


(本文完)

    原文作者:算法
    原文地址: https://blog.csdn.net/baimafujinji/article/details/6473008
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞