Aller au contenu

PD-282 - Scenarios de tests contractuels

1. References

  • Specification : PD-282-specification.md
  • Epic : Pas d'epic parent (story independante, labels: crypto, legal-compliance, rfc-pv-proof)

2. Matrice de couverture

ID Invariant ID Critere ID Test Couverture Commentaire
INV-282-01 CA-01, CA-02 TC-NOM-01, TC-ERR-01, TC-ERR-03 Oui Presence + validite crypto du envelopeSeal
INV-282-02 CA-02 TC-NOM-01, TC-ERR-02 Oui Exclusion stricte de envelopeSeal du payload signe
INV-282-03 CA-03 TC-NOM-02 Oui Alteration 1 octet => valid=false
INV-282-04 CA-04, CA-08 TC-NOM-03, TC-NOM-04, TC-ERR-04 Oui Suffisance du verificationMaterial en Mode A
INV-282-05 CA-10 TC-NOM-03, TC-NOM-04, TC-NEG-05 Oui validationPolicy explicite et contrainte enum
INV-282-06 CA-06 TC-INV-06, TC-NEG-08 Oui Verification heuristique anti-secrets sur patterns interdits
INV-282-07 - TC-INV-07 Oui (partiel) Testable techniquement sur artefacts persistes, perimetre runtime/HSM requis
INV-282-08 CA-07 TC-NOM-05, TC-ERR-07 Oui Immutabilite post-persistance
INV-282-09 CA-11 TC-NOM-06, TC-INV-09 Oui SEALED -> * interdit
INV-282-10 CA-11 TC-INV-10 Oui SEALED -> UNSEALED interdit explicitement
INV-282-11 CA-09 TC-NOM-07 Oui Verification historique apres rotation de cle
INV-282-12 CA-12 TC-ERR-06, TC-NEG-01..TC-NEG-07 Oui (partiel) Bornes format testables; performance P95 depend de l'environnement de reference

3. Scenarios de test - Flux nominaux

TEST-ID: TC-NOM-01
Reference spec: INV-282-01, INV-282-02, CA-01, CA-02

GIVEN
  - Une ProofEnvelope valide, finalisable, sans champ envelopeSeal initial
  - Jeu de cles HSM actif avec algorithme attendu ECDSA-P384-SHA3-384
WHEN
  - La finalisation produit envelopeSeal
  - Un verificateur tiers recalcule JCS (hors envelopeSeal), hash et verify
THEN
  - valid=true
  - envelopeSeal est present et conforme au contrat de format
TEST-ID: TC-NOM-02
Reference spec: INV-282-03, CA-03

GIVEN
  - Une ProofEnvelope scellee valide
WHEN
  - Un seul octet du JSON canonicalisable est modifie
  - La verification est relancee
THEN
  - valid=false
TEST-ID: TC-NOM-03
Reference spec: INV-282-04, INV-282-05, CA-04, CA-10

GIVEN
  - OCSP disponible au moment de generation
WHEN
  - Une enveloppe est finalisee
THEN
  - verificationMaterial contient tsaCertificateChain, eidasCertificateChain, ocspResponses, validationTimestamp, validationPolicy
  - validationPolicy=GENERATION_TIME_SNAPSHOT
AND
  - producedAt de chaque OCSP est <= validationTimestamp
TEST-ID: TC-NOM-04
Reference spec: INV-282-04, CA-08, H-01

GIVEN
  - Une enveloppe scellee avec verificationMaterial complet
  - Environnement air-gapped sans reseau, sans acces aux services ProbatioVault
  - Trust-store du verificateur contenant la racine de confiance requise
WHEN
  - Un tiers execute la verification Mode A
THEN
  - La verification cryptographique et de chaine aboutit selon policy embarquee
AND
  - Aucune dependance reseau ProbatioVault n'est observee
TEST-ID: TC-NOM-05
Reference spec: INV-282-08, CA-07

GIVEN
  - Une enveloppe persistee a l'etat SEALED
WHEN
  - Une mutation metier est tentee (UPDATE ou DELETE)
THEN
  - Rejet strict de l'operation
AND
  - Aucune modification d'etat ni de payload persiste
TEST-ID: TC-NOM-06
Reference spec: INV-282-09, INV-282-10, CA-11, §5.4, §5.6, PD-272

GIVEN
  - Une enveloppe en construction en memoire au niveau service (etat transitoire UNSEALED non persiste)
WHEN
  - Le service finalise le scellement (calcul/hash/signature/envelope_seal) puis execute une persistance atomique en INSERT direct SEALED
THEN
  - Aucune ecriture DB en etat UNSEALED n'existe
AND
  - L'INSERT initial persiste uniquement un enregistrement SEALED (payload complet incluant envelope_seal)
AND
  - Toute tentative ulterieure de mutation de cet enregistrement est refusee (pattern INSERT-only impose par PD-272)
TEST-ID: TC-NOM-07
Reference spec: INV-282-11, CA-09

GIVEN
  - Une enveloppe historique signee avec kid K1
  - Rotation realisee vers K2
WHEN
  - Verification de l'enveloppe historique apres rotation
THEN
  - valid=true via kid K1 + certificateChain embarquee
AND
  - Absence de dependance a la cle courante K2
TEST-ID: TC-NOM-08
Reference spec: §5.5 Atomicite multi-composant

GIVEN
  - Transaction de finalisation en cours
WHEN
  - Crash simule avant commit puis apres commit (deux executions distinctes)
THEN
  - Pre-commit: rollback total, aucun artefact persistant
  - Post-commit: etat DB autoritatif conserve, reconciliation asynchrone possible
AND
  - Immutabilite non contournee

TC-NOM-09 — Verification nominale Mode B (online publique)

TEST-ID: TC-NOM-09
Reference spec: §2 Inclus (Mode B), INV-282-04

GIVEN
  - Une enveloppe scellee valide avec verificationMaterial complet
  - Repondeurs OCSP publics accessibles
WHEN
  - Un tiers execute la verification Mode B (online, sans service ProbatioVault)
THEN
  - La verification cryptographique reussit
  - La verification OCSP en ligne confirme la non-revocation des certificats

4. Scenarios de test - Cas d'erreur

TEST-ID: TC-ERR-01
Reference spec: ERR-01, INV-282-01

GIVEN
  - Enveloppe marquee finalisee sans envelopeSeal
WHEN
  - Validation contractuelle executee
THEN
  - Rejet non conforme explicite
  - Aucun statut "valide" retourne
TEST-ID: TC-ERR-02
Reference spec: ERR-02, INV-282-02

GIVEN
  - Payload provoquant echec de canonicalisation JCS
WHEN
  - Finalisation demandee
THEN
  - Rejet finalisation avec erreur metier explicite
  - Aucune persistance SEALED
TEST-ID: TC-ERR-03
Reference spec: ERR-03, INV-282-01

GIVEN
  - envelopeSeal.algorithm hors valeur fixe ou signature invalide
WHEN
  - Validation/verification executee
THEN
  - Rejet finalisation ou valid=false
  - Cause crypto explicite
TEST-ID: TC-ERR-04
Reference spec: ERR-04, INV-282-04

GIVEN
  - verificationMaterial incomplet (champ requis absent)
WHEN
  - Finalisation demandee
THEN
  - Rejet finalisation
  - Aucun artefact probatoire publie
TEST-ID: TC-ERR-05
Reference spec: ERR-05, CA-05

GIVEN
  - Timeout OCSP atteint selon valeur contractuelle
WHEN
  - Finalisation lancee
THEN
  - Autorisee uniquement si validationPolicy=OCSP_UNAVAILABLE et ocspResponses=[]
  - Sinon rejet explicite
TEST-ID: TC-ERR-06
Reference spec: ERR-06, INV-282-12, CA-12

GIVEN
  - Une valeur violant regex/longueur/casse contractuelle
WHEN
  - Finalisation demandee
THEN
  - Rejet explicite de finalisation
  - Aucun scellement produit
TEST-ID: TC-ERR-07
Reference spec: ERR-07, INV-282-08

GIVEN
  - Enveloppe SEALED persistee
WHEN
  - Mutation post-scellement tentee
THEN
  - Refus strict
  - Absence d'effets secondaires persistes
TEST-ID: TC-ERR-08
Reference spec: ERR-08

GIVEN
  - Chaine cert incomplete/non ancrable trust-store
WHEN
  - Verification tierce Mode A et Mode B executee
THEN
  - Echec de verification dans les deux modes
  - Motif "chaine non verifiable" explicite

5. Tests d'invariants (non negociables)

Invariant Test(s) dedies Observable Commentaire
INV-282-01 TC-NOM-01, TC-ERR-01, TC-ERR-03 envelopeSeal present + verify Obligatoire sur toute finalisation
INV-282-02 TC-NOM-01, TC-ERR-02 Succes nominal / echec JCS Exclusion de champ auto-referent
INV-282-03 TC-NOM-02 valid=false apres mutation 1 octet Integrite E2E
INV-282-04 TC-NOM-03, TC-NOM-04, TC-ERR-04 Verification Mode A possible Hors ancrage blockchain
INV-282-05 TC-NOM-03, TC-NOM-04, TC-NEG-05 Enum policy strict Pas d'ambiguite probatoire
INV-282-06 TC-INV-06 Rejet si pattern secret detecte Controle heuristique base patterns interdits
INV-282-07 TC-INV-07 Artefacts temporaires chiffres au repos Verification stockage/config crypto
INV-282-08 TC-NOM-05, TC-ERR-07 UPDATE/DELETE refuses Immutabilite persistee
INV-282-09 TC-INV-09 SEALED -> * tous refuses Terminalite globale
INV-282-10 TC-INV-10 SEALED -> UNSEALED refuse Pas de downgrade
INV-282-11 TC-NOM-07 Verification historique OK Resilience rotation cles
INV-282-12 TC-ERR-06 + TC-NEG-* Rejet explicite hors contrat Formats/tailles/casse
TEST-ID: TC-INV-06
Reference spec: INV-282-06, CA-06

GIVEN
  - Une enveloppe candidate contenant au moins un champ/valeur matchant un pattern interdit
  - Liste de patterns interdits active: privateKey, secretKey, sessionToken, hmacSecret, dek
WHEN
  - Le controle heuristique anti-secrets est execute avant finalisation
THEN
  - La finalisation est rejetee
  - Le motif indique une detection de pattern interdit
TEST-ID: TC-INV-07
Reference spec: INV-282-07, §5.4

GIVEN
  - Le flux PD-282 manipule des artefacts crypto temporaires uniquement en memoire (ex: canonicalJson, hash SHA3-384 Buffer) et la signature ECDSA est realisee dans le HSM
WHEN
  - Un audit statique du code et des assertions de tests service verifient les chemins d'E/S (DB, disque local, blobs, fichiers temporaires)
THEN
  - Aucun artefact crypto temporaire n'est persiste au repos
AND
  - Aucune ecriture en clair d'artefact crypto n'est detectee en base, sur disque, ni en blob
AND
  - Les tests confirment l'absence d'API/chemin de persistance pour ces artefacts temporaires
TEST-ID: TC-INV-09
Reference spec: INV-282-09, CA-11, §5.4, PD-272

GIVEN
  - Une enveloppe deja persistee en base a l'etat SEALED
WHEN
  - Des operations de mutation DB sont tentees sur cette ligne (UPDATE, DELETE)
THEN
  - Le trigger PD-272 rejette toutes les mutations (SEALED terminal en base)
AND
  - Le service n'expose aucun flux/metier permettant une transition SEALED -> * via modification de l'enveloppe existante
TEST-ID: TC-INV-10
Reference spec: INV-282-10, CA-11, §5.4, PD-272

GIVEN
  - Une enveloppe persistee en SEALED et une API/service applicatif de gestion d'enveloppe
WHEN
  - Une demande explicite de retour SEALED -> UNSEALED est formulee
THEN
  - Le service ne fournit aucune methode de descellement (absence d'operation unseal)
AND
  - Toute tentative de contournement par mutation DB est bloquee par PD-272 (UPDATE/DELETE refuses)

6. Tests de non-regression

Test ID Objet Observable Commentaire
TC-NR-01 Compatibilite PD-272 immutabilite trigger Aucun relachement des refus mutation Non-regression critique
TC-NR-02 Compatibilite PD-280 modele d'etats Transitions autorisees/interdites inchangees Alignement etats globaux
TC-NR-03 Verification enveloppes pre-rotation Anciennes enveloppes restent verifiables Perennite preuves
TC-NR-04 Contrat API de rejet explicite Rejet explicite stable (sans assert sur un code exact) Regression client evitee
TC-NR-05 Overhead enveloppe P95 <= borne Mesure perf/taille conforme au contrat Requiert env de reference defini

7. Tests negatifs et adversariaux

Test ID Entree invalide / abus Resultat attendu Observable
TC-NEG-01 algorithm different de ECDSA-P384-SHA3-384 Rejet finalisation Erreur format/contrat
TC-NEG-02 signature base64url avec = ou taille hors [80,200] Rejet finalisation Motif regex/longueur
TC-NEG-03 kid hors regex ou longueur hors bornes Rejet finalisation Motif kid invalide
TC-NEG-04 Timestamp non RFC3339 ms UTC (+01:00, pas de ms, etc.) Rejet finalisation Motif date invalide
TC-NEG-05 validationPolicy hors enum Rejet finalisation Enum stricte
TC-NEG-06 ocspResponses absent Rejet finalisation Presence requise
TC-NEG-07 ocspResponses > 20 elements Rejet finalisation Borne max appliquee
TC-NEG-08 Injection champs potentiellement secrets (privateKey, secretKey, sessionToken, hmacSecret, dek) Rejet strict de l'enveloppe Aucun export final de l'enveloppe rejetee
TC-NEG-09 Tentative de substitution inter-enveloppes (copie envelopeSeal) Verification invalide Echec d'integrite
TC-NEG-10 Cert chain malformee base64-DER Rejet ou echec verify Motif chaine invalide

8. Observabilite requise pour les tests

  • Etat systeme : etat metier transitoire UNSEALED observable uniquement dans les logs/traces service en memoire ; en base de donnees, seul l'etat SEALED est observable (avec horodatages, identifiant enveloppe, version).
  • Reponse API : statut, message explicite, indicateur valid si applicable.
  • Journal technique : trace d'echec crypto/format disponible pour diagnostic.
  • Evenement signe / horodate : presence signedAt, validationTimestamp, correlation avec kid.
  • Export probatoire : JSON envelope complet canonicalisable + verificationMaterial embarque.

9. Regles non testables

Regle Raison Impact
Borne perf P95 (latence scellement, overhead) sans environnement de reference (Q-02) Mesure non objectivable sans hote/profil charge contractuel Majeur
Recevabilite juridique eIDAS des sources cert/OCSP (H-04) Necessite expertise legale/reglementaire externe au test technique Majeur
Exhaustivite trust-store verificateur tiers (H-01, Q-05) Depend d'un referentiel externe non fixe dans la specification Majeur

10. Verdict QA

  • ⚠️ Testable partiellement (avec reserves listees)

Couverture fonctionnelle/crypto/etats/erreurs est complete et automatisable.
Reserve principale : metriques P95 et recevabilite juridique ne sont pas demontrables objectivement sans cadrage externe explicite.