Aller au contenu

📄 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 :

  1. Le serveur ne doit jamais connaĂźtre ni stocker le mot de passe utilisateur.
  2. Toute authentification rĂ©ussie doit rĂ©sulter d’une preuve SRP-6a valide.
  3. 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.
  4. La clĂ© de session ne doit jamais ĂȘtre persistĂ©e.
  5. Un jeton JWT ne peut ĂȘtre Ă©mis qu’aprĂšs authentification SRP rĂ©ussie.
  6. Aucun Ă©lĂ©ment d’échange SRP ne doit permettre la rĂ©cupĂ©ration du secret utilisateur.
  7. 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

  1. Le client transmet sa preuve SRP (M1) au serveur.
  2. Le serveur rĂ©cupĂšre l’état de session SRP associĂ©.
  3. Le serveur vérifie la validité cryptographique de la preuve.
  4. La preuve est considérée valide ou invalide.

5.2 Établissement de la clĂ© de session

  1. La preuve client est validée.
  2. La clĂ© de session est considĂ©rĂ©e Ă©tablie et disponible pour l’étape courante uniquement.

5.3 Validation serveur et émission du token

  1. Le serveur génÚre une preuve serveur (M2).
  2. Le serveur émet un JWT représentant une authentification réussie.
  3. 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 :

  1. DurĂ©e de validitĂ© maximale d’une session SRP.
  2. Politique exacte de génération et de durée de vie du JWT.
  3. Claims obligatoires contenus dans le JWT.
  4. Niveau de journalisation attendu pour les échecs SRP.
  5. Exigences réglementaires ou normatives applicables.

Fin de la spécification canonique.