Почему процесс расшифровки RSA занимает больше времени, чем процесс шифрования? - PullRequest
10 голосов
/ 23 февраля 2010

У меня есть идея, что это связано с некоторыми сложными вычислениями, но я хочу знать, что именно происходит, что занимает больше времени, чем соответствующий процесс шифрования. Любая ссылка на веб-страницу или статью будет очень полезна.

Спасибо

Спасибо за ответы, еще одно сомнение, как насчет подписи и проверки? Будет ли эта разница во времени для подписи и проверки? Ex. Подписание требует больше времени, чем проверка?

Ответы [ 8 ]

14 голосов
/ 23 февраля 2010

Давайте назовем n , d и e модулем RSA, частным показателем и открытым показателем, соответственно. Скорость расшифровки RSA пропорциональна (log d) (log n) 2 (то есть квадратична по длине модуля и линейна по длине частного показателя). Аналогично, скорость шифрования RSA пропорциональна (log e) (log n) 2 . Держатель закрытого ключа также знает факторизацию n , которую можно использовать для ускорения работы с закрытым ключом примерно в 4 раза (с помощью Китайской теоремы об остатках ). Подробнее об используемых алгоритмах см. Справочник по прикладной криптографии , особенно главу 14 («Эффективная реализация»).

Для надлежащей безопасности частный показатель ( d ) должен быть большим; было показано, что если он меньше, чем 29% длины модуля ( n ), то закрытый ключ может быть восстановлен. Мы не знаем, какова минимальная длина, чтобы избежать таких недостатков, поэтому на практике d будет иметь длину, примерно равную n . Это означает, что расшифровка будет около кубической длины n .

Те же положения не применяются к общему показателю ( e ), который может быть настолько маленьким, насколько требуется, если он соответствует правилам RSA ( e должен быть относительно простым к r-1 для всех простых факторов * (1041 * r из n ). Поэтому обычно выбирается очень маленький e . Это настолько привычно, что есть широко развернутые реализации, которые не могут обрабатывать большие открытые показатели. Например, реализация RSA в Windows CryptoAPI (которая используется, например, Internet Explorer при подключении к сайту HTTPS с сертификатом сервера RSA) не может обработать открытый ключ RSA, если e не умещается в 32 бита , e = 3 является наилучшим из возможных, но e = 65537 является традиционным (это историческая ошибка, потому что очень маленький показатель может вызвать слабость, если RSA используется без его правильное и стандартное дополнение, то, что никогда не должно быть сделано в любом случае). 65537 - это 17-разрядное длинное целое число, тогда как типичная длина для n и d будет 1024 или более. Это делает операции с открытым ключом (шифрование сообщения, проверка подписи) намного быстрее, чем операции с закрытым ключом (дешифрование сообщения, генерация подписи).

6 голосов
/ 23 февраля 2010

Теоретически так быть не должно. Алгоритмы шифрования и дешифрования практически идентичны. Дано:

d = decryption key
e = encryption key
n = modulus (product of primes)
c = encrypted code group
m = plaintext code group

Тогда:

  1. Шифрование c i = m i e (мод n)
  2. Расшифровка 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-значными числами мы должны быть достаточно терпеливыми, чтобы найти пару, для которой расшифровка будет (даже близка) такой же быстрой, как и шифрование.

2 голосов
/ 23 февраля 2010

В этом участвуют два фактора:

С одной стороны, публичный показатель может быть выбран как небольшое число только с двумя 1-битами (обычно 3, 17 или 65537). Это означает, что операция шифрования RSA может быть выполнена с несколькими модульными секциями и дополнением. Это не может быть отменено: если вы заставите частный показатель быть небольшим числом, безопасность системы явно нарушена.

С другой стороны, владелец личного ключа может хранить некоторые предварительно рассчитанные значения, полученные из исходных простых чисел. С ними он может использовать CRT алгоритм для замены одного возведения в степень по n-битному числу двумя показаниями по модулю n / 2-битного числа. Это примерно в четыре раза быстрее, чем наивный способ.

Таким образом, для пар ключей RSA со случайными открытыми показателями операции с закрытым ключом могут быть на самом деле быстрее. Но эффект выбора небольшого общедоступного показателя намного больше, чем эффект более быстрого алгоритма, поэтому на практике шифрование происходит быстрее.

2 голосов
/ 23 февраля 2010

Мощность шифрования обычно выбирается как простое число вида 2 ^ n + 1 (17, 63357), которое требует относительно небольшого количества операций умножения. Как следствие, значение дешифрования будет гораздо большим, и, следовательно, потребуется больше работы для вычисления.

1 голос
/ 23 февраля 2010

RSA Laboratories описывает, почему очень хорошо

В практических приложениях обычно выбирают небольшой открытый показатель для открытого ключа.

...

При использовании типовых алгоритмов модульного возведения в степень, используемых для реализации алгоритма RSA, операции с открытым ключом выполняются за O (k ^ 2) шагов, операции с закрытым ключом - за O (k ^ 3) шагов

0 голосов
/ 27 мая 2011

d и e являются мультипликативно обратными числами по модулю phi(n). Это означает, что не имеет значения, какую из двух вы выберете для шифрования, а какую - для расшифровки. Вы просто выбираете один раз перед шифрованием. Если вы хотите быструю расшифровку, выберите большее число для шифрования. Это так просто.

0 голосов
/ 23 февраля 2010

Короче "умножить = легко, фактор = сложно".

Взгляните на (http://en.wikipedia.org/wiki/RSA#Encryption), который ссылается на оптимизации в возведении в степень (http://en.wikipedia.org/wiki/Exponentiation_by_squaring#Further_applications)

Лучшим ресурсом, который я нашел, была следующая лекция по криптографии из Принстона (http://www.cs.princeton.edu/courses/archive/spr05/cos126/lectures/22.pdf)

0 голосов
/ 23 февраля 2010

Сколько дольше? У вас есть точные данные?

В любом случае, имеет смысл, что дешифрование сложнее, чем шифрование, поскольку шифрование не симметрично, как 123 => abc и abc> 123.

Для более подробной информации я предлагаю начать здесь .
Чтобы прочитать о том, как работает расчет, эта статья кажется очень хорошей. http://www.di -mgt.com.au / rsa_alg.html

...