Aller au contenu

PD-31 — Expression de besoin

Audit Log des Authentifications

Story : PD-31 Epic : PD-182 (AUTH) Projet : ProbatioVault-backend Version : 1.0 Date : 2026-02-15


1. Contexte

ProbatioVault est une infrastructure de preuve numérique souveraine fondée sur : - Un modèle Zero-Knowledge (SRP-6a, dérivations locales) - Une séparation forte des responsabilités (Backend / HSM / Stockage) - Un journal append-only probatoire - Un ancrage périodique (Merkle + TSA + blockchain)

L'authentification constitue le point d'entrée critique de la plateforme. Toute opération d'accès doit être traçable, horodatée et auditée, conformément : - Aux exigences d'auditabilité (architecture technique) - Aux exigences probatoires (journal immuable + ancrage périodique — Preuve Composite) - Aux normes de conformité (RGPD, NF Z42-013, ISO 14641)


2. Problème à résoudre

Aujourd'hui : Les événements d'authentification ne sont pas systématiquement journalisés de manière probatoire. En cas de litige, d'audit sécurité ou d'expertise judiciaire, il est impossible de : - Prouver qu'un utilisateur s'est connecté à une date précise - Démontrer qu'une tentative d'accès non autorisée a eu lieu - Fournir des preuves d'existence antérieure des logs

Demain : Chaque événement d'authentification sera intégré dans le cycle probatoire complet, permettant une opposabilité juridique.


3. Objectifs

3.1 Objectif principal

Garantir que toutes les opérations d'authentification soient : 1. Enregistrées de manière exhaustive 2. Horodatées avec précision UTC 3. Associées à des métadonnées contextuelles (IP, device, geoloc) 4. Intégrées dans le journal append-only 5. Incluses dans le batch Merkle périodique 6. Ancrées via TSA + blockchain 7. Exploitables pour audit, investigation ou production judiciaire

3.2 Objectifs secondaires

  • Alerting temps réel : Détecter et signaler les patterns anormaux (bruteforce, geo-hopping)
  • Scoring de risque : Attribuer un score de risque à chaque événement
  • Preuve d'alerte : Les alertes elles-mêmes doivent être intégrées au cycle probatoire

4. Périmètre fonctionnel

4.1 Événements à journaliser

Événement Code Description
Login réussi AUTH_LOGIN_SUCCESS Connexion utilisateur validée
Login échoué AUTH_LOGIN_FAILURE Tentative de connexion rejetée
Logout AUTH_LOGOUT Déconnexion volontaire
MFA tentative AUTH_MFA_ATTEMPT Initiation d'une vérification MFA
MFA réussi AUTH_MFA_SUCCESS Code MFA validé
MFA échoué AUTH_MFA_FAILURE Code MFA rejeté
Refus device révoqué AUTH_DEVICE_REVOKED Accès refusé : device blacklisté
Refus token invalide AUTH_TOKEN_INVALID Accès refusé : JWT expiré/invalide

4.2 Canaux couverts

Canal Identifiant Spécificités
App iOS ios Device ID via Keychain, biométrie
PWA pwa Browser fingerprint, WebAuthn
API B2B api API Key, IP fixe entreprise

4.3 Métadonnées à collecter

Champ Type Description Obligatoire
event_id UUID v7 Identifiant unique monotonique Oui
event_type Enum Code de l'événement (voir 4.1) Oui
timestamp ISO-8601 Horodatage UTC Oui
user_id UUID Identifiant utilisateur interne Oui*
identity_level Enum email / oidc / enterprise Oui*
device_id UUID Identifiant device si disponible Non
channel Enum ios / pwa / api Oui
ip_address String IPv4 ou IPv6 Oui
user_agent String User-Agent complet Oui
geo_country ISO 3166-1 Code pays (FR, US, etc.) Oui
geo_region String Région/État Non
success Boolean Résultat de l'opération Oui
failure_reason Enum Code erreur si échec Conditionnel
session_id UUID Identifiant session JWT Conditionnel
correlation_id UUID Traçabilité inter-services Oui
risk_score Float 0-1 Score de risque calculé Oui

*Peut être absent pour tentatives sur identifiant inconnu

4.4 Données exclues (Zero-Knowledge)

Les logs ne doivent JAMAIS contenir : - Mot de passe (hashé ou non) - Secret MFA (TOTP seed, recovery codes) - Clés cryptographiques - Données personnelles non nécessaires (principe de minimisation RGPD)


5. Contraintes

5.1 Immutabilité (NON NÉGOCIABLE)

Contrainte Description
Append-only Aucune modification ni suppression
Horodatage UTC + millisecondes
Intégrité Hash SHA-3-256 par événement
Chaînage Hash(N) inclut Hash(N-1)
Ancrage Intégration batch Merkle périodique

5.2 Architecture probatoire

Événement Auth
Journal append-only (PostgreSQL + triggers)
Batch Merkle (toutes les 10 min ou 1000 événements)
TSA (horodatage certifié)
Blockchain (ancrage public)
Preuve Composite vérifiable

5.3 Rétention

Durée Stockage Usage
3 ans PostgreSQL (hot) Accès opérationnel rapide
10 ans S3 Glacier (cold) Archivage légal

Migration automatique après 3 ans vers cold storage.

5.4 Performance

Métrique Cible
Latence insertion < 5 ms (P99)
Throughput > 1000 evt/s
Impact sur auth < 1 ms overhead

L'insertion dans le journal ne doit JAMAIS bloquer le flow d'authentification (async + queue).

5.5 Confidentialité

  • Logs accessibles uniquement aux rôles ADMIN et AUDITOR
  • Chiffrement at-rest (AES-256)
  • Chiffrement in-transit (TLS 1.3)
  • Respect séparation Zero-Knowledge

6. Alerting temps réel

6.1 Patterns à détecter

Pattern Description Seuil par défaut
Bruteforce Échecs répétés sur même user_id > 5 en 5 min
Credential stuffing Échecs depuis même IP, users différents > 10 en 1 min
Geo-hopping Connexions depuis pays différents < 2h entre pays
Device anomaly Nouveau device + échec Immédiat
Token spray Tentatives token invalide > 20 en 1 min

6.2 Caractéristiques

  • Configurables : Seuils modifiables sans redéploiement
  • Scoring : Chaque alerte contribue au risk_score de l'événement
  • Journalisées : Les alertes sont elles-mêmes des événements probatoires
  • Intégrées : Incluses dans le cycle d'ancrage Merkle

6.3 Actions

Niveau Action
INFO Log uniquement
WARNING Notification admin
CRITICAL Notification + blocage temporaire compte

7. Export judiciaire

7.1 Format Preuve ProbatioVault

L'export pour expertise judiciaire doit inclure :

  1. Sous-ensemble des logs demandés (filtré par date, user, etc.)
  2. Merkle path correspondant (preuve d'inclusion)
  3. Merkle root ancré
  4. Jeton TSA (horodatage certifié)
  5. Transaction blockchain (preuve d'ancrage public)
  6. Métadonnées du batch d'ancrage

7.2 Garanties

L'export prouve : - Les logs existaient à la date T (antériorité) - Ils n'ont pas été modifiés depuis (intégrité) - Ils faisaient partie d'un ensemble cohérent (batch) - Cet ensemble a été figé cryptographiquement (Merkle) - Ce figement est ancré via tiers de confiance (TSA + blockchain)


8. Hors périmètre

Les éléments suivants sont explicitement exclus de cette story :

  • Dashboard de visualisation des logs (story dédiée)
  • Analytics temps réel (Grafana, Prometheus)
  • Intégration SIEM externe (Splunk, ELK)
  • Notifications push utilisateur
  • Rapport PDF certifié automatique

9. Critères de succès

# Critère Mesurable
1 100% des événements auth sont journalisés Count(events) = Count(auth_requests)
2 Latence insertion < 5ms P99 Metrics Prometheus
3 Intégrité vérifiable par Merkle path Test de vérification
4 Alertes déclenchées en < 1s Test de bruteforce
5 Export judiciaire complet et vérifiable Test de vérification end-to-end
6 Rétention 10 ans respectée Policy Glacier configurée
7 Zero données sensibles dans les logs Audit RGPD

10. Dépendances

Dépendance Story Statut
Journal append-only PD-37 DONE
Batch Merkle PD-39 DONE
Ancrage TSA PD-39 DONE
Ancrage blockchain PD-40 DONE
Auth SRP-6a PD-24/25 DONE
Session management PD-28 DONE

11. Risques identifiés

Risque Impact Mitigation
Volume logs élevé Coût stockage Compression + tiering S3
Latence géolocalisation Impact perf Cache GeoIP + async
Faux positifs alerting Fatigue opérateur Scoring + tuning
RGPD violation Légal Audit minimisation

Validation PO

Date : 2026-02-15 Statut : En attente validation


Document généré dans le cadre du workflow de gouvernance ProbatioVault.