Python: Как добавить отступы RSA? - PullRequest
4 голосов
/ 18 марта 2009

Я просматривал большинство библиотек шифрования Python, я решил использовать PyCrypto или M2Crypto.
Я отказался от ezPyCrypto, потому что он поддерживает только MD5 для подписи и Keyczar, потому что он недостаточно зрел.

Итак, я прочитал, что RSA уязвим к нескольким атакам, если зашифрованный текст (или хэш подписи) заполнен неправильно. Что это значит?
Ни PyCrypto, ни M2Crypto ничего не упоминают об этом, и Google не нашел ничего подходящего. Эти библиотеки автоматически добавляют paddign? Как можно сказать?

Если ответ на вышеприведенный ответ отрицательный, что считается правильным заполнением?

Ответы [ 5 ]

6 голосов
/ 19 марта 2009

PyCrypto не добавляет упомянутый отступ.
M2Crypto вместо этого.

M2Crypto построен поверх openSSL, поддерживает в основном все, что вам нужно, все еще поддерживается и обновляется, в то время как PyCrypto выдает несколько предупреждений об устаревании.

3 голосов
/ 19 марта 2009

Одна из причин для случайного заполнения может заключаться в том, что «из книги» RSA с низким показателем (скажем, 3) может быть взломан действительно просто, если одно и то же сообщение отправлено нескольким людям (три ).

Поэтому вам лучше убедиться, что вы не отправляете точно такое же сообщение, применяя какое-то случайное (но необратимое) преобразование к вашему сообщению ранее.

Может быть, в этом и заключается смысл заполнения!?

EDIT: Я посмотрел википедию. то, о чем я говорил, называется атакой Хастада.

1 голос
/ 19 марта 2009

Я недавно боролся с выяснением шифрования ... Эта статья очень помогла объяснить объяснение того, что было с помощью заполнения:

http://www.di -mgt.com.au / cryptopad.html

(способ, который мне показался наиболее простым для реализации)

Я могу поделиться некоторыми фрагментами кода, если это необходимо.

P.S. Этот файл также пригодился для создания безопасных ключей (Google для него). PBKDF2.py - PKCS # 5 v2.0. Получение ключа на основе пароля

0 голосов
/ 01 мая 2012

Во-первых, вы должны использовать AES, поскольку это стандарт де-факто.

AES шифрует байты с размерами блоков 16 байтов. Очевидно, что это прекрасно работает для любого большого объема данных. Но последний бит, очевидно, может быть меньше 16 байтов.

Для последнего блока вам нужно его дополнить, и типичное заполнение выполняется через PCKS7, что довольно просто.

Допустим, у вас есть строка: "icecream" в качестве последнего блока.

"icecream" - это 8 байтов, поэтому вам нужно еще 8 байтов, чтобы сделать блок

Итак, вы просто добавляете символ 8 (не «8») 8 раз

"icecream\x08\x08\x08\x08\x08\x08\x08\x08"

Будет вашей результирующей строкой. Теперь вы можете зашифровать данные.

Помните, что при расшифровке вам нужно будет перехватить этот последний блок и убрать отступ перед использованием.

0 голосов
/ 18 марта 2009

Не совсем уверен, но если вы добавите случайный компонент в ваше сообщение RSA, это предотвратит атаки по словарю

...