Aller au contenu

PD-277 — Expression de besoin

Story

PD-277 — PV PRE — Implémenter anti-rejeu nonce et PKI certificate binding (v1.1)

Contexte

L'audit de vérification formelle PV PRE (Prolog, 24 checks) identifie 2 écarts non conformes sur les 24 checks BLOQUANTS. Les 22 autres checks passent à 100%. Le service PRE Umbral, les validateurs (ArtefactValidator, ContextValidator, SizeLimitValidator), l'orchestration légale et la destruction sont entièrement conformes.

Écarts à corriger

CHECK 23 — Anti-rejeu nonce (KO)

  • L'entité LegalReKey ne possède pas de colonne used_nonces
  • Aucun mécanisme de détection de rejeu lors de reEncrypt()
  • Risque : un attaquant pourrait rejouer une opération de re-chiffrement avec les mêmes paramètres

CHECK 24 — PKI Certificate Binding (KO)

  • L'entité LegalReKey ne possède pas les colonnes owner_certificate_id et recipient_certificate_id
  • La validation de certificats existe dans MandateValidatorService mais n'est pas liée au ReKey
  • Risque : une clé de re-chiffrement n'est pas cryptographiquement liée aux certificats PKI des parties

Objectif

Atteindre 24/24 OK à l'audit Prolog :

swipl -l _generated-facts.pl -l pv_pre_compliance.pl -g "run_audit." -t "halt."

Périmètre

  1. Anti-rejeu nonce : Ajouter colonne used_nonces sur LegalReKey, mécanisme de validation nonce dans reEncrypt(), migration TypeORM
  2. PKI Certificate Binding : Ajouter colonnes owner_certificate_id et recipient_certificate_id sur LegalReKey, validation lors de generateReKey(), migration TypeORM
  3. Régénérer les faits Prolog (_generated-facts.pl) pour refléter les nouveaux champs
  4. Tests couvrant anti-rejeu et certificate binding

Learnings injectés

  • [PD-63] crypto.randomUUID() obligatoire pour tout identifiant aléatoire (Sonar flagge Math.random())
  • [PD-41] Fail-closed systématique crypto, formats normalisés PRE-1.0
  • [PD-238] crypto.timingSafeEqual() pour comparaisons sécuritaires

Hors périmètre

  • Les 5 checks de complétude (non-bloquants) : cron destruction, cron expiration, ETSI trusted list, blockchain anchoring, revocation propagation
  • Modifications au service PRE bas-niveau (pre.service.ts, umbral.provider.ts) — seul le module legal-pre est impacté

Critères d'acceptation

  • 24/24 checks OK à l'audit Prolog
  • Migration TypeORM exécutable sans erreur
  • Tests unitaires couvrant les 2 nouveaux mécanismes
  • Fail-closed : toute erreur nonce/certificat → rejet de l'opération
  • Aucune régression sur les 22 checks existants

Validation PO

Validé — 2026-02-28