RSA(Rivest-Shamir-Adleman)公开密钥密码系统是一种非对称加密算法,它使用两个密钥:一个公钥用于加密,一个私钥用于解密。RSA算法的安全性基于大素数分解的困难性,即给定一个大合数,要找到它的所有质因数是非常困难的问题。
RSA算法的运作过程如下:
- 选择两个不相等的大素数p和q。
- 计算它们的乘积n=p*q,n被称为模数。
- 计算欧拉函数φ(n)=(p-1)(q-1)。
- 选择一个整数e,使得1<e<φ(n),且e与φ(n)互质。
- 计算e关于φ(n)的模反元素d,即d ≡ e^(-1) (mod φ(n))。
- 公钥是(n, e),私钥是(d, n)。
在RSA中,加密时使用公钥(n, e)对明文m进行加密得到密文c,计算公式为:c ≡ m^e (mod n)。 解密时使用私钥(d, n)对密文c进行解密得到明文m,计算公式为:m ≡ c^d (mod n)
注:1.两个整数a和b被称为互质(或互素),如果它们的最大公因数(最大公约数)为1
2.
"≡" 是数学符号中的一个等价关系符号,表示两个数或表达式在模运算下等价。具体来说,对于整数a、b和模数m,如果它们满足以下条件: a ≡ b (mod m) 那么这意味着a和b在模m下具有相同的余数。
例如,如果我们有a = 8、b = 18和m = 5,我们可以表示为: 8 ≡ 18 (mod 5) 因为8和18在模5下都有相同的余数3。
在RSA算法中,我们使用模幂运算来进行加密和解密操作。所以,当我们说c ≡ m^e (mod n),意味着密文c与明文m经过指数e的幂运算后,在模n下具有相同的余数
既然懂了,那就刷几道题练练手吧
以下是几道与RSA密钥相关的题目,帮助你理解RSA算法:
- 已知两个质数p=11, q=13,请计算n和φ(n)的值。
- 在RSA算法中,如果选择e=7,那么对应的私钥d是多少?(已知φ(n)=120)
- 给定n=77, e=7,加密明文m=20,求密文c的值。
- 给定n=187, d=23,解密密文c=128,求出原始的明文m。
解答:
-
计算n的值: n = p * q = 11 * 13 = 143 计算φ(n)的值: φ(n) = (p - 1) * (q - 1) = 10 * 12 = 120
2. 在RSA算法中,当选择e=7时,我们需要计算对应的私钥d的值。
计算私钥d的值: 根据公式 d ≡ e^(-1) (mod φ(n)),即 d ≡ 7^(-1) (mod 120),
需要找到一个整数d,满足 (7 * d) % 120 = 1。
解方程 (7 * d) % 120 = 1,得到d = 103。
所以,当e=7时,对应的私钥d为103。
3.给定n=77, e=7,加密明文m=20,我们可以计算出密文c的值。
- 加密明文m得到密文c: c ≡ m^e (mod n) c ≡ 20^7 (mod 77) 使用模幂运算法计算:c ≡ 12800 (mod 77) 所以,加密后的密文c为12800。
4. 给定n=187, d=23,解密密文c=128,我们可以计算出原始的明文m的值。
- 解密密文c得到原始明文m: m ≡ c^d (mod n) m ≡ 128^23 (mod 187) 使用模幂运算法计算:m ≡ 20 (mod 187) 所以,解密后的原始明文m为20。