PD-42 - Scenarios de tests contractuels¶
1. References¶
- Specification : PD-42-specification.md
- Epic : EPIC-189 CRYPTO
- Role QA : Architecte QA senior / auditeur independant
2. Matrice de couverture¶
| Reference spec | Type | Test ID | Couvert | Commentaire |
|---|---|---|---|---|
| INV-01 | Invariant | TC-NOM-01, TC-NR-01 | Oui | Determinisme token |
| INV-02 | Invariant | TC-NOM-03 | Oui | Absence de collision fonctionnelle |
| INV-03 | Invariant | TC-NOM-06, TC-NEG-01 | Oui | Zero-knowledge serveur |
| INV-04 | Invariant | TC-NOM-05 | Oui | Isolation K_search |
| INV-05 | Invariant | TC-NOM-04 | Oui | Egalite stricte |
| 4.1 | Regles | TC-NOM-02, TC-ERR-01, TC-ERR-02 | Oui | Canonicalisation KW-CANON-01 |
| 4.2 | Regles | TC-NOM-05, TC-ERR-03 | Oui | Derivation K_search |
| 4.3 | Regles | TC-NOM-01, TC-NOM-03 | Oui | Tokenisation deterministe |
| 4.4 | Regles | TC-NOM-07, TC-ERR-04 | Oui | Metadonnees et mismatch |
| 4.5 | Regles | TC-NOM-03 | Oui | Injectivite conditionnelle |
| CA-01 | Critere | TC-NOM-01 | Oui | Egalite stricte |
| CA-02 | Critere | TC-NOM-03 | Oui | Keywords distincts |
| CA-03 | Critere | TC-NOM-06 | Oui | Aucun clair serveur |
| CA-04 | Critere | TC-NOM-04 | Oui | Ensemble exact |
| CA-05 | Critere | TC-NOM-04 | Oui | Absence de faux positifs |
| ERR-01 | Erreur | TC-ERR-01 | Oui | Keyword vide |
| ERR-02 | Erreur | TC-ERR-02 | Oui | Keyword non canonicalisable |
| ERR-03 | Erreur | TC-ERR-03 | Oui | K_search absent ou invalide |
| ERR-04 | Erreur | TC-ERR-04, TC-NEG-02 | Oui | Algo/canonicalisation non conformes |
| ERR-05 | Erreur | TC-ERR-05 | Oui | Depassement keyword_max_len_bytes |
3. Scenarios de test - Flux nominaux¶
TC-NOM-01 - Determinisme de tokenisation¶
Reference spec : INV-01, CA-01, 4.3
GIVEN - Un keyword K valide - Un K_master_user de 32 octets - canonicalization_id = KW-CANON-01 - algorithm_id = DET-HMAC-SHA256-B64T22-V1
WHEN - K est canonicalise puis tokenise deux fois avec la meme configuration
THEN - T_kw est strictement identique a chaque execution - La longueur de T_kw est de 22 caracteres - T_kw ne contient pas de padding '=' - T_kw n utilise que l alphabet Base64 URL-safe (A-Z a-z 0-9 - _)
TC-NOM-02 - Canonicalisation KW-CANON-01¶
Reference spec : 4.1
GIVEN - Des keywords differant par casse, espaces (debut/fin, multiples, tabulations) et forme Unicode NFC/NFD
WHEN - La canonicalisation KW-CANON-01 est appliquee
THEN - Le keyword canonique est identique pour toutes les variantes
TC-NOM-03 - Distinction entre keywords¶
Reference spec : INV-02, CA-02, 4.3
GIVEN - Deux keywords canoniques distincts K1 et K2 dans l espace nominal contractuel (longueur <= keyword_max_len_bytes) - Le meme K_search
WHEN - Les tokens T_kw sont calcules
THEN - T_kw(K1) != T_kw(K2)
TC-NOM-04 - Recherche par egalite stricte¶
Reference spec : INV-05, CA-04, CA-05
GIVEN - Un index contenant des couples (T_kw, resource_id)
WHEN - Une recherche est effectuee avec un keyword indexe
THEN - Le resultat correspond exactement a l ensemble attendu de resource_id - Aucune duplication n est presente
AND - Une recherche avec un keyword non indexe retourne un ensemble vide
TC-NOM-05 - Isolation K_search (scope USER)¶
Reference spec : INV-04, 4.2
GIVEN - Un meme keyword canonique - Deux K_master_user distincts (utilisateurs differents)
WHEN - K_search est derivee et les tokens sont calcules
THEN - Les T_kw sont differents
TC-NOM-06 - Zero-knowledge serveur¶
Reference spec : INV-03, CA-03
GIVEN - Un ensemble de keywords indexes
WHEN - Les donnees persistees et les logs serveur sont inspectes
THEN - Aucun keyword en clair n est observable - Seuls T_kw et metadonnees sont stockes
TC-NOM-07 - Metadonnees contractuelles¶
Reference spec : 4.4
GIVEN - Un index construit
WHEN - Les metadonnees sont inspectees
THEN - algorithm_id, canonicalization_id et k_search_scope sont presentes et conformes aux valeurs normatives
4. Scenarios de test - Cas d erreur¶
TC-ERR-01 - Keyword vide¶
Reference spec : ERR-01
GIVEN un keyword qui devient vide apres canonicalisation
WHEN l indexation ou la recherche est demandee
THEN la requete est rejetee explicitement (ERR-01)
TC-ERR-02 - Keyword non canonicalisable¶
Reference spec : ERR-02
GIVEN un keyword non UTF-8 ou contenant un caractere de controle
WHEN l indexation ou la recherche est demandee
THEN la requete est rejetee explicitement (ERR-02)
TC-ERR-03 - K_search absent ou invalide¶
Reference spec : ERR-03
GIVEN l absence de K_search ou une longueur differente de 32 octets
WHEN une indexation ou recherche est demandee
THEN l operation echoue explicitement (ERR-03)
TC-ERR-04 - Metadonnees non conformes¶
Reference spec : ERR-04, 4.4
GIVEN - algorithm_id ou canonicalization_id manquant ou non reconnu - OU un payload contenant un keyword en clair cote serveur
WHEN une operation est declenchee
THEN une non-conformite est signalee (ERR-04)
TC-ERR-05 - Depassement keyword_max_len_bytes¶
Reference spec : ERR-05
GIVEN un keyword canonique dont la longueur UTF-8 depasse keyword_max_len_bytes
WHEN l indexation ou la recherche est demandee
THEN la requete est rejetee explicitement (ERR-05)
5. Tests d invariants (non negociables)¶
| Invariant | Test(s) dedies | Observable |
|---|---|---|
| INV-01 | TC-NOM-01, TC-NR-01 | T_kw identique |
| INV-02 | TC-NOM-03 | T_kw different |
| INV-03 | TC-NOM-06, TC-NEG-01 | Absence de clair serveur |
| INV-04 | TC-NOM-05 | T_kw differents par utilisateur |
| INV-05 | TC-NOM-04 | Egalite stricte |
6. Tests de non-regression¶
| Test ID | Objet | Observable |
|---|---|---|
| TC-NR-01 | Meme keyword + meme K_search + memes metadonnees => T_kw inchange | Comparaison avant/apres |
| TC-NR-02 | Ajout de keywords n altere pas les T_kw existants | Comparaison avant/apres |
7. Tests negatifs et adversariaux¶
| Test ID | Abus | Resultat attendu |
|---|---|---|
| TC-NEG-01 | Injection de keyword en clair cote serveur | Rejet ERR-04 + aucune persistance |
| TC-NEG-02 | Mismatch algorithm_id/canonicalization_id entre client et serveur | Rejet ERR-04 |
8. Observabilite requise pour les tests¶
- T_kw stockes et associes a algorithm_id + canonicalization_id + k_search_scope
- Resultats de recherche (ensembles d identifiants de ressources)
- Traces de rejet contenant les codes ERR-xx
9. Vecteurs de test deterministes (HKDF/HMAC)¶
Parametres communs : - salt = 32 octets a 0x00 - info = "keyword_search" (ASCII) - canonicalization_id = KW-CANON-01 - algorithm_id = DET-HMAC-SHA256-B64T22-V1 - Base64 RFC 4648 URL-safe sans padding ; T_kw = 22 premiers caracteres de b64url
VEC-01
K_master_user (hex) : 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
K_search (hex) : 1195e4e89019350a6a25ffd26d63a014cab1c0b61c8cd0f0568e86090a4b5bbd
keyword_raw : " Foo\tBAR "
keyword_canon : "foo bar"
HMAC-SHA256 (hex) : 6da0b0f3cd0358977c994984b6a8184212bb890c268eb06f1d9d9c29a069b561
b64url : baCw880DWJd8mUmEtqgYQhK7iQwmjrBvHZ2cKaBptWE
T_kw (22) : baCw880DWJd8mUmEtqgYQh
VEC-02
K_master_user (hex) : 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
K_search (hex) : 1195e4e89019350a6a25ffd26d63a014cab1c0b61c8cd0f0568e86090a4b5bbd
keyword_raw : "foo baz"
keyword_canon : "foo baz"
HMAC-SHA256 (hex) : 8aee566ca6a4994dadeb1de4df6dfd9499970c70972f1c62a666787d5a3a82dc
b64url : iu5WbKakmU2t6x3k3239lJmXDHCXLxxipmZ4fVo6gtw
T_kw (22) : iu5WbKakmU2t6x3k3239lJ
VEC-03
K_master_user (hex) : 202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
K_search (hex) : 88278ecb0b55489a036dbb61f0ce749bf4c58018c8b7398cbca3bdb728ad6213
keyword_raw : "foo bar"
keyword_canon : "foo bar"
HMAC-SHA256 (hex) : c4151520c8866135caf5cbee4755a2f843d08c7cfeef8f7e4a4798a0a6f96bfe
b64url : xBUVIMiGYTXK9cvuR1Wi-EPQjHz-749-SkeYoKb5a_4
T_kw (22) : xBUVIMiGYTXK9cvuR1Wi-E
10. Regles non testables¶
| Regle | Raison | Impact |
|---|---|---|
| Recherche full-text, floue, partielle, semantique, similarite | Hors perimetre | Non bloquant |
| Requetes multi-keywords et scoring | Hors perimetre | Non bloquant |
| Analyse de frequence, attaques par dictionnaire, access pattern leakage | Hors perimetre | Non bloquant |
| Injectivite globale hors espace nominal contractuel | Hors perimetre | Non bloquant |
11. Verdict QA¶
Specification testable et automatisable dans le perimetre defini.