公钥密码算法——RSA及其数论基础

RSA是一种公钥密码算法,被用于公钥密码和数字签名。

一、RSA加密

在RSA中,明文、密钥和密文都是数字,加密过程可以用下列公式来表达

密文=明文 E mod N (RSA加密)

RSA的密文是对代表明文的数字的E次方求mod N的结果。换句话说,就是将明文给自己求E次方,得到的结果除以N求余数,得到的余数就是密文。这里的E和N就是RSA加密的密钥,E和N的组合就是公钥

二、RSA解密

明文=密文 D mod N  (RSA解密)

这里的N和加密过程中的N是相同的

 三、生成密钥对

由于E和N是公钥,D和N是私钥,求E、D和N这三个数就是生成密钥对,生成步骤如下:

(1) 求 N 

(2) 求 L (L是仅在生成密钥对的过程中使用的数)

(3) 求 E

(4) 求 D

求的过程中,我们会用到很多的数学公式

1、求N

首先准备两个很大的质数p和q,如果太小,密码则容易破译,但是太大计算时间也会变长,假设p和q的大小都是512比特,相当于155位的十进制数字。求这样大的质数,需要通过伪随机数生成器生成一个512比特大小的数,再判断这个数是不是质数。

准备好后,将两个数相乘,结果就是数N

N =p×q

2.求L

L 是 p-1 和 q+1 的最小公倍数

L = lcm(p-1,q-1)

3.求E

E是一个比1大,比L小的数。此外,E和L的最大公约数必须是1(保证在解密时一定存在D),通过伪随机数数生成器生成在1<E<L范围的候选数,再判断E和L是否互质。求最大公约数可以使用欧几里得的辗转相除法

4.求D

D是由E计算得到的。D、E和L之间具备以下关系:

1<D<L

E×D mod L=1

上述关系整理如下

 RSA中的数论基础

1、模运算

RSA 的模运算涉及到两个关键的计算:模幂运算和模逆运算。

  1. 模幂运算:在 RSA 加密过程中,用公钥对明文进行加密。公钥包括模数 n 和指数 e。模幂运算是指将明文 m 的 e 次方对模数 n 取余,即计算 c = m^e mod n。这个运算可以使用快速幂算法来进行高效计算,以避免大数的乘法运算。

  2. 模逆运算:在 RSA 解密过程中,使用私钥对密文进行解密。私钥包括模数 n 和指数 d。模逆运算是指找到一个整数 x,使得 (x * e) mod φ(n) = 1。其中,φ(n) 是欧拉函数,表示与 n 互质的数的个数。这个整数 x 就是 e 在模 φ(n) 下的逆元。然后,对密文进行模幂运算,计算出明文 m = c^d mod n。

 模运算的性质包括:

  • (a + b) mod n = ((a mod n) + (b mod n)) mod n
  • (a - b) mod n = ((a mod n) - (b mod n)) mod n
  • (a * b) mod n = ((a mod n) * (b mod n)) mod n

在进行模逆运算时,要确保指数 e 和模数 n 是互质的,这样才能找到逆元。否则,解密过程可能无法成功。 

2、欧拉函数

欧拉函数通常用符号 φ(n) 表示,它是一个与正整数 n 相关的函数,表示小于或等于 n 的正整数中与 n 互质的数的个数。

对于一个素数 p,φ(p) = p - 1。这是因为对于素数 p,小于 p 的正整数都与 p 互质。

对于两个不同的素数 p 和 q,φ(p * q) = (p - 1) * (q - 1)。这是因为 p 和 q 是互质的,所以小于 p * q 的正整数中,与 p 或 q 不互质的数的个数等于小于 p 的正整数的个数加上小于 q 的正整数的个数,即 (p - 1) + (q - 1) = p * q - p - q + 1 = p * q - (p + q) + 1 = p * q - (p * q - 1) = 1。

3、同余式

同余式是指具有相同余数的两个整数之间的等式关系。在数论中,同余式是模运算的一种表达方式。

给定整数 a、b 和正整数 m,我们说 a 与 b 在模 m 下同余,记作 a ≡ b (mod m),如果 a 和 b 除以 m 得到的余数相同。换句话说,a 和 b 之间的差值可以被 m 整除,即 (a - b) 是 m 的倍数。

形式化地表示为:a ≡ b (mod m) 当且仅当 a mod m = b mod m。

例如,考虑同余式 17 ≡ 5 (mod 6)。这意味着 17 和 5 在模 6 下具有相同的余数,即它们与 6 的余数都是 5。

同余式具有一些重要的性质,例如:

  1. 自反性:a ≡ a (mod m)。
  2. 对称性:如果 a ≡ b (mod m),则 b ≡ a (mod m)。
  3. 传递性:如果 a ≡ b (mod m) 且 b ≡ c (mod m),则 a ≡ c (mod m)。

4.逆元

逆元是指在模运算下,一个整数与另一个整数的乘积恰好等于模数的余数为 1。如果 a 和 m 是整数,并且满足条件 (a * x) mod m = 1,其中 x 是整数,那么我们称 x 是 a 在模 m 下的逆元。

逆元的存在性取决于 a 和 m 是否互素(即它们没有共同的因子)。如果 a 和 m 互素,那么 a 在模 m 下一定存在逆元。如果 a 和 m 不互素,那么 a 在模 m 下不存在逆元。

要计算一个整数 a 在模 m 下的逆元,可以使用扩展欧几里得算法或 费马小定理等方法。

欧几里得算法:辗转相除法求最大公约数,步骤为:

  1. 给定两个整数 a 和 b,其中 a >= b。
  2. 用 b 去除 a,得到商 q 和余数 r,即 a = b * q + r。
  3. 如果 r 等于 0,则 b 是最大公约数,算法结束。
  4. 如果 r 不等于 0,则将 b 的值更新为 r,同时将 a 的值更新为 b,然后返回第 2 步。

例如,计算 48 和 18 的最大公约数:

  1. 48 ÷ 18 = 2 余 12
  2. 18 ÷ 12 = 1 余 6
  3. 12 ÷ 6 = 2 余 0

由于最后的余数为 0,所以最大公约数为 6。

 费小马定理:如果 p 是一个质数,并且 a 是不被 p 整除的整数,则有 a^(p-1) ≡ 1 (mod p)。
其中,a^(p-1) 表示 a 的 p-1 次方,≡ 表示模运算下的同余关系。

 根据费马小定理,我们可以使用模幂运算来计算模数下的乘法逆元。假设 a 是一个整数,p 是一个质数,且 a 和 p 互素,那么 a 在模 p 下的乘法逆元为 a^(p-2) (mod p)

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值