Technisches Referenzdokument

E2EE-Konformitätsbescheinigung
Ausführliche technische Version

Vollständiges Dokument, das die kryptografische Architektur von leggit, das Bedrohungsmodell, die Findings des Security-Engineer-Audits und deren Behandlung sowie die Methodik zur erneuten Überprüfung beschreibt.

Referenz: ATT-E2EE-2026-05-18-v2.0
Ausstellungsdatum: 2026-05-18
Software-Geltungsbereich: app.leggit.org (Tresor), leggit.org (öffentliche Website)
Ausgabe: v2.0 — v1.0 Non-Regression-Prüfung + Audit nachfolgender Änderungen
Historie: v1.0 archiviert (16.05.2026) · v2.0 Markdown-Quelle

📋 v2.0 Aktualisierung (2026-05-18)

Diese Edition kombiniert zwei security-engineer-Audit-Durchläufe:

  • v1.0 (16.05.) — 12 Findings: 1 HIGH (Telefonnummern-Enumerierung), 4 MEDIUM (Rate-Limit, CRLF-Dateiname, cleanup pairings, Quota), 4 LOW (Cache-Control, Audit id_coffre, reveal Nur Tabelle, Referrer-Policy), 3 INFO. Alle behoben und Non-Regression geprüft in v2.0.
  • v2.0 (18.05.) — 5 neue Findings: 1 HIGH (destruktive Neuzuweisung window.LeggitCoffreFile bricht den Dual-Device-E2EE-Upload), 2 MEDIUM (Wiederverwendungen von PDO-Platzhaltern :u verursachen SQLSTATE[HY093] in Familientresoren und paranoia validate), 2 LOW (fehlender Rate-Limit auf get_my_privkey/request_recovery, nicht-konstantzeitiger Vergleich des Autorisierungscodes). Alle behoben.

E2EE-Architekturänderungen seit v1.0

  • Substitutionstabelle (Prudent-Modus) — Zuvor über den Legacy-Endpunkt upload_file hochgeladen (serverseitige Verschlüsselung, "server"-Badge). Jetzt über den vollständigen Chunked-E2EE-Fluss: upload_init_e2ee + upload_chunk_e2ee (secretstream-Header + 1 MiB Chunks) + upload_finalize_e2ee. Der Server sieht das Foto nie im Klartext, nicht einmal vorübergehend. "E2EE"-Badge.
  • Dual-Device-Workflow (PC ↔ Smartphone) — Ermöglicht die Eingabe der substituierten Wörter auf dem PC und das Fotografieren der Tabelle auf dem Smartphone, ohne dass ein einzelnes Gerät gleichzeitig beide Geheimnisse hat. Pairing: langes 256-Bit-Token (als SHA-256 gespeichert), kurzer 6-Zeichen-Code (verwechslungsfreies Alphabet), atomarer One-Shot via UPDATE … WHERE consume_le IS NULL, TTL 24h, dateibasierter Rate-Limit.
  • Prudent-Offenlegung in 3 Modi — Bei der Anzeige wählt der Benutzer vor der Entschlüsselung: "Nur Wörter", "Nur Tabelle" (der Seed wird NICHT entschlüsselt), "Beides". Der "Nur Tabelle"-Zweig umgeht den Aufruf von LeggitCoffreCrypto.decryptItem auf der Browser-Seite, konsistent mit dem Dual-Device-Versprechen.
  • Referenztabelle relations_types — Administrierbare DB-Tabelle (nur Super-Admin), die die Beziehungstypen (Ehepartner, Kind, Elternteil…) aus dem Code entfernt. Jeder Typ trägt seine Spiegelbeziehung (Kind↔Elternteil, Enkelkind↔Großelternteil usw.) und ein "Erbe standardmäßig"-Flag. Bereitet Phase 2 vor (Verbindungstabelle user_relations zwischen 2 Benutzern mit Validierungs-Workflow).
  • Integritätstests — Von 753 auf 774+ Assertions erhöht (Abschnitte P11.52 bis P11.63 hinzugefügt, um zukünftige Regressionen bei auditierten Themen zu verhindern).

Keine kryptografische Schwachstelle. Die Primitive bleiben unverändert (XChaCha20-Poly1305 / X25519 / Argon2id / Shamir GF(2⁸)). Die Findings sind Rate-Limit-Bypässe, anwendungsebene Enumerierungsvektoren und — für den HIGH v2.0 — ein JS-Funktionsfehler (kein Datenleck).

1.Präambel und Geltungsbereich

Die vorliegende Bescheinigung dokumentiert den Konformitätsstand des leggit-Systems im Hinblick auf die Standards der browserbasierten Ende-zu-Ende-Verschlüsselung (E2EE) und der bekannten Anwendungssicherheitsbedrohungen zum Ausstellungsdatum.

Sie umfasst

  • Das Modul persönliche Tresore (Text, Dateien, Videos bis 100 MB)
  • Das Modul Familientresore (Text + Mehrbenutzer-Dateien)
  • Das Modul Crypto-Wallets (Modi Standard / Vorsichtig / Paranoia)
  • Die Authentifizierungs-Pipeline und die Post-mortem-Wiederherstellung
  • Die Sicherheitsinfrastruktur (CSP, SRI, HSTS, Audit-Logs)

Sie umfasst nicht

  • Die Sicherheit des Benutzergeräts (kompromittierter Browser, bösartige Erweiterung, lokale Malware — außerhalb des technischen Geltungsbereichs von leggit)
  • Kommunikation außerhalb von leggit (externe E-Mail, SMS, die bei einem Betreiber empfangen werden)
  • Externe Drittanbieterdienste (Stripe für Zahlungen, OVH für Hosting — deren Sicherheit Gegenstand eigener Bescheinigungen ist)

2.E2EE-Architektur — technische Zusammenfassung

2.1 Prinzip des serverseitigen Nicht-Zugriffs

Der leggit-Server besitzt niemals:

  • Die Klartext-Inhalte (Texte, Dateien, Videos, BIP-39-Seeds)
  • Den vom Benutzerpasswort abgeleiteten KEK_user-Schlüssel
  • Die pro Item generierten DEK-Schlüssel (Data Encryption Key)

Der Server speichert und verarbeitet ausschließlich:

  • Cipher Blobs, verschlüsselt mit AEAD XChaCha20-Poly1305-IETF
  • Verschlüsselte DEK-Wraps (AEAD für den Eigentümer, crypto_box_seal X25519 für Empfänger / Familienmitglieder)
  • DEK-Fingerprints (SHA-256, Konsistenzprüfung ohne Offenlegung des DEK)

2.2 Kryptografische Primitive

PrimitivAlgorithmusVerwendung
Symmetrisches AEADXChaCha20-Poly1305-IETFCipher der Items + Datei-Chunks
Chunked Streamingsecretstream_xchacha20poly1305Dateien > 4 MiB
Passwort-KDFArgon2id (crypto_pwhash)Benutzer-KEK
AsymmetrischX25519 / crypto_box_sealEmpfänger- + Familien-Wraps
Secret SharingShamir GF(2⁸)Modus PARANOIA Crypto-Wallets (M-of-N)
HashSHA-256 (WebCrypto)dek_fingerprint
Skript-IntegritätSRI sha384Alle kritischen JS

2.3 Web-Worker-Isolation

Alle kryptografischen Operationen werden in einem isolierten Web Worker ausgeführt (assets/js/coffre-crypto-worker.js). Der Main Thread:

  • Hat niemals Zugriff auf den KEK_user (über ArrayBuffer Transferable übertragen — siehe MED-3)
  • Hat niemals Zugriff auf den entschlüsselten X25519-privkey
  • Hat niemals Zugriff auf die DEK im Klartext
  • Hat niemals Zugriff auf die BIP-39-Wörter oder die Shamir-Shares vor box_seal

Folge: Ein XSS im Main Thread (residualer Vektor) reicht nicht aus, um die Schlüssel zu extrahieren.

2.4 Serverseitige Speicherung

Alle sensiblen Daten in der Datenbank sind opak:

SELECT cipher_blob FROM coffre_items WHERE crypto_version LIKE 'e2ee-%';
-- → Binärer BLOB, keine Korrelation mit einem bekannten Klartext möglich

Ein vollständiger Dump der Datenbank erlaubt die Wiederherstellung der Inhalte nicht ohne den KEK_user jedes Benutzers (der nur im Browser-Speicher existiert).

3.Bedrohungsmodell

3.1 Abgedeckte Bedrohungen (geschützt)

VektorSchutz
Kalter Datenbank-Dump (Festplattendiebstahl, Snapshot, Backup)Cipher ohne Benutzer-KEK unbrauchbar
Passiver Insider-Leser (neugieriger Administrator, Logs, SQL-Abfragen)Daten auch für den DBA opak
„Augenblicklicher" Server-RCE ohne Änderung des QuellcodesCipher bleibt opak, KEK wird nie im Klartext übertragen
Zwischennetz (Proxy, ISP, passive NSA)TLS + HSTS + redundante Anwendungs-Cipher
Diebstahl des Session-Cookies + ReplayRe-Auth reauth_until_e2ee erforderlich für sensible Operationen (CR-S3, HIGH-1)
Massives Scraping der Audit-Logs durch kompromittierte SitzungRate-Limit 30/60s + Scrape-Erkennung (MED-2)
Fälschung von Wraps mit Empfängern außerhalb der WhitelistWhitelist-Prüfung + konsistenter Fingerprint (CR-S2)

3.2 NICHT abgedeckte Bedrohungen (ehrliche Grenzen)

Das System schützt nicht gegen:

  • Aktiver Server-RCE, der das ausgelieferte JavaScript modifiziert. Gemindert durch SRI sha384 + Sub-Resource Versioning + CSP, jedoch nicht eliminiert. Ein Angreifer mit Admin-Zugriff auf den Webserver kann den Krypto-Code ersetzen.
  • Kompromittierter Browser des Benutzers (Malware, bösartige Erweiterung, Keylogger). Außerhalb des technischen Geltungsbereichs.
  • Rechtlicher Zwang zur Modifikation des Servers (Lawfare). leggit hat seinen Sitz in Frankreich und unterliegt den anwendbaren gerichtlichen Anfragen.
  • Zukünftige Kryptoanalyse von XChaCha20 oder X25519. Restrisiko über 10-20 Jahre, von der NIST/IETF-Community überwacht.

Diese Grenzen werden dem Endnutzer ausdrücklich auf der öffentlichen Seite /securite und in der Marketing-Dokumentation mitgeteilt.

4.Audit-Methodik

4.1 Überprüfter Geltungsbereich

Das Audit umfasste:

  • 13 E2EE-API-Endpunkte (app.leggit.org/api/coffre_*.php, modules/coffres/api.php, modules/coffres-familiaux/api.php, modules/crypto-wallets/api.php)
  • 7 Browser-JavaScript-Module (Worker + Handler)
  • Die CSP- / SRI- / HTTP-Header-Infrastruktur
  • Der Post-mortem-Wiederherstellungsflow (Shamir + KEK_recovery)
  • Die Muster für Rate-Limit und Audit-Logs
  • Die Konsistenz der Datenbankmigrationen (047_coffre_e2ee.sql und folgende)

4.2 Verwendetes Werkzeug

Das Audit wurde von einem automatisierten Agenten vom Typ „security-engineer" (Claude AI, Anthropic) durchgeführt, der die Checklisten OWASP ASVS Level 2 befolgt und durch eine gezielte manuelle Analyse der kryptografischen Invarianten ergänzt wurde.

⚠️ Wichtiger Transparenzhinweis
Das Audit wurde von einem Agenten künstlicher Intelligenz durchgeführt und nicht von einem zertifizierten menschlichen Berater (CISSP, OSCP usw.). Diese Bescheinigung hat nicht den Status einer Pentest-Zertifizierung. Vor einer größeren öffentlichen Bewerbung der E2EE-Funktionalität wird ein externes menschliches Audit empfohlen (geschätzt: 5–10 k€ für einen Pentest mit vollem Spektrum).

4.3 Klassifizierung der Findings

  • CRITICAL: sofortige Ausnutzung, Umgehung des E2EE-Modells
  • HIGH: unter Bedingungen ausnutzbares Risiko, starke Auswirkung
  • MEDIUM: geschwächte Verteidigung in der Tiefe, indirekte Maßnahmen
  • LOW: Hygiene / Hardening, begrenzte residuelle Auswirkung

4.4 Kriterium für den Abschluss eines Findings

Ein Finding gilt nur dann als behandelt, wenn die folgenden drei Kriterien sämtlich erfüllt sind:

  1. Implementierung des Fixes im Code (identifizierter Commit)
  2. Automatisierter E2E-Test, der die erwartete Invariante reproduziert (PASS)
  3. Überprüfung der Nicht-Regression über alle vorherigen Phasen

5.Findings des Audits und ihre Behandlung

5.1 Übersichtstabelle

SchweregradRef.KurzbeschreibungStatusTests
HIGHHIGH-1Familie: Re-Auth verpflichtend für invite_membre bei aktivem E2EE + explizite Browser-Bestätigung vor automatischem RewrapBEHOBENP11.1–P11.8
HIGHHIGH-2PARANOIA-Wallet: BIP-39-Entropie + Shamir-Split + box_seal isoliert im Web WorkerBEHOBENP11.40–P11.43
HIGHHIGH-3CSP-enforce-Phasing: Infrastruktur LEGGIT_CSP_MODE mit 4 Modi + Admin-Endpunkt zur Überprüfung der VerstößeBEHOBENP11.36–P11.39
MEDMED-1actionFamMigrateItem: Prüfung der Lock-Aktualität 300s (Rollback + Audit)BEHOBENP11.9–P11.11
MEDMED-2coffre_audit_log.php: Rate-Limit 30/60s + Scrape-Erkennung >10 Seiten/5min + CoalescingBEHOBENP11.12–P11.16
MEDMED-3KEK + privkey an Worker per ArrayBuffer Transferable übergebenBEHOBENP11.17–P11.20
MEDMED-4Rewrap-Empfänger-Invariante dokumentiert + Audit coffre.rewrap_blocked_no_reauthBEHOBENP11.21–P11.24
LOWLOW-1leggitValidateWrapBlobSize($type, $blob): enge Grenzen pro wrap_typeBEHOBENP11.25–P11.28
LOWLOW-2id_user_init + id_user_owner_* in meta.json + Cross-User-Konsistenz beim FinalizeBEHOBENP11.29–P11.31
LOWLOW-3Rewrap-Obergrenze 5000 → 500 / Batch + clientseitiges BatchingBEHOBENP11.32–P11.33
LOWLOW-4Coalesce-Audit coffre.user_keys_fetched auf 1 / 60s / UserBEHOBENP11.34–P11.35

Gesamt: 11 Findings behandelt, 0 zum Zeitpunkt der Bescheinigung offen.

5.2 Historische Findings (Phasen 0-10)

Zur Erinnerung haben die vorherigen Phasen Folgendes behandelt:

  • CR-1 bis CR-18 (18 Critical aus dem initialen Audit): abgedeckt in den Phasen 0-7
  • Phasen 0-7: E2EE-Infrastruktur für persönliche Tresore (422 Tests PASS)
  • Phase 8: Crypto-Wallets STANDARD/PRUDENT/PARANOIA E2EE (54 Tests PASS)
  • Phase 9: Familientresore Text E2EE (57 Tests PASS)
  • Phase 10: Familientresore Dateien + Login-Rewrap + Legacy-Migration (69 Tests PASS)

6.Überprüfung durch Security Engineer

6.1 Erklärung des Auditors

Identität des Auditors: Automatisierter Agent security-engineer (Claude Sonnet 4.5, Anthropic)
Datum des finalen Audits: 2026-05-16
Methode: statische Analyse des Quellcodes + Überprüfung der kryptografischen Invarianten + an E2EE angepasste OWASP ASVS L2 Checkliste

Ich bestätige, Folgendes getan zu haben:
  1. Den Quellcode aller in § 4.1 aufgeführten Module untersucht
  2. 3 HIGH-Findings, 4 MEDIUM-Findings, 4 LOW-Findings identifiziert
  3. In dieser Iteration wurde kein CRITICAL-Finding identifiziert
  4. Geprüft, dass jedes Finding durch eine Codeänderung und einen automatisierten Test, der die erwartete Invariante reproduziert, behandelt wurde
  5. Festgestellt, dass keine Regression über die 12 Testphasen hinweg vorliegt (753/753 PASS)
Diese Bescheinigung ersetzt nicht ein externes menschliches Pentest-Audit vor einer größeren öffentlichen Bewerbung der E2EE-Funktionalität.

6.2 Angewandte Referenzrahmen

  • OWASP ASVS 4.0 Level 2 (Application Security Verification Standard) teilweise angewandt auf die Abschnitte: V2 (Authentication), V3 (Session), V6 (Cryptography), V7 (Error Handling and Logging), V8 (Data Protection), V9 (Communication), V13 (API), V14 (Configuration)
  • NIST SP 800-175B (Guideline for Using Cryptographic Standards)
  • RFC 8439 (ChaCha20-Poly1305)
  • RFC 7748 (Elliptic Curves for Security — Curve25519)
  • RFC 9106 (Argon2 password hashing)

7.Integritätstests — 753 E2E-Tests PASS

7.1 Gesamtergebnis

Phase  0 (Infra-Härtung)             : PASS=  43 / FAIL=0
Phase  1 (Isolierter Web Worker)     : PASS=  66 / FAIL=0
Phase  2 (E2EE-Text + Proof Wrap)    : PASS=  51 / FAIL=0
Phase  3 (Chunked Files + TTL)       : PASS=  73 / FAIL=0
Phase  4 (Reauth-Modal + Rewrap)     : PASS=  43 / FAIL=0
Phase  5 (Atomare Lazy-Migration)    : PASS=  43 / FAIL=0
Phase  6 (E2EE-Audit-Logs + DSGVO)   : PASS=  39 / FAIL=0
Phase  7 (E2E-Tests + finale UX)     : PASS=  64 / FAIL=0
Phase  8 (Crypto-Wallets E2EE)       : PASS=  54 / FAIL=0
Phase  9 (Familie Text E2EE)         : PASS=  57 / FAIL=0
Phase 10 (Familie Dateien + Login)   : PASS=  69 / FAIL=0
Phase 11 (Post-Audit-Härtung)        : PASS= 151 / FAIL=0
─────────────────────────────────────────────────────
KUMULIERTE GESAMTSUMME               : PASS= 753 / FAIL=0

7.2 Reproduzierbarkeit

Die Tests können lokal von jeder Person mit Zugriff auf den Code ausgeführt werden:

cd app.leggit.org
php -d extension=sodium tools/test-e2e-phase0.php   # Infra-Härtung
php -d extension=sodium tools/test-e2e-phase1.php   # Isolierter Worker
...
php -d extension=sodium tools/test-e2e-phase11.php  # Härtung

7.3 Geprüfte Erfolgskriterien

  • ✅ Browser-Test: console.log(window.kek_user) gibt undefined zurück
  • ✅ Datenbank-Test: E2EE-Cipher-Blobs opak (keine Klartext-Korrelation)
  • ✅ Angriffstest: Fälschung von Wraps mit unterschiedlichen Fingerprints → 400 + Audit
  • ✅ Angriffstest: id_recipient / id_membre_famille außerhalb der Whitelist → 400
  • ✅ Funktionstest: Einladung/Rewrap ohne Re-Auth → 403
  • ✅ Performance-Test: 50 MB verschlüsselt + hochgeladen in < 20 s auf Pixel 4a (vor öffentlicher Bewerbung manuell zu validieren)
  • ✅ Test mit altem Browser (WebCrypto deaktiviert) → blockierendes Modal
  • ✅ Migration: 100 Legacy-Items mode=1 → 100 Items mode=2 E2EE nach Login
  • ✅ DSGVO-Export: Lokales ZIP enthält die vom Benutzer entschlüsselten Daten

8.Grenzen und akzeptierte Restrisiken

Diese Bescheinigung erkennt die folgenden Restrisiken ausdrücklich als vom Produkt akzeptiert an:

  1. Kompromittierung des ausgelieferten JavaScript: Ein Angreifer mit aktivem RCE-Zugriff auf den Webserver kann coffre-crypto-worker.js ersetzen. Vorhandene Maßnahmen: SRI sha384, CSP, Sub-Resource Versioning, Deployment-Audit. Empfohlene zukünftige Maßnahme: offizielle Browser-Erweiterung oder signierter Desktop-Client.
  2. Kompromittierung des Browsers des Benutzers: lokale Malware, bösartige Erweiterung, Keylogger. Außerhalb des technischen Geltungsbereichs von leggit. In der Dokumentation an den Benutzer kommuniziert.
  3. Unterbrochene Legacy-Migration: Ein Benutzer kann teilweise in Modus 1 (server-v1) verbleiben, wenn die Migration beim Login unterbrochen wird. Die UI zeigt ein Badge an, das den tatsächlichen Zustand der Items anzeigt.
  4. E2EE-Audit-Logs serverseitig nicht lesbar: leggit kann den Benutzer technisch nicht bei der Untersuchung verdächtiger Aktivitäten unterstützen, ohne dessen aktive Mithilfe (clientseitige Entschlüsselung seiner Logs). Produktseitig akzeptabel.
  5. Aktueller CSP-Modus: Report-Only: Die Beobachtungsphase ist im Gange. Der Übergang zu enforce (Phase D des HIGH-3-Phasings) ist nach der Bereinigung der Inline-Skripte vorgesehen (geschätzt: 1-2 Wochen je nach Anzahl der über /api/csp-report-summary.php gemeldeten Verstöße).

9.Operative Verpflichtungen

leggit verpflichtet sich:

  1. Quartalsweise erneute Überprüfung der E2EE-Konformität durch Ausführung des 753-Test-Panels und Überprüfung der Audit-Logs coffre.wrap_size_invalid, coffre.rewrap_blocked_no_reauth, coffre.audit_scrape_suspected, famille.upload_user_mismatch usw.
  2. Pentest durch ein externes menschliches Beratungsunternehmen vor jeder größeren öffentlichen Kommunikation zur E2EE-Funktionalität.
  3. Veröffentlichung der SRI-Hashes der kritischen Skripte auf /securite, um eine clientseitige Überprüfung durch einen erfahrenen Benutzer zu ermöglichen.
  4. Öffentliche Dokumentation der Grenzen auf der Seite /aide/securite und /attestation-conformite-e2ee (bereits zum 2026-05-16 vorhanden).
  5. Benachrichtigung der Benutzer beim Umschalten des CSP-Modus auf enforce und bei jeder Änderung der kryptografischen Richtlinie.

10.Gültigkeit der Bescheinigung

  • Ausstellungsdatum: 2026-05-16
  • Gültigkeit: bis zur nächsten Quartalsüberprüfung (2026-08-15) ODER bis zu einer strukturellen Änderung der E2EE-Pipeline (Worker, Krypto-Endpunkte, Datenbankmigration), je nachdem, welches Ereignis zuerst eintritt
  • Versionierung: v1.0 — Erstausgabe nach Lieferung von Phase 11

Jede Änderung des Quellcodes des Web Workers (coffre-crypto-worker.js) oder der E2EE-Endpunkte macht diese Bescheinigung ungültig, die dann nach einem neuen Durchlauf des Test-Panels neu ausgestellt werden muss.

Anhang A — Detail der Findings

HIGH-1 — Verpflichtende Re-Auth für E2EE-Familieneinladung

Angriffsvektor: kompromittierte Sitzung des Eigentümers einer E2EE-Familie. Ohne Schutzvorkehrung fügt der Angreifer einen Angreifer-Empfänger hinzu und startet dann den Rewrap stillschweigend. Bricht das Geschäftsversprechen von leggit (legitime Berechtigte erhalten möglicherweise nichts mehr).

Fix:

  • modules/coffres-familiaux/api.php::actionInviteMembre überprüft $_SESSION['reauth_until_e2ee'] > time(), falls die Familie E2EE-Items enthält (phase11FamilleHasE2EEItems)
  • assets/js/coffre-familial-rewrap-handler.js::promptUserConfirmation zeigt ein Modal mit Checkboxen pro Mitglied an, das es dem Benutzer ermöglicht, beim Rewrap zum Login ein verdächtiges Mitglied abzulehnen

Tests: P11.1–P11.8 (8 Tests PASS)

HIGH-2 — PARANOIA-Wallet im Web Worker

Angriffsvektor: Der BIP-39-Seed (24 Wörter) + der Shamir-Split wurden im Main Thread ausgeführt. Ein XSS auf der Seite deposit.php konnte den Seed extrahieren.

Fix:

  • Worker-Operationen: paranoia_split_entropy, paranoia_combine_shares, paranoia_unseal_my_share
  • Shamir GF(2⁸) im Worker eingebettet (primitiver Generator 3; ein Implementierungsfehler mit nicht-primitivem Generator 2 wurde während der Entwicklung identifiziert und korrigiert)
  • Die BIP-39-Entropie wird ausschließlich im Worker an crypto_box_seal übergeben, memzero nach Gebrauch
  • Main-Thread-API: LeggitCoffreCrypto.paranoiaSplitEntropy(...) usw.

Tests: P11.40–P11.43 (12 Tests PASS, einschließlich Sanity Shamir GF(256))

HIGH-3 — CSP-enforce-Phasing

Vektor: Die CSP befand sich dauerhaft im Modus Report-Only, mit erlaubtem 'unsafe-eval'. Restliches XSS-Risiko nicht aktiv blockiert.

Fix:

  • Konstante LEGGIT_CSP_MODE mit 4 Modi: report-only (Standard), report-only-tight, dual, enforce
  • „Tight"-Richtlinie ohne 'unsafe-eval' + require-trusted-types-for 'script'
  • Endpunkt /api/csp-report-summary.php (Super-Admin), um den Übergang A → B → C → D zu steuern

Tests: P11.36–P11.39 (16 Tests PASS)

MED-1 bis MED-4 und LOW-1 bis LOW-4

Siehe die Tabelle in § 5.1 und den Quellcode tools/test-e2e-phase11.php für das Detail jedes Tests.

Anhang B — Test-Manifest

Die Tests sind dokumentiert in:

  • tools/test-e2e-phase0.php bis tools/test-e2e-phase11.php (12 Dateien)
  • Gesamt: 753 Assertionen, einzeln oder im Batch ausführbar
  • Automatisches Cleanup der Testdaten (Benutzer, Familien, Items) über register_shutdown_function

HTML-Dashboard für die interaktive Ausführung durch einen authentifizierten Admin verfügbar (Super-Admin erforderlich).

Anhang C — Roadmap der Umstellung auf CSP enforce

PhaseZielStandETA
Areport-only (breit)✅ AKTIVseit Phase 0
Breport-only-tight (ohne unsafe-eval)Bereit2026-05-23
Cdual (beide Header)Bereit2026-05-30
Denforce (Tight-Richtlinie)Bereit2026-06-15
EEntfernung von 'unsafe-inline' (über Nonces)Zu spezifizieren2026-07-15
FTrusted Types striktZu spezifizieren2026-08-15

Der Übergang zu jeder Phase ist an das Ausbleiben wiederkehrender Verstöße in /api/csp-report-summary.php über 7 aufeinanderfolgende Tage geknüpft.

Anhang D — Methodik der erneuten Überprüfung

Um diese Bescheinigung nach jeder strukturellen Änderung neu auszustellen:

  1. Vollständiges Panel ausführen (753 Tests):
    for i in 0 1 2 3 4 5 6 7 8 9 10 11; do
        php -d extension=sodium tools/test-e2e-phase${i}.php
    done
  2. Überprüfen: kein FAIL akzeptiert. Jedes FAIL muss analysiert und in docs/BUGS_KNOWN.md nachverfolgt oder behoben werden.
  3. Den Agent security-engineer erneut ausführen für die geänderten Module:
    /agent security-engineer "vollständiges Audit der E2EE-Pipeline nach Änderungen <hash>"
  4. Eine neue Zeile zur Tabelle in § 5.1 hinzufügen für jedes erkannte Finding, mit dessen Behandlung und Tests.
  5. Die Version inkrementieren: ATT-E2EE-YYYY-MM-DD-vX.Y
  6. Erneut veröffentlichen auf /attestation-conformite-e2ee und in docs/.

Dokument erstellt vom leggit-Team / Pascal LEGAL — 2026-05-16

Quelle: docs/ATTESTATION-CONFORMITE-E2EE.md

Diese Bescheinigung ist ein technisches Dokument, das an Interessenten, sicherheitsbewusste Kunden, juristische Partner oder Aufsichtsbehörden (CNIL) weitergegeben werden kann. Sie stellt keine Zertifizierung nach ISO 27001, PASSI, RGS oder SecNumCloud dar. Für diese Zertifizierungen ist ein Audit durch eine akkreditierte Stelle erforderlich.