理论上,不必如此。加密和解密算法本质上是相同的。给定:
d = decryption key
e = encryption key
n = modulus (product of primes)
c = encrypted code group
m = plaintext code group
然后:
- 加密 ci = mie (mod n)
- 解密 mi = cid (mod n)
求幂的正常算法是迭代的,因此所用时间取决于指数的大小。在大多数情况下,解密密钥(通常大大)大于加密密钥。
虽然可以扭转这种情况。仅举一个玩具示例,请考虑:
p=17
q=23
n=391
以下是这对特定素数的一些有效加密/解密密钥对的列表:
e = 17, d = 145
e = 19, d = 315
e = 21, d = 285
e = 23, d = 199
e = 25, d = 169
e = 27, d = 339
e = 29, d = 85
e = 31, d = 159
e = 35, d = 171
e = 37, d = 333
e = 39, d = 343
e = 41, d = 249
e = 43, d = 131
e = 45, d = 133
e = 47, d = 15
e = 49, d = 273
e = 51, d = 283
e = 53, d = 93
e = 57, d = 105
e = 59, d = 179
在这 20 个密钥对中,只有 一个 的解密密钥小于加密密钥。在其他情况下,解密密钥的大小从略低于两倍到几乎 17 倍不等。当然,当模数像这样很小的时候,生成很多密钥对是快速和容易的,所以找到一个小的解密密钥是相当容易的——但是,如果使用真正的 RSA 密钥,它就不是那么简单了,而且我们通常只接受我们找到的第一对。正如您从上面的列表中看到的那样,在这种情况下,您很可能最终得到一个比加密密钥大得多的解密密钥,因此解密最终会比加密慢。在处理约 100 位数字时,我们必须非常耐心地找到解密(甚至接近)与加密一样快的一对。