đ SPĂCIFICATION CANONIQUE CONTRACTUELLE¶
đ Navigation User Story
| Document | | | ---------- | -- | | đ **SpĂ©cification** | *(ce document)* | | đ ïž Plan d'implĂ©mentation | [PD-25-plan.md](PD-25-plan.md) | | â CritĂšres d'acceptation | [PD-25-acceptability.md](PD-25-acceptability.md) | | đ Retour d'expĂ©rience | [PD-25-rex.md](PD-25-rex.md) | [â Retour Ă crypto-proof](../PD-189-epic.md) · [â Index User Story](index.md)PD-25 â Authentification SRP-6a (Phase 2 : preuve, clĂ© de session, token)
đ EPIC
âĄïž PD-189 â CRYPTO
đ Artefact produit
âĄïž PD-25-spec.md
1. Objectif¶
DĂ©finir de maniĂšre formelle, exhaustive et contractuelle les exigences relatives Ă la Phase 2 du processus dâauthentification SRP-6a, incluant :
- la vérification cryptographique des preuves SRP-6a ;
- lâĂ©tablissement dâune clĂ© de session partagĂ©e entre le client et le serveur ;
- lâĂ©mission dâun jeton dâauthentification (JWT) conditionnĂ©e Ă une authentification rĂ©ussie.
Cette spĂ©cification fait loi. Toute implĂ©mentation doit sây conformer strictement.
2. PĂ©rimĂštre / Hors pĂ©rimĂštre¶
2.1 PĂ©rimĂštre¶
La présente spécification couvre exclusivement :
- la réception et le traitement des éléments cryptographiques de preuve SRP-6a ;
- la vérification de la preuve client conformément au protocole SRP-6a ;
- la dĂ©rivation dâune clĂ© de session authentifiĂ©e ;
- la validation mutuelle client/serveur (preuve serveur) ;
- la gĂ©nĂ©ration dâun jeton JWT suite Ă une authentification rĂ©ussie ;
- la gestion des erreurs liĂ©es Ă lâĂ©chec de la preuve SRP.
2.2 Hors pĂ©rimĂštre¶
Les éléments suivants sont explicitement hors périmÚtre :
- la Phase 1 de lâauthentification SRP (enrĂŽlement, salt, verifier) ;
- la gestion du mot de passe cÎté client ;
- le stockage ou la rotation des clés de signature JWT ;
- la gestion de session long terme ou de refresh token ;
- lâautorisation (droits, rĂŽles, permissions) ;
- toute alternative au protocole SRP-6a.
Toute rÚgle non testable relevant de ces éléments est considérée hors périmÚtre.
3. DĂ©finitions¶
| Terme | Définition |
|---|---|
| SRP-6a | Protocole dâauthentification Ă divulgation nulle de connaissance (RFC 5054). |
| Preuve client (M1) | Valeur cryptographique démontrant la connaissance du secret sans le révéler. |
| Preuve serveur (M2) | Valeur cryptographique permettant au client de vérifier le serveur. |
| Clé de session | Secret dérivé, partagé ou retourné uniquement aprÚs authentification réussie. |
| JWT | Jeton signé représentant une authentification réussie. |
| Session SRP | Ătat cryptographique temporaire liĂ© Ă un Ă©change SRP. |
4. Invariants (non nĂ©gociables)¶
Les rÚgles suivantes sont non négociables :
- Le serveur ne doit jamais connaĂźtre ni stocker le mot de passe utilisateur.
- Toute authentification rĂ©ussie doit rĂ©sulter dâune preuve SRP-6a valide.
- La clĂ© de session ne doit ĂȘtre exposĂ©e, retournĂ©e ou utilisĂ©e hors vĂ©rification cryptographique quâaprĂšs vĂ©rification rĂ©ussie de la preuve client.
- La clĂ© de session ne doit jamais ĂȘtre persistĂ©e.
- Un jeton JWT ne peut ĂȘtre Ă©mis quâaprĂšs authentification SRP rĂ©ussie.
- Aucun Ă©lĂ©ment dâĂ©change SRP ne doit permettre la rĂ©cupĂ©ration du secret utilisateur.
- Toute tentative dâauthentification est traçable.
Chaque invariant doit ĂȘtre vĂ©rifiable par test ou audit.
5. Flux nominaux¶
5.1 VĂ©rification de la preuve SRP¶
- Le client transmet sa preuve SRP (M1) au serveur.
- Le serveur rĂ©cupĂšre lâĂ©tat de session SRP associĂ©.
- Le serveur vérifie la validité cryptographique de la preuve.
- La preuve est considérée valide ou invalide.
5.2 Ătablissement de la clĂ© de session¶
- La preuve client est validée.
- La clĂ© de session est considĂ©rĂ©e Ă©tablie et disponible pour lâĂ©tape courante uniquement.
5.3 Validation serveur et Ă©mission du token¶
- Le serveur génÚre une preuve serveur (M2).
- Le serveur émet un JWT représentant une authentification réussie.
- Le serveur retourne au client la preuve serveur et le JWT.
5bis. Diagrammes Mermaid¶
5bis.1 Diagramme de sequence â Authentification SRP-6a Phase 2¶
Ce diagramme couvre les flux 5.1, 5.2 et 5.3. Les invariants references sont traces en annotations.
sequenceDiagram
participant C as Client
participant S as Serveur (Auth)
participant Store as Session Store
participant JWT as JWT Service
Note over C,S: [INV-1] Le serveur ne connait jamais le mot de passe
C->>S: POST /auth/srp/verify { srpSessionId, M1 }
activate S
S->>Store: Recuperer session SRP (srpSessionId)
alt Session inexistante ou expiree
Store-->>S: null / expired
Note right of S: [INV-7] Tentative tracee
S-->>C: 401 Unauthorized (session invalide)
else Session valide
Store-->>S: { A, b, B, v, salt, ... }
Note over S: Flux 5.1 â Verification preuve client
S->>S: Calculer S = (A * v^u)^b mod N
S->>S: Calculer K = H(S) (cle de session)
S->>S: Calculer M1_expected = H(H(N)^H(g), H(I), salt, A, B, K)
S->>S: Comparer M1 == M1_expected
alt M1 invalide
Note right of S: [INV-7] Echec trace
S->>Store: Invalider session SRP
S-->>C: 401 Unauthorized (preuve invalide)
else M1 valide
Note over S: Flux 5.2 â Cle de session etablie
Note right of S: [INV-3] K disponible uniquement apres M1 valide
Note right of S: [INV-4] K jamais persistee
Note over S: Flux 5.3 â Validation serveur + emission token
S->>S: Calculer M2 = H(A, M1, K)
Note right of S: [INV-6] Aucun element ne revele le secret
S->>JWT: Emettre JWT (userId, claims)
Note right of JWT: [INV-5] JWT emis uniquement apres SRP OK
JWT-->>S: token
S->>Store: Supprimer session SRP (usage unique)
Note right of S: [INV-2] Auth = preuve SRP valide
S-->>C: 200 OK { M2, jwt }
end
end
deactivate S
C->>C: Verifier M2 (validation mutuelle) 5bis.2 Diagramme dâetat â Cycle de vie dâune session SRP¶
La session SRP traverse au minimum 4 etats, du demarrage en Phase 1 jusquâa sa destruction apres Phase 2.
stateDiagram-v2
[*] --> CREATED : Phase 1 complete (A, B, salt echanges)
CREATED --> VERIFYING : Reception M1 (preuve client)
Note right of CREATED : [INV-3] K non disponible
VERIFYING --> VERIFIED : M1 valide â K etablie
Note right of VERIFIED : [INV-2] Preuve SRP valide
Note right of VERIFIED : [INV-4] K ephemere, non persistee
VERIFYING --> FAILED : M1 invalide
Note right of FAILED : [INV-7] Echec trace
VERIFIED --> CONSUMED : JWT emis + session detruite
Note right of CONSUMED : [INV-5] JWT conditionne a SRP OK
CREATED --> EXPIRED : TTL depasse
Note right of EXPIRED : [INV-7] Tentative sur session expiree tracee
FAILED --> [*] : Session invalidee
CONSUMED --> [*] : Session supprimee
EXPIRED --> [*] : Session purgee 6. Cas dâerreur¶
Les situations suivantes doivent ĂȘtre explicitement gĂ©rĂ©es :
- preuve SRP invalide ;
- session SRP inexistante ou expirée ;
- incohérence des paramÚtres cryptographiques ;
- tentative de rĂ©utilisation dâune preuve ;
- erreur lors de la dérivation de la clé de session ;
- erreur interne lors de la génération du JWT.
Chaque cas dâerreur doit produire une rĂ©ponse dĂ©terministe, contrĂŽlĂ©e et traçable.
7. CritĂšres dâacceptation (testables)¶
- Une preuve SRP valide conduit à une authentification réussie.
- Une preuve SRP invalide empĂȘche toute Ă©mission de JWT.
- La clĂ© de session nâest jamais persistĂ©e.
- Aucun secret utilisateur nâest exposĂ© ou dĂ©rivable.
- Une tentative dâauthentification invalide est traçable.
- La preuve serveur permet au client de vĂ©rifier lâauthenticitĂ© du serveur.
8. ScĂ©narios de test (Given / When / Then)¶
ScĂ©nario 1 â Authentification rĂ©ussie¶
Given une session SRP valide et une preuve client correcte
When la preuve est vérifiée
Then la clé de session est établie et un JWT est émis
ScĂ©nario 2 â Preuve invalide¶
Given une preuve client incorrecte
When la vérification est effectuée
Then lâauthentification Ă©choue et aucun JWT nâest Ă©mis
ScĂ©nario 3 â Session SRP expirĂ©e¶
Given une session SRP expirée
When une preuve est reçue
Then lâauthentification Ă©choue explicitement
9. HypothĂšses explicites¶
- La Phase 1 du protocole SRP-6a est correctement implémentée.
- Le systĂšme dispose des paramĂštres cryptographiques SRP requis.
- Les échanges réseau sont protégés au niveau transport.
- Le systÚme est capable de journaliser des événements de sécurité.
10. Points Ă clarifier¶
Les Ă©lĂ©ments suivants doivent ĂȘtre explicitement dĂ©finis avant implĂ©mentation :
- DurĂ©e de validitĂ© maximale dâune session SRP.
- Politique exacte de génération et de durée de vie du JWT.
- Claims obligatoires contenus dans le JWT.
- Niveau de journalisation attendu pour les échecs SRP.
- Exigences réglementaires ou normatives applicables.
Fin de la spécification canonique.