2012-04-02 45 views
7

Sono stato in grado di creare una chiave RSA protetta da password con DES3 (beh ... Penso che sia perché sono molto nuovo a questo mondo di crittografia) utilizzando il comando :PyCrypto: Genera la chiave RSA protetta con password DES3

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

Ora, vorrei farlo all'interno di uno script Python, utilizzando pycrypto, se possibile. Ho visto this message, che sembra scoraggiare l'uso di PyCrypto per farlo. È ancora così?

Ovviamente posso sempre chiamare os.execute ed eseguire il comando precedente, ma considererei che "barare" :-). Sto praticamente facendo questo per imparare PyCrypto.

Grazie in anticipo.

risposta

6

A partire da PyCrypto 2.5 è possibile esportare una chiave privata RSA e proteggerla con una passphrase. Un tasto Triple DES viene derivato internamente dalla passphrase e utilizzato per eseguire la crittografia effettiva. .

Per esempio:

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 variabile exportedKey contiene una versione ASCII (PEM) della chiave, codificati secondo PKCS # 1 (uno standard crittografico Un'altra opzione è pkcs=8 per - indovinate un po '- PKCS # 8). Poiché il risultato è standard, puoi usarlo con diversi altri programmi, incluso openssl. E ovviamente, puoi anche reimportarlo nuovamente in python tramite PyCrypto!

Il metodo exportKey è documentato here.

+0

Funziona come un fascino! Ho avuto quasi la stessa uscita che con il comando openssl: Proc-Type: 4, ENCRYPTED DEK-Info: DES-EDE3-CBC, F7149C8E62E0854B 4fUV/FmaMmL7qZH83 + ocigFy [...] – BorrajaX

+0

Solo per fare ho capito, ciò significa che il comando exportedKey = key.exportKey ('PEM', 'my secret', pkcs = 1), genera chiavi RSA dalla password 'my secret'? 'PEM' e pkcs hanno implicazioni sulla sicurezza? –

+0

La chiave RSA viene creata quando viene chiamato il metodo 'generate'. Il metodo 'export' lo prende e lo codifica in formato PEM. I formati PEM e PKCS non hanno evidenti (per me) punti deboli di sicurezza. Il bit interessante è il modo in cui la chiave 3DES deriva dalla password: che simula 'openssl', che utilizza un algoritmo piuttosto obsoleto. – SquareRootOfTwentyThree