Bob*_*Bob 1 encryption cryptography rsa
我已经实现了一个主要功能的 RSA 加密。它随机生成 2048 位素数p和q ( n = pq ) 并且大多数时候我得到的值d与预期的一样相对较小。值 d 用于加密M^d mod n。
但是,有时我得到的d值是负数,这在 RSA 中通常是不受欢迎的。经过一些研究,我发现一个常见的解决方案是在这种情况下简单地添加phi (phi = (p-1)(q-1)) 。
d = d % phi;
if(d < 0)
d += phi;
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我最终得到的d和n一样大(超过 2048 位)。这似乎太大而无用。是否有我遗漏的东西,或者d的值实际上可以接受?
加密 M^d mod n。
您要么使用会混淆人们(也可能是您自己)的非标准符号,要么对 RSA 的工作方式感到困惑。加密使用公共指数,通常写作e。解密使用通常写成d的私有指数。一旦不使用d加密。任何人都可以加密;解密是需要私人秘密的。
我得到了一个相对较小的值 d 正如预期的那样
不,预计不会获得较小的d值。公共指数e通常选择为常数;原则上,任何介于 2 和n -1之间的奇数都可以,但您可以选择一个小数位,将几位设置为 1 以提高性能(3 和 65537 是最流行的值)。私有指数d是从素数计算出来的,预计不会很小。它应该几乎和n一样大。如果d太小,那么系统将是不安全的(如果d小到可以猜到的话,显然是不安全的,并且甚至还有更微妙的数学漏洞)。
实际上,将某些东西提升到 1024 位功率似乎很荒谬。
不,这就是 RSA 的工作方式。(除了现在 1024 位太小,2048 是保证良好安全性的最小值。)
有时我得到的 d 值为负
指数d和e是模phi ( n ) 的值,这意味着您可以添加或减去phi ( n )的倍数,并且不会改变计算。但是,使用负值是非常不寻常的。通常所有计算都在 [0, n -1]范围内。如果你得到一个负值,你在某个地方做了一些不寻常的事情。