Aller au contenu

PD-7 — Scénarios de tests contractuels

1. Références

  • Spécification : PD-7 — HSM FIPS 140-2 Level 3 pour protection des clés cryptographiques
  • Epic : PD-193 — INFRA

2. Matrice de couverture

ID Invariant ID Critère ID Test Couverture Commentaire
INV-01 CA-02 TC-NOM-01 Oui Clés non exportables : vérif indirecte via API/HSM (échec export)
INV-01 CA-03 TC-NOM-02 Oui Signature via HSM, aucune clé brute visible
INV-02 CA-02 TC-INV-02 Oui Export enveloppé et clear refusés
INV-03 CA-06 TC-NOM-06 Oui Journalisation observable des opérations
INV-04 CA-01 TC-NOM-03 Oui Aucune clé utilisateur finale dans HSM : contrôle d’inventaire
CA-01 TC-NOM-03 Oui Certif FIPS L3 vérifiée
CA-02 TC-NOM-01 Oui Connexion PKCS#11 depuis OVH
CA-03 TC-NOM-02 Oui Génération RSA-4096 réussie
CA-04 TC-NOM-04 Oui Signature SHA-256 réussie
CA-05 TC-PERF-01 Oui Latence P99 < 50ms
CA-06 TC-HA-01 Oui Failover automatique PROD
CA-07 TC-OBS-01 Oui Monitoring CloudWatch opérationnel
CA-08 TC-LOC-01 Oui Déploiement en région EU
KL-01 TC-KL-01 Oui Génération locale des clés (CKA_LOCAL=TRUE)
KL-02 TC-KL-02 Oui Rotation annuelle des clés maîtres
KL-03 TC-KL-03 Oui Conservation des clés expirées
KL-04 TC-KL-04 Oui Blocage de suppression des clés ayant signé

2.1 Invariants (référentiel)

  • INV-01 — Non-exposition des clés privées : les clés privées générées ou stockées dans le HSM ne quittent jamais le périmètre du HSM. Les clés publiques associées PEUVENT être exportées pour permettre la vérification tierce des signatures (conformément aux standards PKI et FIPS 140-2).
  • INV-02 — Non-exportabilité des clés privées : aucune exportation de clé privée n'est possible (en clair ou enveloppée) hors HSM.
  • INV-03 — Journalisation : toute opération cryptographique réalisée via le HSM est journalisée.
  • INV-04 — Séparation des clés : le HSM ne stocke pas de clés utilisateur finales (client-side) ; seules les clés maîtres ProbatioVault y résident. Voir taxonomie §7.1.1 de la spécification (patterns de labels autorisés : pv-master-sign-*, pv-master-wrap-*, pv-tsa-*, pv-rotation-*, pv-*-expired-YYYY).

2.2 Critères d’acceptation (référentiel)

  • CA-01 : Vérifier que le HSM est FIPS 140-2 Level 3 minimum.
  • CA-02 : Connexion PKCS#11 fonctionnelle depuis le backend OVH.
  • CA-03 : Génération de clé RSA 4096 réussie.
  • CA-04 : Signature SHA-256 avec clé HSM réussie.
  • CA-05 : Temps de réponse < 50 ms P99.
  • CA-06 : Failover automatique en PROD (test de bascule).
  • CA-07 : Monitoring CloudWatch opérationnel.
  • CA-08 : HSM déployé en région EU uniquement.

3. Scénarios de test – Flux nominaux

TEST-ID: TC-NOM-01
Référence spec: R-36-02, R-36-03, CA-02, INV-01

GIVEN
  - Un environnement OVH (Paris) avec accès au tunnel VPN IPSec vers AWS eu-west-3
  - Un client PKCS#11 configuré pour cibler le cluster HSM
  - Des identifiants/roles PKCS#11 valides (Crypto User)
WHEN
  - Le backend exécute une opération PKCS#11 minimale (liste de slots + ouverture de session + requête de mécanismes supportés)
THEN
  - La session PKCS#11 est établie et l’opération retourne une réponse valide
AND
  - Aucun trafic n’est observé vers une adresse publique (uniquement via le réseau privé/VPN)
AND
  - L’opération est traçable dans les journaux d’audit requis (cf. section 8)
TEST-ID: TC-NOM-02
Référence spec: CA-03, R-36-03

GIVEN
  - Une session PKCS#11 établie (cf. TC-NOM-01)
WHEN
  - Une demande de génération de paire de clés RSA 4096 est soumise au HSM via PKCS#11
THEN
  - La création aboutit avec un identifiant/handle de clé côté HSM
AND
  - La clé privée est marquée non-exportable (attributs PKCS#11) et n’est pas récupérable en dehors du HSM
AND
  - Un artefact d’audit attestant la génération est disponible (journal HSM et/ou backend)
TEST-ID: TC-NOM-03
Référence spec: R-36-01, INV-04, CA-01

GIVEN
  - Un accès en lecture aux informations de conformité du service HSM (attestation fournisseur + métadonnées du service)
WHEN
  - L’auditeur récupère l’identifiant du certificat FIPS 140-2 associé au service HSM et son niveau
THEN
  - Le niveau de certification déclaré est >= FIPS 140-2 Level 3
AND
  - La preuve consultée est attachable au dossier d’audit (référence de certificat + date + périmètre)
AND
  - Aucun élément ne permet de conclure que des clés « client-side » (clés utilisateurs finales) sont stockées dans le HSM (inventaire des objets HSM conforme aux types attendus)
TEST-ID: TC-NOM-04
Référence spec: CA-04, INV-01

GIVEN
  - Une paire de clés RSA 4096 disponible dans le HSM (cf. TC-NOM-02)
  - Un message de test déterministe (payload fixe) et son hash attendu
  - La clé publique correspondante, exportée du HSM (export autorisé pour clés publiques)
WHEN
  - Le backend demande au HSM une signature du hash (SHA-256) via PKCS#11
THEN
  - La signature est produite par le HSM (la clé privée reste confinée dans le HSM)
AND
  - La signature est vérifiable hors HSM avec la clé publique correspondante (vérification tierce indépendante)
AND
  - Aucune donnée de clé privée n'est exposée dans les retours ou les logs (INV-01)

Note: Ce test démontre la vérifiabilité tierce des signatures conformément aux standards PKI,
sans jamais exposer la clé privée qui reste strictement confinée au HSM.
TEST-ID: TC-LOC-01
Référence spec: R-36-04, RNF-36-03, CA-08

GIVEN
  - Un accès en lecture aux métadonnées de déploiement (région, AZ, comptes) du service HSM
WHEN
  - L’auditeur vérifie la région de déploiement et les attributs de localisation
THEN
  - La région est située dans l’UE (eu-west-3 ou région EU approuvée)
AND
  - Aucune ressource HSM n’est détectée hors UE pour les environnements couverts par la PD-7
TEST-ID: TC-OBS-01
Référence spec: CA-07, RNF-36-02

GIVEN
  - Le monitoring CloudWatch est activé pour le cluster HSM
WHEN
  - Une série d’opérations PKCS#11 nominales est exécutée (cf. TC-NOM-01 à TC-NOM-04)
THEN
  - Les métriques attendues (disponibilité, erreurs, latence si exposée, état du cluster) sont visibles
AND
  - Une alerte de santé (health) est testable via un changement contrôlé (cf. TC-HA-01 / TC-ERR-03)

4. Scénarios de test – Cas d’erreur

TEST-ID: TC-ERR-01
Référence spec: R-36-02, CA-02

GIVEN
  - Le tunnel VPN IPSec est indisponible (coupure contrôlée)
WHEN
  - Le backend tente d’établir une session PKCS#11
THEN
  - La connexion échoue de manière explicite (timeout/erreur réseau détectable)
AND
  - Aucune opération cryptographique n’est réalisée
AND
  - Un événement d’erreur est émis dans l’observabilité (logs/metrics) sans fuite de secrets
TEST-ID: TC-ERR-02
Référence spec: R-36-03, INV-02

GIVEN
  - Une clé privée existe dans le HSM (cf. TC-NOM-02)
WHEN
  - Une tentative d’export de clé privée est effectuée (PKCS#11 : C_WrapKey / C_GetAttributeValue sur attributs sensibles)
THEN
  - L’export est refusé (erreur PKCS#11 attendue)
AND
  - Aucun blob de clé exploitable n’est produit
AND
  - L’événement est journalisé (INV-03)
TEST-ID: TC-ERR-03
Référence spec: RNF-36-02, CA-06

GIVEN
  - Un cluster PROD avec ≥2 HSM en HA (R-36-05)
WHEN
  - Un HSM est rendu indisponible de façon contrôlée (arrêt/suspension de l'instance ou perte réseau)
THEN
  - Les opérations cryptographiques continuent via l'autre HSM sans intervention manuelle (CA-06)
AND
  - Le temps de bascule n'impacte pas le SLI de disponibilité (RNF-36-02)
AND
  - L'incident est visible en monitoring (CA-07)

Note: Les garanties de cohérence applicative (transactionnalité, idempotence des écritures,
intégrité des journaux backend) relèvent du périmètre backend et non de la PD-7 HSM.
TEST-ID: TC-ERR-04
Référence spec: §7.2, §7.2.1 (ACC-01, ACC-04)

GIVEN
  - Un acteur disposant uniquement des droits « Infra Admin » (sans credential PKCS#11, cf. ACC-01)
  - L'inventaire des users CloudHSM ne contient pas d'entrée pour cet acteur
WHEN
  - Il tente d'établir une session PKCS#11 (C_OpenSession + C_Login)
THEN
  - L'authentification PKCS#11 échoue (CKR_PIN_INCORRECT ou CKR_USER_PIN_NOT_INITIALIZED)
AND
  - Aucune opération cryptographique n'est réalisable
AND
  - La tentative est journalisée (INV-03, §7.1.2)

5. Tests d'invariants (non négociables)

Invariant Test(s) dédiés Observable Commentaire
INV-01 (Non-exposition clés privées) TC-NOM-01, TC-NOM-04, TC-ERR-02 Traces PKCS#11, absence d'artefact de clé privée, signature vérifiable avec clé publique La clé privée reste dans le HSM ; seule la clé publique est exportée pour vérification
INV-02 (Non-exportabilité clés privées) TC-ERR-02 Erreur PKCS#11 + absence de blob de clé privée exporté Non-exportabilité démontrée par tentative d'export de clé privée
INV-03 (Journalisation) TC-NOM-01..04, TC-ERR-02..04 Journal HSM / backend / SIEM Toute opération doit laisser une trace corrélable
INV-04 (Séparation des clés) TC-NOM-03 Inventaire d'objets HSM avec vérification des labels vs patterns autorisés (§7.1.1) Tous les labels correspondent à pv-master-sign-*, pv-master-wrap-*, pv-tsa-*, pv-rotation-* ou pv-*-expired-YYYY

6. Tests de performance & SLO

TEST-ID: TC-PERF-01
Référence spec: RNF-36-01, CA-05

GIVEN
  - Un environnement représentatif PROD (réseau, VPN, charge) ou banc de test validé
  - Une opération PKCS#11 cible définie (ex: signature SHA-256) et un volume de requêtes déterministe
WHEN
  - Un test de charge exécute N opérations (N fixé) sur une fenêtre de temps donnée
THEN
  - Le P99 de latence mesuré sur l’opération cible est < 50 ms
AND
  - Les mesures sont reproductibles (mêmes paramètres, mêmes conditions)
AND
  - Les résultats sont exportables (rapport horodaté) pour audit

6bis. Tests de cycle de vie des clés

TEST-ID: TC-KL-01
Référence spec: §8.1 (KL-01)

GIVEN
  - Une session PKCS#11 établie avec un Crypto User
  - Capacité de lister les attributs des objets HSM
WHEN
  - L'auditeur interroge les attributs de toutes les clés maîtres présentes dans le HSM
THEN
  - Toutes les clés possèdent l'attribut CKA_LOCAL=TRUE (générées localement)
AND
  - Toutes les clés possèdent l'attribut CKA_TOKEN=TRUE (persistantes)
AND
  - Un inventaire horodaté est exportable pour le dossier d'audit
TEST-ID: TC-KL-02
Référence spec: §8.1 (KL-02), §8.2

GIVEN
  - Un inventaire HSM avec les métadonnées de création des clés maîtres
  - La date du jour et la politique de rotation (365 jours)
WHEN
  - L'auditeur vérifie l'âge des clés maîtres actives
THEN
  - Aucune clé maître active n'a une date de création > 365 jours
AND
  - Les clés expirées sont présentes avec le label "-expired-YYYY"
AND
  - Un log de rotation est présent dans CloudWatch pour chaque cycle de rotation effectué
TEST-ID: TC-KL-03
Référence spec: §8.1 (KL-03)

GIVEN
  - Un inventaire HSM contenant des clés expirées (rotation passée)
WHEN
  - L'auditeur recherche les clés avec le suffixe "-expired-YYYY" dans leur label
THEN
  - Les clés expirées sont présentes et accessibles en lecture
AND
  - Les signatures historiques réalisées avec ces clés restent vérifiables
AND
  - Les clés expirées ne peuvent plus être utilisées pour de nouvelles signatures (attribut CKA_SIGN=FALSE ou politique)
TEST-ID: TC-KL-04
Référence spec: §8.1 (KL-04)

GIVEN
  - Une clé maître ayant été utilisée pour des signatures (historique non vide)
WHEN
  - Un acteur tente de supprimer cette clé via C_DestroyObject
THEN
  - L'opération est refusée (erreur PKCS#11)
AND
  - Un événement d'audit est journalisé (tentative de destruction bloquée)
AND
  - La clé reste présente dans l'inventaire HSM

7. Tests de non-régression

Test ID Objet Observable Commentaire
TC-NR-01 Connexion PKCS#11 depuis OVH (régression réseau/VPN) Succès TC-NOM-01 À rejouer après toute modification VPN/ACL
TC-NR-02 Non-exportabilité des clés Succès TC-ERR-02 À rejouer après toute mise à jour HSM/lib PKCS#11
TC-NR-03 Failover HA Succès TC-ERR-03 À rejouer après changement cluster HSM
TC-NR-04 Journalisation Présence d’audit INV-03 À rejouer après changement pipeline logs/SIEM

8. Tests négatifs et adversariaux

Test ID Entrée invalide / abus Résultat attendu Observable
TC-NEG-01 Tentative d’accès PKCS#11 sans VPN (route publique) Connexion impossible Traces réseau + échec handshake
TC-NEG-02 Requête de signature avec credentials invalides (mauvais token/session) Refus de l'opération (erreur PKCS#11 CKR_USER_NOT_LOGGED_IN ou équivalent) Audit de la tentative échouée (INV-03)
TC-NEG-03 Explosion d’erreurs PKCS#11 (mauvais PIN/credentials) Verrouillage / throttling conforme politique Logs + métriques

9. Observabilité requise pour les tests

  • État système :
  • État du tunnel IPSec (UP/DOWN) et métriques associées
  • Santé du cluster HSM (instances, membership, erreurs)

  • Réponse applicative :

  • Codes d’erreur explicites lors d’échecs PKCS#11 / réseau
  • Temps de réponse mesurables côté backend (timestamps)

  • Journal d'audit (cf. §7.1.2 de la spécification) :

  • Événement de session (C_OpenSession, C_CloseSession)
  • Événement d'authentification (C_Login, C_Logout)
  • Événement de génération de clé (C_GenerateKeyPair, C_GenerateKey)
  • Événement de signature (C_Sign, C_SignInit)
  • Événement de tentative d'export/refus (C_WrapKey, C_GetAttributeValue sensible)
  • Événement de suppression (C_DestroyObject)
  • Événement de failover / dégradation (CA-06)
  • Rétention : 5 ans minimum, corrélation par session_id

  • Monitoring :

  • CloudWatch (ou équivalent) accessible et consultable
  • Alertes de santé testables (ex: perte d’instance HSM)

10. Règles non testables

Règle Raison Impact
« Budget : ~3500€/mois » Contrôle financier hors périmètre technique ; dépend du contrat fournisseur et de la consommation réelle Mineur
« AWS Paris acceptable temporairement » Décision de gouvernance/risque, pas un comportement système testable Mineur
« Architecture remplaçable » Notion d’architecture évolutive non objectivable par un test unique sans critères formels (interfaces, abstraction, plan de migration) Majeur

11. Verdict QA

  • Testable intégralement sur les aspects techniques et contractuels (PKCS#11, FIPS L3, HA, latence, observabilité, non-exportabilité).
  • ⚠️ Réserves : certaines contraintes de gouvernance (budget/souveraineté/“remplaçabilité”) nécessitent des critères formels supplémentaires si elles doivent devenir contractuelles.