2012-04-02 12 views
7

Ich konnte einen RSA-Schlüssel durch Passwort mit DES3 (gut ... Ich glaube, weil ich sehr neu in dieser Verschlüsselungswelt bin) mit dem Befehl erstellen :PyCrypto: RSA-Schlüssel mit DES3-Passwort geschützt

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

Nun würde ich in einem Python-Skript zu tun, dass, PyCrypto verwenden, wenn möglich. Ich habe this message gesehen, was die Verwendung von PyCrypto zu verhindern scheint. Ist es immer noch so?

Natürlich kann ich immer anrufen os.execute, und führen Sie den obigen Befehl, aber ich würde das "betrügen" :-). Ich mache so etwas, um PyCrypto zu lernen.

Vielen Dank im Voraus.

Antwort

6

Ab PyCrypto 2.5 können Sie einen privaten RSA-Schlüssel exportieren und unter einer Passphrase schützen lassen. Ein Triple-DES-Schlüssel wird intern aus der Passphrase abgeleitet und zur Ausführung der eigentlichen Verschlüsselung verwendet. .

Zum Beispiel:

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) 

Die Variable exportedKey enthält eine ASCII-Version (PEM) des Schlüssels, codiert nach PKCS # 1 (ein kryptographisches Standard Eine weitere Option ist pkcs=8 für - erraten, was - PKCS # 8). Da das Ergebnis Standard ist, können Sie es mit mehreren anderen Programmen verwenden, einschließlich openssl. Und natürlich können Sie es auch wieder über PyCrypto in Python importieren!

Die exportKey Methode ist dokumentiert here.

+0

Arbeiten wie ein Charme! Ich habe fast die gleiche Leistung als mit dem OpenSSL-Befehl: Proc-Typ: 4, VERSCHLüSSELN DEK-Info: DES-EDE3-CBC, F7149C8E62E0854B 4fUV/FmaMmL7qZH83 + ocigFy [...] – BorrajaX

+0

einfach zu machen verstehe ich, das bedeutet, dass der Befehl exportedKey = key.exportKey ('PEM', 'mein Geheimnis', pkcs = 1) RSA-Schlüssel aus dem Passwort 'my secret' erzeugt? Haben "PEM" und PKCs Auswirkungen auf die Sicherheit? –

+0

Der RSA-Schlüssel wird erstellt, wenn die Methode 'generate' aufgerufen wird. Die Methode 'export' nimmt es und codiert es im PEM-Format. PEM- und PKCS-Formate haben keine (für mich) Sicherheitslücken. Das Interessante ist, wie der 3DES-Schlüssel aus dem Passwort abgeleitet wird: Das imitiert "openssl", das einen ziemlich veralteten Algorithmus verwendet. – SquareRootOfTwentyThree