Как использовать RSA? - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь использовать RSA для шифрования моих данных в Python.

Я создал два маленьких (приватных и открытых) ключа

e : 14918179  N : 15372757
D : 7495819   N : 15372757

Я попытался зашифровать небольшое значение (10) этими ключами, и это сработало. Но проблема в том, что это занимает много времени. Например, я сравнил его с openssl, используя большой ключ и длинную строку, и он работал менее чем за секунду. И я знаю, что есть третья библиотека для использования RSA (не большой поклонник из них). Я пытаюсь использовать этот метод для шифрования моих данных, которые будут отправлены на сервер, и он должен сделать это за секунду Как я могу это сделать?

1 Ответ

1 голос
/ 06 мая 2019

Я думаю, что в целом на ваши вопросы о производительности ответили здесь. Википедия: модульное возведение в степень

В статье описывается

  • Прямое возведение в степень
  • Эффективное возведение в степень памяти
  • Двоичное возведение в степень

Прямое возведение в степень

поднимите до степени e и возьмите по модулю.Это прямолинейно, но размер числа по модулю чрезвычайно велик.

Возведение в степень эффективного использования памяти

Замена операции питания с умножением на e позволяет накопленному результату всегда находиться в пределахдиапазон по модулю.Это ограничивает размер bignum и ускоряет операцию.

Двоичное возведение в степень

Если вы преобразуете мощность в двоичное число

, если e = 13 =>1101 pow (n, 13) = pow (n, 8) * pow (n, 4) * pow (n, 1) Так что для показателя m битов нужно выполнить только около m операций.

Объединение эффективного использования памяти и двоичного возведения в степень решает большую часть производительности.

Python предлагает реализацию этих улучшений, используя функцию мощности с 3 аргументами, например,

>>> import timeit
>>> t = timeit.Timer( 'print(pow( 10,14918179, 15372757))' )
>>> t.timeit(1)
10140931
0.06365180000000237

>>> u = timeit.Timer( 'print(pow( 10,14918179) % 15372757)' )
>>> u.timeit(1)
10140931
15.021656000000007

Параметр 3 powзанимает 0,06 с, в то время как версия с 2 параметрами pow занимает 15 секунд.

...