迈向成功之路

噢耶

这回咱们聊一聊RSA加密是怎么回事。

RSA是一个非对称加密的系统,意思是说它有一对密钥,也就是一个公钥和一个私钥。你保管好私钥,然后公钥可以随意的分发出去。数据通过公钥加密,私钥解密。反之亦然。

正是由于这种特性,在不泄漏私钥的情况下,中间人只通过公钥无法窃取到信息。

非对称加密的应用场景相当广泛,随处可见,像 https 传输,就是结合了对称和非对称两种加密方法。想知道 https 传输是怎么回事?先按下不表,后文再叙。(意思是还不赶紧关注?)

RSA原理是什么?

这里用一个例子说明RSA的原理,为了方便理解,例子中的数字都很小,但在实际的算法中使用的数字都很大。

假设有这样一个数据,“HELLO”。然后我们有两组数字对(5, 14)和(11, 14),先别急,稍后会解释这两组数字对是怎么得到的。显然对字符串没办法进行数学运算,所以得先把这个数据转化用一些数字表示。先假设HELLO被我们用某种方式转化成了数字2。在实际应用中,这种变换有很多的实现方法,比如采用ascii编码,utf8编码等。

好了万事俱备,现在我们开始加密和解密吧!

整个过程有这么几步:

  1. 加密步骤:对原始数据(在例子中是2),根据公钥(5, 14),进行运算 2 ^ 5 (对原始数据取5次方),再对14取余数,得到加密后的数据是 4。
    公式描述: (2 ^ 5) mod 14 = 4
  2. 解密步骤:对上一步加密过后的数据(4),根据私钥(11, 14),进行和解密步骤相同的运算,得到原始数据 2。
    公式描述: (4 ^ 11) mod 14 = 2

加密和解密的过程如下图所示:


opessl rsa加密用法 rsa加密什么意思_rsa加密原理数学证明

上图就是RSA算法的基本结构。就像上面提到的,公钥和私钥也可以反过来做运算,效果是一样的。

(2 ^ 11) mod 14 = 4(4 ^ 5) mod 14 = 2

在这个算法中最有意思的部分就是这两个数字对(5, 14)和(11, 14)是怎么得到的。显然我们应当探究一下原理。

获取数字对的步骤

  1. 选两个质数,比方说 2 和 7,
    P = 2,Q = 7
  2. P 乘 Q 得到 N,
    N = 2 * 7 = 14
    被加密的数据要小于 N。
  3. 从1到N中,找到所有和 N 互质的数字,记录个数为 L,在这个例子中,总共有6个数,
    L = 6
    还有一种简单方法得到这个数字L,
    L = (Q - 1) * (P - 1) = 6 * 1 = 6
  4. 接下来我们来找密钥,在这个例子中是(5, 14),14是上面第二步得到的数,我们是怎么得到的5呢?
    首先列出从 1 到 L 之间的所有数字。也就是 [2,3,4,5]。然后在这些数字里找到和 L 以及 M 都互质的数字,也就是 5。
    所以一个公钥对是 (5, 14)。
    我们用字母 E 来代表数字 5。
  5. 在解密的过程中,我们选择了数字对(11, 14),14就不必说了,那么数字11是怎么得到的呢?我们先用D来表示这个数字11,接下来我们探究一下如何找到D。
    D 必须满足以下条件:
    (D * E) % L = 1
    我们可以算一下 50 以内,满足这些写条件的数字有哪些:
    [5, 11, 17, 23, 29, 35, 41, 47]。
    这些数字都可以作为解密算子,随便取一个数字试一下,比如17:
    (4 ^ 17) mod 14 = 2
    在这个例子中我们选择了数字 11,(50只是一个数字选取的范围,不参与任何运算),这样我们就得到了数字对(11, 14)。

RSA算法的数学证明

他来了!最有趣的一趴他来了!虽然刚才举例说明了 RSA 算法能对数据进行加密解密,但是我们如何证明 RSA 算法是严格成立的?这时候就得借助一些数学工具了。

首先介绍一点点背景知识:

背景知识1:

欧拉定理:

n 是一个正整数,a 和 n 互质,ϕ(n) 表示 1 到 n 中和 n 互质数的个数,也就是上述步骤3中的 L,那么如下公式成立:


opessl rsa加密用法 rsa加密什么意思_原始数据_02

翻译过来就是:a 的 ϕ(n) 次方对 n 取余数,结果是1。三道杠的等号表示左右两边的数字对 n 取的余数是相等的。

还有亿点点:

背景知识2:

模运算法则:

1. 乘法运算:如果 a 和 b 对 N 取余数相等,那么对于整数k, k*a 和 k*b 对 N 取余数也相等。


opessl rsa加密用法 rsa加密什么意思_rsa加密原理数学证明_03

2. 指数运算:如果 a 和 b 对 N 取余数相等,那么对于正整数k, a 的 k 次方和 b 的 k 次方对 N 取余数也相等。


opessl rsa加密用法 rsa加密什么意思_数据_04

介绍完背景知识,下面开始推导过程:

假设我们的数据是 m,加密过后的数据是 (m ^ D) mod n, 解密过后的数据是 ((m ^ D) ^ E) mod n, 我们的目标就是要证明解密过后的数据和原始数据相等,也就是:((m ^ D) ^ E) mod n 和 m mod n 相等。

推导公式如下:


opessl rsa加密用法 rsa加密什么意思_非对称加密_05

首先,在步骤5中,选取 D 的方式是 (D * E) % L = 1 ,所以,我们将 D * E 改写成 k * L + 1。然后根据欧拉定理 m ^ L 对 n 的余数是 1,将 m ^ L 化简为 1,最终得到结果 (m ^ (D * E)) mod n  = m mod n。证明完毕。

RSA 算法如此精妙,真心敬佩数学先驱和伟人们的智慧。

好了,以上就是文章全部内容,咱们下期再见!

编辑:大柱子

参考:  

1.

https://hackernoon.com/how-does-rsa-work-f44918df914b

2. 

https://brilliant.org/wiki/rsa-encryption/