前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RSA 加密算法主要公式

RSA 加密算法主要公式

作者头像
码农UP2U
发布2020-08-26 15:00:43
3.7K0
发布2020-08-26 15:00:43
举报
文章被收录于专栏:码农UP2U码农UP2U

RSA 是非对称的加密算法,其中它有一些相关的数学公式。让我们从一道题开始了解 RSA 的数学公式。

计算问题

下面是一道关于 RSA 计算的问题,比较简单,可以从这道题来学习和了解关于 RSA 非对称加密算法的相关知识。当然,具体关于 RSA 加密算法的知识不能仅限于以下问题,应该更全面的了解相关的知识。但是下面的问题已经把其中的重点算法表现出来了。

问题:在 RSA 算法中,取密钥 E = 3,D = 7,则明文 6 的密文是()。

RSA 算法的相关公式

下面是关于 RSA 的主要数学公式:

n = p * q

ø(n) = (p - 1) * (q - 1)

ed ≡ 1 mod ø(n)

c = m**e mod n

m = c**d mod n

对上面的公式进行一个简单的说明。

  • 在整个公钥体制中,e 和 n 是公开的,e 是公钥,n 是两个大素数的乘积。
  • m 和 c 分别是明文和密文,这部分在所有的加密算法中都会涉及。
  • 其余的 p、q、d 是保密的,p 和 q 是两个大素数,n 就是通过 p 和 q 相乘得到的,d 是私钥。
  • e 和 d 的关系满足 e * d ≡ 1 mod ø(n) ,也就是说 d 是 e 的乘法逆元,或者说e * d 和 1 同 ø(n) 求模同余。其中 ≡ 是数论中的“求模同余”的意思,而不是“恒等”的意思。

说明:其中两个 ** 是幂次方的意思,这种写法是 Python 语言中的写法,比如 7 ** 3 就是 7 的 3 次方的意思。

将题中的数带入公式

ed ≡ 1 mod ø(n)

3 * 7 ≡ 1 mod ø(n)

21 ≡ 1 mod ø(n)

ø(n) = 20

ø(n) = 2 * 10 = (p - 1) * (q - 1)

p, q = 3, 11

n = p * q = 3 * 11 = 3

上面的步骤通过 ed 得到了 ø(n),而 ø(n) 是 20 的情况下,我们可能算出 p - 1 和 q - 1 是 4 和 5,也可能是 2 和 10。

如果 p - 1 和 q - 1 分别是 4 和 5,那么 p 和 q 就是 5 和 6,而 6 不是素数;

如果 p - 1 和 q - 1 分别是 2 和 10,那么 p 和 q 就是 3 和 11,此时两个数都为素数。

得到 p 和 q 以后,就得到了 n。

在得到 n 以后套用加密算法的公式,即可计算 6 的密文。

c = m**e mod n = 6 ** 3 mod 33 = 18

因此 明文 6 的密文是 18。

其中 6 ** 3 是 6 * 6 * 6,通过降幂可以简化为

6 ** 3

3 = 1 * (2 ** 0) + 1 * (2 ** 1)

t0 = 6 mod 33 = 6

t1 = 6 ** 2 mod 33 = 3

t0 * t1 mod n = 6 * 3 mod 33 = 18

可以在 Python 的交互环境中进行验算:

代码语言:javascript
复制
>>> 6 ** 3 % 33
18

将密文进行解密验算

除了用 Python 验算以外,用解密算法对密文 18 进行解密,如果得到明文 6,也说明上面的计算是正确的。

m = c ** d mod n = 18 ** 7 mod 33 = 6

其中 18 ** 7 如果使用 7 个 18 相乘来手动计算,是一件麻烦的事情,所以这里使用降幂的方式来进行手动计算,是非常有必要的。

18 ** 7

7 = 1 * (2 ** 0) + 1 * (2 ** 1) + 2 * (2 ** 2)

t0 = 18 mod 33 = 18

t1 = 18 ** 2 mod 33 = 27

t2 = 27 ** 2 mod 33 = 3

t0 * t1 * t2 mod n = 18 * 27 * 3 mod 33 = 6

通过降幂计算,18 ** 7 计算起来只用了 4 步就完成了,数值也没有太大。

因此,密文 18 解密后是 6

在 Python 下进行验算:

代码语言:javascript
复制
>>> 18 ** 7 % 33
6

上面就是 RSA 的关键相关的公式,其中虽然 n 是公开的,但是实际 n 是两个非常大的素数相乘得到的(题目中的 3 和 11 这种素数太小了),很难通过 n 分解出两个大的素数,因此保证了其安全性。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农UP2U 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档