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