Генерация закрытого ключа 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.