生成使用AES包装的RSA私钥

时间:2014-10-14 14:20:00

标签: python encryption cryptography pycrypto

我是加密新手并且一直在使用openssl。 openssl中有一个命令用于生成使用AES包装的RSA私钥:

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 个答案:

答案 0 :(得分:1)

看起来没有,通过源代码,您可以快速找到exportKey中PKCS#8加密私钥的硬编码部分:

protection = 'PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC'

这似乎符合PEM标题中的信息。

答案 1 :(得分:1)

RSA密钥的AES加密仅在PyCrypto 2.7中受支持(目前网站上有一个alpha版本)。但是,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')