Ein asymmetrische Verschlüsselungsverfahren umgeht die größte Schwachstelle symmetrischer Verschlüsselungsverfahren: den Schlüsselaustausch.
Bei den in den 1970er-Jahren entwickelten asymmetrische Verschlüsselungsverfahren gibt es keinen gemeinsamen geheimen Schlüssel, sondern jeder Kommunikationspartner besitzt einen privaten Schlüssel
und einen öffentlichen Schlüssel
.
Der öffentliche Schlüssel ist jedem bekannt und wird zum Verschlüsseln benutzt. Die verschlüsselte Nachricht kann nur der Empfänger mit dem passenden privaten Schlüssel entschlüsseln.
Asymmetrische Verschlüsselungsverfahren können können häufig nicht nur zum Verschlüsseln, sondern auch zum Signieren von Nachrichten angewand werden.
Die in PyCrypto.PuplicKey
enthaltene asymmetrische Verschlüsselungsverfahren werden in Tabelle vorgestellt.
Name | Verschlüsseln | Signieren |
---|---|---|
RSA | ja | ja |
ElGamal | ja | ja |
DSA | nein | ja |
qNEW | nein | ja |
Einen Schlüssel erzeugen
from Crypto.PublicKey import RSA
key = RSA.generate(1024)
puplic_key = key.publickey()
Zunächst wird ein Schlüsselpaar mit generate()
erzeugt.
Daraus wird der öffentliche schlüssel in puplic_key
geschpeichert.
Verschlüsseln
chiffre = PKCS1_OAEP.new(puplic_key)
chiffrat = chiffre.encrypt(b"Dies ist ein geheimer Text")
Entschlüsseln
chiffre = PKCS1_OAEP.new(key)
print(chiffre.decrypt(chiffrat))
Gesamter Code
from Crypto.PublicKey import RSA
key = RSA.generate(1024)
puplic_key = key.publickey()
from Crypto.Cipher import PKCS1_OAEP
chiffre = PKCS1_OAEP.new(puplic_key)
chiffrat = chiffre.encrypt(b"Dies ist ein geheimer Text")
chiffre = PKCS1_OAEP.new(key)
print(chiffre.decrypt(chiffrat))
Ausgabe
b'Dies ist ein geheimer Text'