Как я могу создать ключ, используя RSA / ECB / PKCS1Padding в Python? - PullRequest
4 голосов
/ 18 мая 2010

Я изо всех сил пытаюсь найти любой метод использования RSA в режиме ECB с дополнением PKCS1 в python. Я посмотрел в pyCrypto, но у них нет заполнения PKCS1 в основной ветке (но в патче). Тем не менее я нашел RSA с PKCS1 в пакете M2Crypto, но я не уверен, что могу выбрать режим ECB ...

1 Ответ

11 голосов
/ 18 мая 2010

Режим цепочки, такой как ECB, не имеет смысла для RSA, если вы не делаете это неправильно.

ECB для блочных шифров: входные данные разбиваются на блоки одинакового размера, и каждый блок шифруется отдельно. Это вызывает некоторые недостатки, поэтому лучше избегать режима ECB для блочных шифров.

RSA не является блочным шифром. В частности, RSA обязательно расширяет зашифрованное сообщение: с помощью 1024-битного ключа RSA (довольно типичного размера) можно зашифровать сообщение до 117 байтов, но в результате получается 128-байтовое значение.

Можно представить себе сообщение большего размера, разбить его на отдельные блоки длиной 117 байт (или меньше) и RSA-шифровать каждый из них по отдельности, но никто этого не делает, в основном из-за увеличения размера и стоимости процессора. , Кроме того, вопросы безопасности, связанные с этим разделением и рекомбинацией, вообще не изучаются, поэтому вполне возможно, что результат будет довольно слабым. Обычно, когда криптографической библиотеке требуется режим заполнения как часть имени алгоритма, например, в "RSA/ECB/PKCS1Padding", это происходит только из-за синтаксических ограничений на имя, и часть цепочки (ECB) фактически игнорируется (это то, что делает, например, Java).

На практике при шифровании некоторых данных, которые могут быть больше, чем максимальный размер ввода RSA, используется гибридное шифрование: то, что зашифровано RSA, представляет собой случайный симметричный ключ (например, набор из 16 равномерно случайных байтов), и этот ключ используется для симметричного шифрования (например, с помощью AES) фактических данных. Это более экономно (потому что симметричное шифрование не увеличивает блоки) и ЦП (симметричное шифрование значительно быстрее, чем асимметричное шифрование и, в частности, RSA расшифровка ).

...