Argon2-cffi: Sicheres Passwort-Hashing in Python

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist argon2-cffi?

Die Bibliothek argon2-cffi ist der offizielle Python-Wrapper für den Passwort-Hashing-Algorithmus Argon2, implementiert über das CFFI (C Foreign Function Interface). Argon2 ist ein moderner Algorithmus zum Hashing von Passwörtern, der 2015 den Password Hashing Competition gewonnen hat und seitdem als Goldstandard für die sichere Speicherung von Passwörtern gilt.

Der Hauptvorteil von argon2-cffi liegt in der hohen Leistung durch die C-Implementierung, kombiniert mit einer benutzerfreundlichen Python-Schnittstelle. Die Bibliothek wird von der Community aktiv gepflegt und regelmäßig an die neuesten Sicherheitsstandards angepasst.

Installation und Einrichtung

Standardinstallation

pip install argon2-cffi

Installation mit zusätzlichen Abhängigkeiten

pip install argon2-cffi[dev]  # für die Entwicklung
pip install argon2-cffi[tests]  # für Tests

Installation überprüfen

import argon2
print(argon2.__version__)

Varianten des Argon2-Algorithmus

Argon2i (Data-Independent)

Argon2i ist optimiert für den Schutz vor Seitenkanalangriffen (Side-Channel Attacks). Es greift unabhängig vom Passwortinhalt auf den Speicher zu, was es resistent gegen Timing-Angriffe macht. Empfohlen für Szenarien, in denen der Schutz vor Laufzeitanalysen wichtig ist.

Argon2d (Data-Dependent)

Argon2d bietet maximalen Schutz vor GPU-Angriffen und Angriffen mit spezialisierter Hardware. Es verwendet datenabhängige Speicherzugriffe, die eine Parallelisierung von Angriffen erschweren. Allerdings ist es weniger resistent gegen Seitenkanalangriffe.

Argon2id (Hybrid)

Argon2id ist ein Hybridmodus, der die Vorteile beider Varianten vereint. Er wird standardmäßig in argon2-cffi verwendet und für die meisten Anwendungen empfohlen. Die ersten Durchläufe erfolgen wie bei Argon2i, die restlichen wie bei Argon2d.

Schnellstart

Grundlegende Verwendung

from argon2 import PasswordHasher

# Instanz des Hashers erstellen
ph = PasswordHasher()

# Passwort hashen
password = "mein_super_geheimes_passwort"
hash_result = ph.hash(password)
print(f"Hash: {hash_result}")

# Passwort überprüfen
try:
    ph.verify(hash_result, password)
    print("Passwort ist korrekt!")
except Exception as e:
    print(f"Passwort ist falsch: {e}")

Arbeiten mit verschiedenen Datentypen

from argon2 import PasswordHasher

ph = PasswordHasher()

# String hashen
string_hash = ph.hash("string_passwort")

# Bytes hashen
bytes_password = b"bytes_passwort"
bytes_hash = ph.hash(bytes_password)

# Überprüfung
ph.verify(string_hash, "string_passwort")
ph.verify(bytes_hash, bytes_password)

Konfiguration des PasswordHasher

Konstruktor-Parameter

from argon2 import PasswordHasher, Type

ph = PasswordHasher(
    time_cost=3,        # Anzahl der Iterationen (Standard: 2)
    memory_cost=65536,  # Speicher in KB (Standard: 51200)
    parallelism=2,      # Anzahl der Threads (Standard: 1)
    hash_len=32,        # Hash-Länge in Bytes (Standard: 32)
    salt_len=16,        # Salt-Länge in Bytes (Standard: 16)
    encoding="utf-8",   # Kodierung (Standard: "utf-8")
    type=Type.ID        # Argon2-Typ (Standard: Type.ID)
)

Auswirkungen der Parameter auf die Sicherheit

time_cost erhöht die Ausführungszeit linear. Jede Erhöhung um 1 verdoppelt die Hashing-Zeit.

memory_cost bestimmt den Speicherverbrauch in Kilobyte. Höhere Werte erschweren Angriffe mit spezialisierter Hardware.

Empfehlungen