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_GetAttributeValuesensible) - É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.