RSA计算器


结果

RSA

输入质数p、q,选择e,输入消息进行加密或解密。

理解RSA公钥密码学

RSA加密计算器(也称为RSA密钥生成器或RSA算法计算器)提供了一个一站式环境,用于在线探索公钥密码学。该工具可让您生成安全密钥对、对数字消息进行加密和解密,并检查RSA算法背后的数学原理。在接下来的章节中,我们将解释RSA的工作原理、如何生成密钥、如何加密和解密,以及实际中需要注意的安全问题。

非对称加密与RSA协议

RSA(Rivest–Shamir–Adleman)是由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出的一种非对称加密方案。在非对称(或公钥)密码学中,每一方都拥有一对密钥:公钥可自由分发,私钥则保密保存。与必须交换单一共享密钥的对称密码学不同,RSA从不要求传输解密密钥,这种设计从本质上降低了密钥截获的风险。

RSA的安全性依赖于分解两个大素数之积的难度。给定一个合数 N=p×qN = p \times q(其中 pp 和 qq 为素数),当素数足够大且大小相近时,找出 pp 和 qq 在计算上是不可行的。截至2020年初,被分解的最大RSA数(RSA‑250)估计需要2700年的CPU时间,这充分说明了正确配置的RSA对经典计算机的抵抗能力。

RSA密钥生成步骤

创建RSA密钥对遵循一个明确的顺序:

  1. 选择两个素数 pp 和 qq,位长相近。
  2. 计算它们的乘积 N=p×qN = p \times q。该值是公钥的一部分。
  3. 计算Carmichael函数 λ(N)=lcm⁡(p−1,q−1)\lambda(N) = \operatorname{lcm}(p-1, q-1)。
  4. 选择一个加密指数 ee,满足 1<e<λ(N)1 < e < \lambda(N) 且 gcd⁡(e,λ(N))=1\gcd(e, \lambda(N)) = 1。典型值为 e=3e = 3、1717 或 6553765537。
  5. 确定解密指数 dd,作为 ee 模 λ(N)\lambda(N) 的模逆元:e×d≡1(modλ(N)).e \times d \equiv 1 \pmod{\lambda(N)}. 扩展欧几里得算法可以高效计算 dd。

公钥是配对 (N,e)(N, e);私钥是 dd。所有其他中间值(p,q,λ(N)p, q, \lambda(N))必须保密。

加密和解密的工作原理

密钥就绪后,加密和解密消息使用模幂运算:

  • 加密:发送方将明文转换为整数 MM(满足 0≤M<N0 \le M < N),然后计算密文: C≡Me(modN).C \equiv M^{e} \pmod{N}.
  • 解密:接收方通过计算恢复原始消息: M≡Cd(modN).M \equiv C^{d} \pmod{N}.

两种运算都可以通过重复平方高效实现,即使对于大的密钥大小也是可行的。

安全考虑与最佳实践

尽管RSA在数学上是健壮的,但某些实现陷阱可能会损害其安全性:

  • 确定性加密:没有随机化,相同的明文总是产生相同的密文。为了解决这个问题,RSA与填充方案(如OAEP)一起使用,这些方案在加密前添加随机字节。
  • 小指数风险:加密指数 e=3e = 3 可能使密文易受攻击,特别是当同一消息发送给多个接收者时。像 6553765537 这样的指数更安全。
  • 填充预言攻击:如果系统泄露解密后的填充是否有效,攻击者可以迭代地恢复明文。实现必须避免这种预言。
  • 性能开销:与对称密码相比,RSA计算成本较高;在实际中,它通常用于加密对称密钥,然后由对称密钥处理批量数据。

量子计算的兴起可能最终挑战RSA的安全性,从而推动了对后量子密码学的兴趣。尽管如此,对于适当选择的参数和当前技术而言,RSA仍然是一个值得信赖的构建模块。

使用此RSA计算器

此在线RSA计算器以交互方式实现整个算法:

  1. 在输入字段中输入两个素数(pp 和 qq)。您可以使用内置的素数检查工具来找到合适的候选数。
  2. 计算器自动计算 NN 和 λ(N)\lambda(N)。
  3. 从下拉菜单中选择一个加密指数 ee(提供了常用预置值)。
  4. 私钥指数 dd 即时生成。
  5. 要加密,输入一个数字消息(必须小于 NN)并点击加密;密文将显示出来。
  6. 要解密,粘贴密文并点击解密;如果正确的私钥处于活动状态,原始明文将显示。

所有中间值都会显示,方便您验证每一步。

一个完整的数字示例

让我们通过一个虽小但足够真实的场景来演示算法,所用素数足够大以说明原理:

  • 设置 p=89p = 89 和 q=67q = 67。
  • 计算 N=89×67=5963N = 89 \times 67 = 5963。
  • 计算 λ(N)=lcm⁡(89−1,  67−1)=lcm⁡(88,66)=264\lambda(N) = \operatorname{lcm}(89-1, \; 67-1) = \operatorname{lcm}(88,66) = 264。
  • 选择加密指数 e=17e = 17。
  • 求 dd 作为 1717 模 264264 的逆:d=233d = 233,因为 17×233=3961≡1(mod264)17 \times 233 = 3961 \equiv 1 \pmod{264}。

现在,取明文 M=1415M = 1415(π\pi 的前四位数字)。加密它:

C≡141517≡1032(mod5963).C \equiv 1415^{17} \equiv 1032 \pmod{5963}.

使用私钥指数解密密文:

M≡1032233≡1415(mod5963).M \equiv 1032^{233} \equiv 1415 \pmod{5963}.

恢复的消息与原文匹配,证明密钥对工作正常。

结论

RSA加密计算器提供了一种实践公钥密码学的方式。通过调整素数和指数,您可以观察每个参数如何影响生成的密钥以及加密解密循环。虽然示例为了清晰使用了小数字,但实际应用依赖更大的素数(例如2048位)来达到高安全级别。始终使用适当的填充,并遵循当前的密码学建议,以保持通信安全。

常见问题

1. 如何使用计算器生成RSA密钥?

输入两个素数p和q,然后从下拉菜单中选择一个加密指数e。计算器会自动计算N、λ(N)和私钥指数d。公钥是(N, e),私钥是d。

2. 为什么明文消息必须小于N?

因为RSA加密使用模N的模幂运算。如果消息的整数表示大于或等于N,运算会丢失信息。在这种情况下,消息应分割成更小的块,每个块分别加密。

3. 填充在RSA加密中起什么作用?

RSA加密是确定性的:相同的明文和密钥总是产生相同的密文。填充在加密前插入随机字节,确保相同的消息产生不同的密文,并有助于防止模式分析攻击。

4. 为什么有时避免使用像e=3这样的小值?

非常小的加密指数会使密文易受攻击,特别是当同一明文在多个公钥下加密时。在实践中,像65537这样的大值更受青睐,因为它们避免了这些已知的弱点,同时仍然保持加密效率。

5. RSA算法今天仍然安全吗?

当使用足够大的密钥(至少2048位)和适当的填充正确实施时,RSA被认为对经典计算机是安全的。然而,量子计算的出现最终可能击败RSA,这就是为什么后量子密码学方法正在研究中的原因。

使用方法

  1. 输入两个质数p和q。
  2. 从下拉菜单中选择e。
  3. 输入一个数字消息(小于N),点击“计算”进行加密,或粘贴加密消息进行解密。