RSA算法简介

简介

对称加密

1976年以前,所有的加密方法都是同一种模式:

  1. a选择某一种加密规则,对信息进行加密;
  2. b使用同一种规则,对信息进行解密。

这种加密模式有一个最大缺点:
加密和解密使用同样的规则(密钥),
a必须把密钥告诉b,否则无法解密。
保存和传递密钥,就成了最头疼的问题。

非对称加密

后来出现一种 ”Diffie-Hellman密钥交换算法“,它的加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。

  1. b生成公钥pk跟私钥sk,公钥公开任何人都可以获得,私钥保密。

  2. a 获取b的公钥,然后用b的公钥进行信息加密。

  3. b得到加密后的信息,用自己的私钥解密。

所以如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。

RSA算法一直是最广为使用的非对称加密算法。

RSA算法原理

根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

举个例子:
定义函数f为 f(p, q) = pq, pq是两个大质数,那么我们很容易通过pq得到 f(p, q)
如果:
f(p, q) = 32213114911055087, 求 p, q.
这样就裂开了,目前还没有有效算法。

RSA算法流程

首先看一下RSA的密码体制,课本上乱七八糟的字母看不懂也没关系,至少对这些字母有个印象。
在这里插入图片描述
同样的,我们通过一个例子来引入:

假设Alice要与Bob进行加密通信,注意重点来了,Alice首先生成自己的公私钥对 pk, sk

1.密钥生成

  1. 随机选择两个不相等的质数p和q,(这两个质数越大,就越难破解),我们为了方便举例,选取5和11

  2. 计算p和q的乘积n 和欧拉函数φ(n)
    n = 5×11 = 55
    φ(n) = (p-1)(q-1) = 40

  3. 随机选择一个整数b,条件是1< b < φ(n),且b与φ(n) 互质…我们就选择3吧,方便计算

  4. 计算b对于φ(n)的模反元素a
    a ≡ b-1 (mod φ(n)) ≡ 3-1 mod 40

    即:a×3 ≡ 1 mod 40
    (有小伙伴可能不知道怎么得来的。。a = n×40 + 3-1 ,等式两边同乘3 即 3a = 3n × 40 + 1)

    这个时候就又到了我们熟悉的拓展欧几里德求解不定方程。。不熟的参考上一篇欧几里德算法、拓展欧几里德、中国剩余定理多练习一下。

    a×3 ≡ 1 mod 40 =>> 3a - 40y = 1

    得: a = 27, y = 2 是上述不定方程的一组解

  5. 好了,到此整理一下Alice算的结果:
    公钥pk:(n = 55, b = 3)
    私钥sk:(p = 5,q = 11, a = 27)

    (实际应用中公钥和私钥的数据都采用ASN.1格式表达)

至此,我们的公私钥对生成阶段结束,下面开始加密

2. 加密和解密

假设Bob要向Alice发送加密信息x,他就要用Alice的公钥 (n, b) 对x进行加密。
重点:x 必须是整数(字符串可以取ascii值),且x必须小于n。

这里我们例子中的n相对较小,所以我们需要将明文拆开进行多次加密:

假设我们加密明文 987654
一个一个来:
Ek(x) = xb (mod n) = 93 mod 55 = 14
Ek(x) = xb (mod n) = 83 mod 55 = 17
Ek(x) = xb (mod n) = 73 mod 55 = 13
Ek(x) = xb (mod n) = 63 mod 55 = 51
Ek(x) = xb (mod n) = 53 mod 55 = 15
Ek(x) = xb (mod n) = 43 mod 55 = 9

最终明文结果为:14 17 13 51 15 9

然后 Alice用自己的私钥进行解密:
Dk(y) = ya (mod n) =1427 mod 55 = 9
Dk(y) = ya (mod n) =1727 mod 55 = 8
Dk(y) = ya (mod n) =1327 mod 55 = 7
Dk(y) = ya (mod n) =5127 mod 55 = 6
Dk(y) = ya (mod n) =1527 mod 55 = 5
Dk(y) = ya (mod n) =927 mod 55 = 4

计算出明文:987654

欢迎关注公众号:带问号的小朋友

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值