【问题标题】:RSA encryption: negative d solution seems too big to be usableRSA 加密:负 d 解决方案似乎太大而无法使用
【发布时间】:2021-01-11 02:25:48
【问题描述】:

我已经实现了一个主要功能的 RSA 加密。它随机生成 2048 位素数 pq (n = pq),大多数时候我得到一个相对较小的值 d 符合预期。值 d 用于加密 M^d mod n.

但是,有时我得到的 d 值为负数,这在 RSA 中通常是不受欢迎的。经过一番研究,我发现一个常见的解决方案是在这种情况下简单地添加 phi (phi = (p-1)(q-1))。

d = d % phi;
if(d < 0)
    d += phi;

但是当我这样做时,我最终得到的 dn 一样大(超过 2048 位)。这似乎太大而无用。有没有我遗漏的东西,或者 d 的值实际上可以接受吗?

【问题讨论】:

  • 嗯,这似乎是添加 phi 的重点。 (phi和n是一回事吗?)
  • 是的,从逻辑上讲,这是完全合理的,但在实践中将某些东西提高到 1024 位功率似乎很荒谬。 Phi = (p-1)(q-1)
  • 那怎么不行呢?
  • 就像我说的,我担心 d 太大会使其无法用于加密,所以我想知道这种事情是否真的正常。
  • 为什么不实用?我将假设数学工作正常,因为我不知道 RSA 的详细信息。

标签: encryption cryptography rsa


【解决方案1】:

加密 M^d mod n.

您要么使用了非标准的符号,这会让人们(也可能你自己)感到困惑,要么对 RSA 的工作原理感到困惑。加密使用 public exponent,通常写成 e。解密使用 private exponent,通常写成 d。一次不使用d加密。任何人都可以加密;解密是需要私人秘密的。

如预期的那样,我得到了一个相对较小的值 d

不,不希望获得较小的 d 值。公共指数 e 通常选择为常数;原则上,任何介于 2 和 n-1 之间的奇数都可以,但您可以选择一个将少数位设置为 1 的小数字以提高性能(3 和 65537 是最流行的值)。私有指数 d 是从素数计算出来的,预计不会很小。它应该几乎和 n 一样大。如果 d 太小,那么系统就会不安全(如果 d 太小以至于可以猜到,那么显然是不安全的,而且除此之外还有更微妙的数学漏洞) .

在实践中将某些东西提高到 1024 位的功率似乎很荒谬。

不,这就是 RSA 的工作方式。 (除了现在 1024 位太小,2048 是最低的安全性。)

有时我得到的 d 值为负

指数 de 是模 phi(n) 的值,这意味着您可以添加或减去 phi(n) 的倍数,它不会改变计算。但是,使用负值是非常不寻常的。通常所有计算都保持在 [0,n-1] 范围内。如果你得到一个负值,你在某处做了一些不寻常的事情。

【讨论】:

  • “如果你得到一个负值,你在某处做了一些不寻常的事情”。嗯,有点。如果你使用扩展欧几里得算法而不做修改来找到 e mod phi 的倒数,你可以得到一个负数。这就是为什么专门针对 computing the inverse 的算法会考虑这一点。
【解决方案2】:

我无法回答您问题的技术部分,但遇到了同样的问题,如果 我们有

ed = 1 (modulo phi)

比差是phi的倍数:

ed - 1 = Q*phi

所以我们可以在两边加上e*phi

e(d + phi) - 1 = (Q + e)*phi

e(d + phi) = 1 (modulo phi)

因此当d为负数时,我们可以加上phi使其为正数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多