RSA(Rivest-Shamir-Adleman)是一种基于大素数分解难题的非对称加密算法。它采用了两个密钥,一个是公钥用于加密,另一个是私钥用于解密。公钥可以公开,而私钥必须保密。
-
生成密钥对
首先,选择两个不同的大素数,记作 p 和 q。计算它们的乘积,得到 n = p * q,n 将用作加密和解密的模数。
然后选择一个指数 e,它必须满足 $ 1 < e < \phi(n) $(这里 $ \phi(n) = (p-1)(q-1) $ 是欧拉函数)。e 必须与 (\phi(n)) 互质。
接下来,计算私钥 d,它是 e 的模 (\phi(n)) 的逆元。即: $ e \cdot d \equiv 1 \ (\text{mod} \ \phi(n)) $ (相当于 $ e \cdot d \ \text{mod} \ \phi(n) = 1 \ \text{mod} \ \phi(n) $ )
在数学中,对于一个元素 a,如果存在另一个元素 b,使得 a * b 与单位元(通常是1)相等,那么 b 就是 a 的逆元。通常用 $ a^{-1} $ 表示。
最终,我们得到了公钥 (e, n) 和私钥 (d, n)。
-
加密
加密者使用接收者的公钥 (e, n) 将明文消息 m 加密成密文 c。加密的过程是 $ c \equiv m^e \ (\text{mod} \ n) $。
-
解密
接收者使用私钥 (d, n) 将密文 c 解密成明文消息 m。解密的过程是 $ m \equiv c^d \ (\text{mod} \ n) $。
假设 p = 11, q = 17, 则 n = p * q = 187。
此时我们选择 e = 7(它必须是 1 到 (p-1)(q-1) 之间且与 (p-1)(q-1) 互质的数),然后计算 e * d mod (p-1)(q-1) = 1 mod (p-1)(q-1),解得 d = 23。
具体计算: 将 e = 7, p - 1 = 10, q - 1 = 16 带入等式 e * d mod (p-1)(q-1) = 1 mod (p-1)(q-1) : 7 * d mod 160 = 1 mod 160 => d = 23
公钥 (e, n) = (7, 187) 和私钥 (d, n) = (23, 187),以及要加密的明文 m = 2。
加密过程:
$ c \equiv 2^7 \ (\text{mod} \ 187) \equiv 128 \ (\text{mod} \ 187) $
所以,密文为 128。
解密过程:
$ m \equiv 128^{23} \ (\text{mod} \ 187) $
这是一个复杂的计算,通常需要借助计算机程序来执行。最终的解密结果应该是 2。
RSA加密算法是保护信息安全的重要工具之一。通过理解其基本原理和运作方式,我们能够更好地利用它来保护我们的敏感信息,确保其不被未经授权的访问所泄露。同时,也要注意保护好私钥,避免泄露给不信任的第三方。