AES-GCM in Python ver- und entschlüsseln
Implementieren Sie authentifizierte Verschlüsselung mit ordnungsgemäßer Nonce-Verwaltung.
AES-GCM in Python ver- und entschlüsseln ist eine kostenlose Cryptology Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cryptology Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cryptology Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum AES-GCM?
AES-GCM ist ein Verfahren für Authenticated Encryption with Associated Data (AEAD). Es bietet Vertraulichkeit (AES-CTR) und Integrität bzw. Authentizität (GHASH-MAC) in einem einzigen Durchlauf – der Standard für moderne Verschlüsselung.
GCM-Komponenten: CTR + GHASH
AES-GCM = AES im Zählermodus (Verschlüsselung) + polynomialer GHASH-MAC (Authentifizierung). Das 128-Bit-Authentifizierungs-Tag umfasst sowohl den Chiffretext als auch optionale Additional Authenticated Data (AAD).
Anforderungen an Nonces
Die 96-Bit-Nonce darf niemals mit demselben Schlüssel wiederverwendet werden. Die Wiederverwendung einer Nonce zerstört GCM vollständig – ein Angreifer kann den Authentifizierungsschlüssel ermitteln und Chiffretexte fälschen. Verwenden Sie zufällige Nonces oder einen Zähler mit Schlüsselrotation.
Verschlüsseln mit AES-GCM in Python
Verwendung der Hazmat-Ebene:
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
# Generate a 256-bit key
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
# Fresh 96-bit nonce per encryption
nonce = os.urandom(12)
plaintext = b"sensitive payload"
aad = b"user_id=42" # authenticated but not encrypted
ciphertext = aesgcm.encrypt(nonce, plaintext, aad)
print("Nonce:", nonce.hex())
print("Ciphertext+tag:", ciphertext.hex())Entschlüsseln mit AES-GCM in Python
Bei der Entschlüsselung wird das Tag automatisch überprüft; bei einem Fehler wird InvalidTag ausgelöst:
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.exceptions import InvalidTag
# key, nonce, ciphertext, aad from previous step
try:
recovered = aesgcm.decrypt(nonce, ciphertext, aad)
print("Decrypted:", recovered)
except InvalidTag:
print("Authentication failed — ciphertext tampered!")Nonce und Chiffretext speichern
Stellen Sie der Speicherung die Nonce voran. Teilen Sie bei der Entschlüsselung an Byte 12:
def encrypt_blob(key: bytes, data: bytes, aad: bytes = b"") -> bytes:
aesgcm = AESGCM(key)
nonce = os.urandom(12)
ct = aesgcm.encrypt(nonce, data, aad or None)
return nonce + ct # prepend nonce
def decrypt_blob(key: bytes, blob: bytes, aad: bytes = b"") -> bytes:
aesgcm = AESGCM(key)
nonce, ct = blob[:12], blob[12:]
return aesgcm.decrypt(nonce, ct, aad or None)Zusätzliche authentifizierte Daten (AAD)
AAD wird authentifiziert, aber nicht verschlüsselt. Verwenden Sie AAD, um den Chiffretext an einen Kontext zu binden: Benutzer-ID, Datensatz-ID, API-Version. Dadurch wird verhindert, dass ein Angreifer einen gültigen Chiffretext in einen anderen Kontext verschiebt.
Verwendung der Cipher-API auf niedriger Ebene
Verwenden Sie für Streaming- oder In-Place-Verschlüsselung direkt die Cipher-API mit dem GCM-Modus:
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
key = os.urandom(32)
nonce = os.urandom(12)
cipher = Cipher(algorithms.AES(key), modes.GCM(nonce))
encryptor = cipher.encryptor()
encryptor.authenticate_additional_data(b"aad-value")
ct = encryptor.update(b"hello world") + encryptor.finalize()
tag = encryptor.tag
print("Tag:", tag.hex())Resistenz gegen Nonce-Fehlverwendung: AES-GCM-SIV
AES-GCM-SIV (RFC 8452) ist resistent gegen die Fehlverwendung von Nonces: Die Wiederverwendung einer Nonce verrät, dass zwei Klartexte identisch sind, beeinträchtigt aber NICHT die Authentizität. Bevorzugen Sie dieses Verfahren, wenn sich die Eindeutigkeit von Nonces nur schwer garantieren lässt.
Schlüsselableitung vor der Verschlüsselung
Verwenden Sie niemals ein unverarbeitetes Passwort als AES-Schlüssel. Leiten Sie einen Schlüssel mit Argon2 oder HKDF ab:
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
from cryptography.hazmat.primitives import hashes
import os
master_secret = b"shared_secret_from_ECDH"
salt = os.urandom(16)
kdf = HKDF(algorithm=hashes.SHA256(), length=32, salt=salt, info=b"aes-gcm-key")
aes_key = kdf.derive(master_secret)
print("Derived AES key:", aes_key.hex())Überlegungen zur Leistung
Durch die Hardwarebeschleunigung mit AES-NI ist AES-GCM extrem schnell (etwa 1–4 GB/s auf modernen CPUs). Python cryptography verwendet OpenSSL, das AES-NI nutzt. Verwenden Sie für Dateien über 100 MB ein blockweises Streaming mit der Cipher-API auf niedriger Ebene.
Wissenscheck
Was geschieht, wenn dieselbe Nonce mit AES-GCM unter demselben Schlüssel zweimal verwendet wird?
Zusammenfassung der Lektion
AES-GCM bietet authentifizierte Verschlüsselung in einem einzigen Durchlauf. Verwenden Sie für jede Verschlüsselung eine neue zufällige 96-Bit-Nonce. Stellen Sie bei der Speicherung die Nonce dem Chiffretext voran. AAD bindet den Chiffretext an einen Kontext. AES-GCM-SIV ist resistent gegen die Fehlverwendung von Nonces. Leiten Sie Schlüssel mit HKDF ab und verwenden Sie niemals unverarbeitete Passwörter.
Häufig gestellte Fragen
Ist die Lektion „AES-GCM in Python ver- und entschlüsseln“ kostenlos?
Ja — der vollständige Text von „AES-GCM in Python ver- und entschlüsseln“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cryptology Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cryptology Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „AES-GCM in Python ver- und entschlüsseln“?
Implementieren Sie authentifizierte Verschlüsselung mit ordnungsgemäßer Nonce-Verwaltung. Du übst Cryptology Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Cryptology Academy zu starten?
Keine Vorkenntnisse erforderlich. Cryptology Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „AES-GCM in Python ver- und entschlüsseln“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Cryptology Academy-Lektion Code schreiben und ausführen?
Ja. Jede Cryptology Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Überblick über die Python-cryptography-Bibliothek
- AES-GCM in Python ver- und entschlüsseln
- RSA- und ECDSA-Schlüsselpaare in Python
- Häufige Python-Krypto-Fallen und sichere Muster