Verschlüsselung
- Payload-Verschlüsselung: XSalsa20-Poly1305 (libsodium secretbox)
- Datensatz-Schlüssel: 32 Byte Zufallsschlüssel pro Datensatz
- Schlüssel-Wrapping: Argon2id (pwhash) aus Kunden-Passphrase
- Die Passphrase wird niemals gespeichert — kein Back-Door möglich
Zugangstoken
- Einladungslinks: einmaliger Token (32 Byte Zufallswert)
- Nur HMAC-SHA256-Hash wird in der Datenbank gespeichert
- Ablaufzeit: 7 Tage ab Ausstellung
- Nach erstem Entsperren: Session-basierter Zugang (30 Min. Idle-Timeout)
Admin-Authentifizierung
- Keine Passwörter — ausschließlich OTP via E-Mail
- OTP: 6 Ziffern, 10 Minuten gültig, einmaliger Gebrauch
- OTPs nur als HMAC-SHA256-Hash gespeichert
- Rate-Limiting: max. 5 Anfragen/Stunde pro E-Mail, 20/Stunde pro IP
Mandantentrennung
- Vollständige Datenisolierung pro Mandant (tenant_id auf allen Tabellen)
- Alle Datenbankabfragen sind mandantengebunden
- Kein mandantenübergreifender Datenzugriff möglich
Protokollierung
- Separates Audit-Log, Security-Log und App-Log
- Keine Klartextdaten, Passphrases oder vollständige E-Mail-Adressen in Logs
- Tägliche Log-Rotation (30 Tage Aufbewahrung)