Aller au contenu

PD-265 — Specification Review

Auditeur : Claude (Opus 4.6) Date : 2026-03-02 Documents d'entrée : PD-265-specification.md, PD-265-tests.md Domaine : legal-compliance (backend — monitoring TSA RFC 3161)


Synthèse

Gravité Nombre
Bloquant 4
Majeur 6
Mineur 4
Total 14

Points identifiés

POINT-01

Type : Contradiction Référence : INV-265-11 (§4) vs INV-265-01 / INV-265-02 / INV-265-05 / INV-265-07 (§4), §5.4 machine d'états, TC-ERR-12 Description : La machine d'états est mono-état : chaque état DEGRADED_* ne peut transiter que vers HEALTHY (§5.4). INV-265-11 déclare ce modèle exhaustif et TC-ERR-12 valide explicitement le refus de DEGRADED_NTS -> DEGRADED_TRUSTLIST. Or INV-265-01 impose DEGRADED_NTS si NTS échoue, INV-265-02 impose DEGRADED_REVOCATION si OCSP ≠ GOOD, etc. — chaque invariant utilise « DOIT ». Si le système est en DEGRADED_NTS et qu'une vérification OCSP retourne REVOKED, INV-265-02 exige le passage à DEGRADED_REVOCATION mais INV-265-11 l'interdit. Les deux invariants ne peuvent pas être satisfaits simultanément en cas de défaillances multiples concurrentes. Impact : En production, les défaillances multiples sont courantes (panne réseau affectant NTS + OCSP + Trusted List). Le système ne pourrait signaler qu'une seule défaillance, masquant les autres — violation directe de la traçabilité et de la conformité. Gravité : Bloquant


POINT-02

Type : Ambiguïté Référence : §5.5 F1/F2/F5/F6, §6 cas d'erreur, INV-265-01 (émission bloquée), INV-265-02 (§6 « émission TST interdite ») Description : Le blocage d'émission de TST est explicitement spécifié pour DEGRADED_NTS (INV-265-01) et DEGRADED_REVOCATION (§6). En revanche, aucune règle ne précise si l'émission de TST est autorisée ou interdite en état DEGRADED_TRUSTLIST, DEGRADED_KEY_LIFECYCLE ou MAINTENANCE. L'absence de spécification pour ces trois états constitue une ambiguïté opérationnelle. Impact : Un TST signé par une autorité retirée de la Trusted List ETSI (DEGRADED_TRUSTLIST) ou par une clé dont la rotation est en retard (DEGRADED_KEY_LIFECYCLE) pourrait être non conforme eIDAS. L'absence de règle empêche un implémenteur tiers de décider. Gravité : Bloquant


POINT-03

Type : Ambiguïté Référence : INV-265-06 (§4), §5.2 paramètre rehorodatageLeadTime, TC-ERR-10 Description : INV-265-06 stipule « absence de traitement dans le délai contractuel => alerte critique ». TC-ERR-10 teste « le délai contractuel de traitement est dépassé sans re-horodatage ». Mais aucun paramètre ne définit ce « délai contractuel de traitement ». Le rehorodatageLeadTime définit la fenêtre d'éligibilité (45 jours par défaut), pas le délai maximum pour exécuter le re-horodatage d'un TST éligible une fois détecté. Sans valeur numérique, l'invariant est non testable de manière déterministe. Impact : TC-ERR-10 ne peut pas être implémenté sans inventer un seuil. L'alerte critique ne peut pas être déclenchée sur critère objectif. Gravité : Bloquant


POINT-04

Type : Contradiction Référence : §5.2 paramètre rehorodatageBatchSize (« Clamp à max »), INV-265-12 (§4), CA-08 Description : INV-265-12 déclare « Aucune hypothèse implicite de format de données n'est autorisée ; tous formats sont définis en §5.1 ». CA-08 exige « Paramètres hors bornes numériques rejetés ». Or le paramètre rehorodatageBatchSize en §5.2 spécifie « Clamp à max si dépassement runtime » au lieu de « Rejet config » comme les 13 autres paramètres. TC-NEG-05 valide ce comportement de clamp. La spec contredit son propre invariant (INV-265-12 : pas d'hypothèse implicite) en traitant silencieusement un dépassement au lieu de le rejeter. Impact : Un implémenteur appliquant INV-265-12 strictement rejetterait la valeur ; un implémenteur suivant §5.2 la clamperait. Comportement contradictoire. Gravité : Majeur


POINT-05

Type : Incohérence Spec↔Tests Référence : §5.4 transitions, TC-NOM-03 (retour DEGRADED_REVOCATION -> HEALTHY) Description : La spec §5.4 définit la condition de retour : « DEGRADED_REVOCATION -> HEALTHY : AUTORISÉE si OCSP=GOOD et CRL valide non listée ». TC-NOM-03 ajoute une condition absente de la spec : « CRL retourne NOT_LISTED et fraîcheur <= crlMaxAge ». La contrainte de fraîcheur CRL pour le retour à HEALTHY n'est pas spécifiée dans la machine d'états. Impact : Le test impose une condition plus restrictive que la spec. Un implémenteur suivant la spec seul ne vérifierait pas la fraîcheur CRL au retour. Gravité : Majeur


POINT-06

Type : Incohérence Spec↔Tests Référence : INV-265-10 -> CA-04 -> TC-NOM-07, matrice de couverture §2 Description : La matrice de couverture des tests associe INV-265-10 (« tests contractuels sign+verify roundtrip en CI sont obligatoires ») au critère CA-04 (« Rotation clé HSM avec labels conformes pv-tsa-signing-YYYY »). Ce sont deux exigences distinctes : le roundtrip cryptographique et la rotation de clé. Le mapping INV-265-10 -> CA-04 est incorrect ; INV-265-10 devrait être lié à un critère d'acceptation dédié ou au minimum à une ligne séparée. Impact : Un auditeur vérifiant CA-04 pourrait conclure que le roundtrip est couvert par la rotation, ou inversement qu'il manque un CA pour le roundtrip. Gravité : Majeur


POINT-07

Type : Hypothèse dangereuse Référence : §5.4 retour DEGRADED_NTS -> HEALTHY, §5.2 ntsCheckInterval, §5.3 maxDegradedDuration Description : Le retour de DEGRADED_NTS à HEALTHY requiert « 2 contrôles consécutifs » conformes (§5.4). Le temps minimum de retour est donc 2 × ntsCheckInterval. Avec ntsCheckInterval max = 3600s, le retour minimum est 7200s (2h). Or maxDegradedDuration par défaut est 2h (7200s) et son minimum est 5min. Pour ntsCheckInterval >= 3601s, le système atteint mécaniquement l'escalade critique avant de pouvoir mathématiquement revenir à HEALTHY. Impact : Configuration valide selon les bornes individuelles mais opérationnellement impossible. Aucune contrainte croisée entre ntsCheckInterval et maxDegradedDuration n'est spécifiée. Gravité : Bloquant


POINT-08

Type : Ambiguïté Référence : §5.4 état MAINTENANCE, §5.5, §4 invariants Description : L'état MAINTENANCE est listé comme état valide de la machine tsaServiceState. Les transitions HEALTHY -> MAINTENANCE et MAINTENANCE -> HEALTHY sont autorisées. Mais aucun invariant, critère d'acceptation ou flux fonctionnel ne définit les restrictions applicables en mode maintenance : émission TST autorisée ou non, contrôles périodiques actifs ou suspendus, clés accessibles ou verrouillées. Impact : L'état MAINTENANCE est une coquille vide dans la spec. Un implémenteur ne peut pas déterminer le comportement attendu. Gravité : Majeur


POINT-09

Type : Ambiguïté Référence : INV-265-06 (§4), §5.5 F3, §5.5 F4 Description : Le terme « archivage logique » est utilisé pour l'ancienne clé après rotation (§5.5 F3, TC-NOM-04) sans définition. La spec ne précise pas : (a) si la clé archivée reste accessible pour vérification de TST existants, (b) si elle est supprimée du HSM, © quel label elle porte après archivage, (d) si elle peut être ré-activée. Impact : Le re-horodatage (F4) pourrait nécessiter l'ancienne clé pour vérifier les TST avant ré-émission. Si « archivage logique » signifie suppression, le flux F4 est cassé. Gravité : Majeur


POINT-10

Type : Incohérence Spec↔Tests Référence : §5.4 transitions, TC-NOM-02, TC-ERR-12, §2 matrice de couverture Description : Aucun test ne couvre l'entrée et la sortie de l'état MAINTENANCE (HEALTHY -> MAINTENANCE, MAINTENANCE -> HEALTHY). TC-NEG-07 vérifie qu'une transition illégale depuis MAINTENANCE est refusée, mais les transitions légitimes ne sont pas testées. La matrice §2 ne mentionne aucun TC pour les transitions MAINTENANCE. Impact : L'état MAINTENANCE est partiellement couvert (test négatif seul, pas de test nominal). Gravité : Mineur


POINT-11

Type : Ambiguïté Référence : §5.3 SLA maxDegradedDuration, §5.4 machine d'états Description : maxDegradedDuration (défaut 2h) déclenche « Escalade critique exploitation » au dépassement. La spec ne précise pas : (a) si ce SLA s'applique à chaque état dégradé indépendamment, (b) au temps cumulé dans tout état dégradé, © ce que « escalade critique exploitation » implique concrètement (notification ? passage automatique en MAINTENANCE ? intervention humaine obligatoire ?). Impact : Sans définition de l'action d'escalade, le SLA est non testable et non auditable. Gravité : Majeur


POINT-12

Type : Ambiguïté Référence : §6 cas d'erreur (alertes), §8 observabilité, CA-02, CA-03, CA-06 Description : Le terme « alerte critique » est utilisé dans 5 contextes différents (NTS, révocation, re-horodatage, Trusted List, rotation) sans définition du mécanisme : format, canal de diffusion, consommateur cible, acquittement. §8 mentionne « événement signé / horodaté » pour certaines alertes mais pas toutes. La distinction entre « alerte critique » et « métrique d'état » n'est pas formalisée. Impact : Un implémenteur ne peut pas distinguer une alerte d'une métrique. Le test d'observabilité (§8) est incomplet. Gravité : Mineur


POINT-13

Type : Risque sécu/conformité Référence : §5.4 retour DEGRADED_REVOCATION -> HEALTHY, §5.2 ocspCheckInterval (max 86400s) Description : Le retour de DEGRADED_REVOCATION à HEALTHY est conditionné à « OCSP=GOOD et CRL valide non listée ». Mais les contrôles sont périodiques (ocspCheckInterval jusqu'à 86400s = 24h). Entre deux vérifications, si un certificat est rétabli (CRL mise à jour), le système reste en DEGRADED_REVOCATION jusqu'au prochain cycle. Inversement, après un retour à HEALTHY, si le certificat est re-révoqué, il faut attendre le prochain cycle pour détecter la régression. Impact : Fenêtre de divergence état/réalité pouvant atteindre 24h. L'absence de vérification immédiate sur événement ou de contrôle renforcé en sortie de dégradation crée un risque de conformité temporel. Gravité : Mineur


POINT-14

Type : Hypothèse dangereuse Référence : INV-265-06 (§4), §5.5 F4, INV-265-05, §5.4 état DEGRADED_KEY_LIFECYCLE Description : Le re-horodatage (F4) requiert l'émission d'un nouveau TST, donc une signature avec la clé TSA active. Si le système est en DEGRADED_KEY_LIFECYCLE (clé active dont l'âge dépasse keyRotationPeriod), la spec ne précise pas si le re-horodatage est autorisé avec cette clé « périmée » ou s'il est bloqué. Bloquer le re-horodatage empêche de protéger les TST expirants ; l'autoriser utilise une clé dont la rotation est en retard. Impact : Dilemme opérationnel non résolu entre continuité de conformité long terme (INV-265-06) et robustesse cryptographique (INV-265-05). Gravité : Mineur


Récapitulatif par gravité

Bloquants (4)

# Type Résumé
POINT-01 Contradiction Machine d'états mono-état incompatible avec invariants de dégradation multi-conditions
POINT-02 Ambiguïté Blocage TST non spécifié pour DEGRADED_TRUSTLIST, DEGRADED_KEY_LIFECYCLE, MAINTENANCE
POINT-03 Ambiguïté Délai contractuel de traitement re-horodatage non défini (INV-265-06 non testable)
POINT-07 Hypothèse dangereuse ntsCheckInterval max vs maxDegradedDuration min : retour HEALTHY mathématiquement impossible

Majeurs (6)

# Type Résumé
POINT-04 Contradiction rehorodatageBatchSize clamp vs INV-265-12 rejet obligatoire
POINT-05 Incohérence Spec↔Tests TC-NOM-03 ajoute contrainte fraîcheur CRL absente de §5.4
POINT-06 Incohérence Spec↔Tests Mapping INV-265-10 (roundtrip) -> CA-04 (rotation) incorrect
POINT-08 Ambiguïté État MAINTENANCE sans restrictions définies
POINT-09 Ambiguïté Archivage logique de clé non défini
POINT-11 Ambiguïté maxDegradedDuration : scope et action d'escalade non définis

Mineurs (4)

# Type Résumé
POINT-10 Incohérence Spec↔Tests Transitions MAINTENANCE non testées (nominal)
POINT-12 Ambiguïté Alerte critique : mécanisme, format, canal non définis
POINT-13 Risque sécu/conformité Fenêtre de divergence état/réalité jusqu'à 24h sur révocation
POINT-14 Hypothèse dangereuse Re-horodatage en DEGRADED_KEY_LIFECYCLE : dilemme non résolu