24 lines
1.2 KiB
Markdown
Executable File
24 lines
1.2 KiB
Markdown
Executable File
# ADR-003: Argon2id + Werkzeug-Kompatibilitätsschicht (pbkdf2 UND scrypt)
|
||
|
||
**Datum:** 2026-07-15 · **Status:** Akzeptiert (ergänzt um scrypt nach Prod-Befund B4)
|
||
|
||
## Kontext
|
||
Bestandskonten wurden von Werkzeug (Flask) gehasht. Zwangs-Passwort-Reset
|
||
für den Produktiv-Mandanten war inakzeptabel. Werkzeug erzeugt je nach
|
||
Version pbkdf2:sha256- ODER scrypt-Hashes (>= 3.0 Default: scrypt) — die
|
||
Flask-Ära installierte ungepinnt, in Produktion lagen scrypt-Hashes.
|
||
|
||
## Entscheidung
|
||
Neue Hashes: Argon2id (RustCrypto-Defaults). verify_password() erkennt
|
||
Werkzeug-Formate (`pbkdf2:sha256:*` und `scrypt:n:r:p$salt$hex`), verifiziert
|
||
in Konstantzeit und rehasht beim ersten erfolgreichen Login transparent auf
|
||
Argon2id (schleichende Migration, kein Reset).
|
||
|
||
## Konsequenzen
|
||
+ Bestandslogins funktionieren unverändert; Bestand härtet sich selbst nach.
|
||
− Werkzeug-Kompatibilitätscode bleibt, bis alle Konten migriert sind
|
||
(prüfbar: `SELECT count(*) FROM users WHERE password_hash NOT LIKE '$argon2%'`).
|
||
− Lehre: Der erste Wurf unterstützte nur pbkdf2 und fiel in Produktion auf
|
||
(Login-Ausfall + Rate-Limit-Sperre). Hash-Kompatibilität ist künftig gegen
|
||
reale Prod-Hash-Prefixe zu verifizieren (Forensik phase-010, Befund B4).
|