2012-04-02 85 views
7

He podido crear una clave RSA protegida por contraseña con DES3 (bueno ... Creo que porque soy muy nuevo en este mundo de encriptación) usando el comando :PyCrypto: Generar clave RSA protegida con contraseña DES3

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

Ahora, me gustaría hacer eso dentro de un script Python, utilizando PyCrypto, si es posible. He visto this message, lo que parece desalentar el uso de PyCrypto para hacer eso. ¿Sigue siendo así?

Por supuesto que siempre se puede llamar os.execute, y ejecutar el comando anterior, pero me gustaría tener en cuenta que "hacer trampa" :-). Estoy haciendo esto para aprender PyCrypto.

Gracias de antemano.

Respuesta

6

A partir de PyCrypto 2.5 puede exportar una clave privada RSA y tenerla protegida bajo una frase de contraseña. Una clave Triple DES se deriva internamente de la frase de contraseña y se utiliza para realizar el cifrado real. .

Por ejemplo:

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) 

La variable exportedKey contiene una versión ASCII (PEM) de la llave, codificada de acuerdo con PKCS # 1 (un estándar de cifrado Otra opción es pkcs=8 para - supongo que lo que - PKCS # 8). Como el resultado es estándar, puede usarlo con muchos otros programas, incluido openssl. ¡Y por supuesto, también puede volver a importarlo de vuelta a Python a través de PyCrypto!

El método exportKey está documentado here.

+0

¡Trabajando como un encanto! Tengo casi el mismo resultado que con el comando openssl: Proc-Type: 4, ENCRYPTED DEK-Info: DES-CBC-EDE3, F7149C8E62E0854B 4fUV/FmaMmL7qZH83 + ocigFy [...] – BorrajaX

+0

Sólo para hacer que entiendo, eso significa que el comando exportedKey = key.exportKey ('PEM', 'my secret', pkcs = 1), genera claves RSA a partir de la contraseña 'my secret'? ¿'PEM' y pkcs tienen implicaciones de seguridad? –

+0

La clave RSA se crea cuando se llama al método 'generate'. El método 'export' lo toma y lo codifica en formato PEM. Los formatos PEM y PKCS no tienen debilidades de seguridad evidentes (para mí). Lo interesante es cómo la clave 3DES se deriva de la contraseña: que imita a 'openssl', que utiliza un algoritmo bastante desactualizado. – SquareRootOfTwentyThree

Cuestiones relacionadas