RSA加密算法
欢迎访问本人私人博客,审核未通过文章将发布至个人博客:www.xuanworld.top
一、RSA简单介绍
RSA密码体制是根据PKC算法,并由美国麻省理工学院(MIT)的研究小组提出的,该体制的名称是用了3位作者Rivest,Shamir,Adleman英文名字的第一个字母拼合而成。该体制的理论基础是数论中的下述论断:要求得到两个大素数(如大到100位)的乘积在计算机上很容易实现,但要分解两个大素数的乘积在计算机上几乎不可能实现,即为单向函数
介绍来自度娘~
二、加密过程
- 选择一对不相等且足够大的质数,列如:选z1和z2为较大的两个质数
- 计算z1和z2的乘积,n=z1*z2
- 计算n的欧拉函数 ϕ ( n ) = ( z 1 − 1 ) ∗ ( z 2 − 1 ) \phi(n)=(z1-1)*(z2-1) ϕ(n)=(z1−1)∗(z2−1)
- 选一个与 ϕ ( n ) \phi(n) ϕ(n)互质的整数e,且 e < ϕ ( n ) e<\phi(n) e<ϕ(n)
- 算出e对于 ϕ ( n ) \phi(n) ϕ(n)的模反元素d
- 公钥:KU=(e,n),e和n是成对的,共同组成公钥
- 私钥:KR=(d,n),同上
使用方法:
明文M 加密 M e m o d n = C M^e\mod\ n =C Memod n=C
密文C 解密 C d m o d n = M C^d\mod\ n=M Cdmod n=M
三、概念解释
欧拉函数:
ϕ ( n ) \phi(n) ϕ(n)是小于n的正整数中与n互质的数的数目,注意:是互质数的个数,不是质数的个数
如果z1、z2都是质数,则 ϕ ( n ) = ( z 1 − 1 ) ∗ ( z 2 − 1 ) \phi(n)=(z1-1)*(z2-1) ϕ(n)=(z1−1)∗(z2−1)
互质
指公约数只有1的两个整数,叫做互质整数。
模反元素
如果两个正整数互质,如e和 ϕ ( n ) \phi(n) ϕ(n),那么一定可以找到一个整数d,使e*d-1被 ϕ ( n ) \phi(n) ϕ(n)整除,d就叫e的模反元素。
可写作:e*d-1=k* ϕ ( n ) \phi(n) ϕ(n)
或:e*d mod ϕ ( n ) = 1 \phi(n)=1 ϕ(n)=1
四、举例
例题一
RAS算法中,若选取两奇数p=5,q=3,公钥e=7,则私钥d为多少?
解
- 由p与q计算n,可得n=15
- 计算欧拉函数,得 ϕ ( n ) = ϕ ( 15 ) = 8 \phi(n)=\phi(15)=8 ϕ(n)=ϕ(15)=8
- 由e*d-1=k*8,k为正整数,得d=7
例题二
已知:
p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537
求:
d=?
解
import gmpy2 as gm
p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537
d = gm.invert(e,(p-1)*(q-1)) #invert函数第一个参数为e,第二个为$\phi$
print(d)
验证
import gmpy2 as gm
p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537
d = gm.invert(e, (p - 1) * (q - 1))
print("d:", d)
M = gm.mpz(114514) # mpz将其压缩
C = pow(M, e, p * q)
print("C", C)
C = gm.mpz(C)
m = pow(C, d, p * q)
print("更改后", m)
成功输出加密文本:114514
验证成功!
结果
来我博客!来我博客!www.xuanworld.top