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.
Auch in der Bibliothek
Arbeiten mit Bildern in PHP: Die Bibliotheken GD und Imagick
Arbeit mit XML in Rust: Bibliotheken quick-xml, roxmltree und serde_xml_rs
Event Bus und Observer-Muster in PHP: Implementierung und Beispiele
ORM für C# (.NET): Vergleich und Anwendungsbeispiele
Mocha JavaScript (Node.js): Komplettleitfaden mit Beispielen
Empfehlungen