Теоретически так быть не должно. Алгоритмы шифрования и дешифрования практически идентичны. Дано:
d = decryption key
e = encryption key
n = modulus (product of primes)
c = encrypted code group
m = plaintext code group
Тогда:
- Шифрование c i = m i e (мод n)
- Расшифровка m i = c i d (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-значными числами мы должны быть достаточно терпеливыми, чтобы найти пару, для которой расшифровка будет (даже близка) такой же быстрой, как и шифрование.