Aller au contenu

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.