PyCrypto: сгенерируйте ключ RSA, защищенный паролем DES3

Мне удалось создать ключ RSA, защищенный паролем, с помощью DES3 (ну... я думаю, потому что я новичок в этом мире шифрования), используя команду:

openssl genrsa -out "/tmp/myKey.pem" -passout pass:"f00bar" -des3 2048

Теперь я хотел бы сделать это внутри скрипта Python, используя PyCrypto, если это возможно. Я видел это сообщение, которое кажется чтобы препятствовать использованию PyCrypto для этого. Это все еще так?

Конечно, я всегда могу вызвать os.execute и выполнить приведенную выше команду, но я бы посчитал это "мошенничеством" :-). Я в значительной степени делаю это, чтобы изучить PyCrypto.

Заранее спасибо.


person BorrajaX    schedule 02.04.2012    source источник


Ответы (1)


Начиная с PyCrypto 2.5, вы можете экспортировать закрытый ключ RSA и защитить его парольной фразой. Ключ Triple DES внутренне выводится из парольной фразы и используется для фактического шифрования.

Например:

from Crypto import RSA
from Crypto import Random

random_generator = Random.new().read
key = RSA.generate(1024, random_generator)
exportedKey = key.exportKey('PEM', 'my secret', pkcs=1)

Переменная exportedKey содержит ASCII-версию (PEM) ключа, закодированного в соответствии с PKCS#1 (криптографический стандарт. Другой вариант — pkcs=8 для — угадайте, что — PKCS#8). Поскольку результат стандартный, вы можете использовать его с несколькими другими программами, включая openssl. И, конечно же, вы также можете повторно импортировать его обратно в Python через PyCrypto!

Метод exportKey задокументирован здесь< /а>.

person SquareRootOfTwentyThree    schedule 02.04.2012
comment
Работает как шарм! Я получил почти тот же результат, что и с командой openssl: Proc-Type: 4, ECRYPTED DEK-Info: DES-EDE3-CBC, F7149C8E62E0854B 4fUV/FmaMmL7qZH83+ocigFy [...] - person BorrajaX; 03.04.2012
comment
Просто чтобы я понял, это означает, что команда exportedKey = key.exportKey('PEM', 'мой секрет', pkcs=1) генерирует ключи RSA из пароля 'мой секрет'? Имеют ли «PEM» и pkcs последствия для безопасности? - person Charlie Parker; 08.12.2013
comment
Ключ RSA создается при вызове метода generate. Метод export берет его и кодирует в формате PEM. Форматы PEM и PKCS не имеют очевидных (для меня) недостатков безопасности. Интересно то, как ключ 3DES получается из пароля: это имитирует openssl, который использует довольно устаревший алгоритм. - person SquareRootOfTwentyThree; 08.12.2013