Aller au contenu

PD-277 — Dossier de conformité Gate 5 (AMBIGUITY) — v1

1. Références

  • Story : PD-277 — PV PRE — Anti-rejeu nonce et PKI certificate binding (v1.1)
  • Gate : 5 (AMBIGUITY)
  • Itération : v1
  • Date : 2026-02-28
  • Documents évalués : specification (v2), tests (v2), plan, code-contracts

2. Sources

Phase Document Auteur
Phase 1 — Review PD-277-review-step5.md ChatGPT (OpenCode)
Phase 2 — Confrontation PD-277-confrontation-step5-v1.md Claude -p
Plan d'implémentation PD-277-plan.md Claude -p
Code contracts PD-277-code-contracts.yaml Claude -p

3. Synthèse des écarts

3.1. Écarts convergents (Review + Confrontation)

ID Type Description Gravité
ECT-01 Non-conformité DDL DEFAULT '' sur owner_certificate_id et recipient_certificate_id non contractualisé dans le DDL canonique de la spec §6 MAJEUR
ECT-02 Couverture PKI Le plan ne décrit que la validation non-nullité/non-vacuité des certificats, sans contrôle "invalide/révoqué/incompatible mandat" exigé par INV-277-04 et testé par TC-ERR-06, TC-NEG-05 MAJEUR
ECT-03 Fail-closed legacy Le flux reEncrypt ne contient pas de contrôle explicite de validité du binding certificat pour les ReKeys hérités avec certificats vides — fail-closed non démontré (INV-277-01) MAJEUR
ECT-04 Comportement non spécifié Condition status=ACTIVE ajoutée dans reEncrypt (Plan §2 F2 étape 3), non explicitée dans la spécification canonique PD-277 MAJEUR
ECT-05 Frontière code contracts Fichier legal-rekey-manager.service.ts alloué à deux modules propriétaires distincts (pd277-nonce-anti-replay et pd277-pki-binding) — violation de frontière MAJEUR
ECT-06 Complétude code contracts Composant C5 (LegalReKeyRepository) cité comme mécanisme principal sans contrat de module/fichier dédié MAJEUR
ECT-07 Hypothèse implicite Responsabilité de génération du nonce (appelant vs module legal-pre) non verrouillée au niveau contrat d'interface MINEUR
ECT-08 Traçabilité dépendances Dépendances inter-PD sans statut structuré DONE/TODO/STUB MINEUR

3.2. Zones d'ombre (Confrontation seule)

  • Mécanisme d'extraction certificateId depuis le résultat TSP non détaillé
  • Performance JSONB @> sur used_nonces non évaluée
  • Journalisation des opérations reEncrypt non spécifiée
  • Coexistence reEncrypt / reEncryptWithNonce non clarifiée

4. Scoring

Méthodologie

Base 10, pénalités par écart non résolu : - BLOQUANT : -2 par écart - MAJEUR : -1 par écart - MINEUR : -0.25 par écart

Répartition par critère

Critère Écarts affectants Calcul Score
feasibility ECT-01 (DDL), ECT-04 (status=ACTIVE) 10 - 2×1 + 0.5 (zones d'ombre mineures) 8.0
coverage ECT-02 (PKI), ECT-03 (fail-closed), ECT-06 (repository) 10 - 3×1 7.0
risk_mitigation ECT-03 (fail-closed legacy), ECT-02 (PKI invalide) 10 - 2×1 - 0.25 (ECT-07 nonce) 7.75
coherence ECT-05 (frontière), ECT-04 (non spécifié), ECT-08 (dépendances) 10 - 2×1 - 0.25 (ECT-08) 7.75

Justification feasibility : Le plan est globalement faisable. Le DEFAULT '' (ECT-01) est un choix de migration raisonnable mais non contractualisé. La condition status=ACTIVE (ECT-04) est un ajout logique mais non spécifié. Les 2 zones d'ombre techniques (performance JSONB, extraction certificat) sont mineures. Score = 8.0.

Justification coverage : 3 écarts majeurs de couverture : la validation PKI reste superficielle (ECT-02), le fail-closed sur ReKeys hérités n'est pas démontré (ECT-03), et le repository n'a pas de code contract (ECT-06). Score = 7.0.

Justification risk_mitigation : Le fail-closed crypto est partiellement adressé mais pas démontré sur le chemin legacy (ECT-03). La validation PKI incomplète (ECT-02) laisse des cas d'erreur non couverts. Le nonce serveur-only implicite (ECT-07) est mineur. Score = 7.75.

Justification coherence : La violation de frontière code contracts (ECT-05) et le comportement non spécifié (ECT-04) réduisent la cohérence. Les dépendances non structurées (ECT-08) sont mineures. Score = 7.75.

5. Verdict attendu

  • Moyenne : (8.0 + 7.0 + 7.75 + 7.75) / 4 = 7.625
  • Critères >= 8 : ¼ (feasibility)
  • Critères < 8 : ¾ (coverage, risk_mitigation, coherence)
  • Verdict attendu : RESERVE (moyenne >= 7, au moins un score < 8)