Генерация закрытого ключа RSA с использованием AES

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

openssl genrsa -aes128

И результат выборки будет:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,7787EC23BAB71A7E339FA4BB5B197362

Sqmr8Zb8..bla..blaa
-----END RSA PRIVATE KEY-----

В PyCrypto мы можем создать аналогичный закрытый ключ, используя:

from Crypto.PublicKey import RSA
key = RSA.generate(1024).exportKey('PEM', 'secret')

Который будет производить

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,760A8103AA096360

HxGmbla..blaa
-----END RSA PRIVATE KEY-----

Обратите внимание, что результат обернут с использованием тройного DES. Как правильно создать закрытый ключ, завернутый с использованием AES, такой как приведенный выше, с использованием PyCrypto?

2 ответа

AES-шифрование ключей RSA будет поддерживаться только в PyCrypto 2.7 (сейчас на веб-сайте доступна альфа-версия). Однако шифрование AES будет применяться на уровне PKCS#8 (двоичное), а не на уровне PEM (текстовый конверт).

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

Вы будете делать, например:

from Crypto.PublicKey import RSA
key = RSA.generate(2048)

print key.exportKey('PEM', 'secret', pkcs=8, protection='PBKDF2WithHMAC-SHA1AndAES256-CBC')

Похоже, что, просматривая исходный код, вы быстро находите жестко запрограммированную часть для зашифрованного закрытого ключа PKCS#8 в exportKey:

protection = 'PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC'

Который, кажется, соответствует информации в заголовке PEM.

Другие вопросы по тегам