Aller au contenu

PD-99 — Écran de connexion utilisateur (SRP-6a)

1. Objectif

Décrire de manière contractuelle et testable les règles fonctionnelles, de sécurité et d’expérience utilisateur relatives à l’écran de connexion de l’application mobile iOS ProbatioVault, permettant à un utilisateur déjà inscrit de s’authentifier via un mécanisme SRP-6a, dans le respect des exigences de sécurité, de conformité et de responsabilité utilisateur.

Cette spécification fait loi pour toute implémentation de la PD-99.


2. Périmètre / Hors périmètre

Inclus

  • Authentification d’un utilisateur existant via email et mot de passe.
  • Usage exclusif du protocole SRP-6a pour l’authentification.
  • Écran de connexion principal de l’application mobile iOS.
  • Connexion facilitée par biométrie, en tant qu’option.
  • Gestion des messages d’erreur liés à la tentative de connexion.
  • Paramétrage utilisateur relatif à l’activation/désactivation de la biométrie.

Exclu

  • Inscription, création ou validation de compte utilisateur.
  • Récupération, réinitialisation ou changement de mot de passe.
  • Authentification via un autre mécanisme que SRP-6a.
  • Gestion des politiques serveur (quotas, délais, verrouillage).
  • Gestion des rôles et autorisations post-authentification.
  • Optimisation des performances ou de la latence.

3. Définitions

Terme Définition
Utilisateur Personne disposant d’un compte ProbatioVault déjà inscrit et validé
Mot de passe Secret choisi par l’utilisateur lors de l’inscription
SRP-6a Protocole d’authentification par mot de passe sans transmission du secret
Connexion fondatrice Connexion réalisée via email + mot de passe
Connexion facilitée Connexion réalisée via biométrie locale après authentification fondatrice
Biométrie Mécanisme d’authentification locale fourni par le terminal
Écran de login Tout écran de l’application mobile iOS depuis lequel un utilisateur peut initier une authentification (connexion fondatrice ou connexion facilitée), quel que soit le contexte d’accès (écran initial, reprise de session, écran intermédiaire, redirection après déconnexion).

4. Invariants (non négociables)

ID Règle Justification
INV-01 Toute authentification DOIT utiliser SRP-6a. Un élément observable contractuel (identifiant de flux, type d’échange nommé, trace fonctionnelle ou artefact de preuve exposable en environnement de test) DOIT permettre d’attester l’usage de SRP-6a sans accès au code ni aux secrets. Choix d’architecture acté
INV-02 Le mot de passe NE DOIT JAMAIS être transmis en clair Confidentialité utilisateur
INV-03 Aucun humain (y compris ProbatioVault) NE DOIT pouvoir connaître le mot de passe — exigence de gouvernance juridique non testable par les scénarios applicatifs Zero-knowledge
INV-04 Le terme « mot de passe » DOIT être utilisé Clarté utilisateur
INV-05 La connexion fondatrice et la connexion facilitée DOIVENT être visuellement différenciées sur l’écran de login Responsabilité utilisateur
INV-06 La différenciation visuelle NE DOIT PAS persister après la connexion Sobriété UX
INV-07 La biométrie DOIT être optionnelle Contrôle utilisateur
INV-08 La biométrie DOIT pouvoir être désactivée globalement et/ou par appareil Maîtrise utilisateur
INV-09 Les messages d’erreur NE DOIVENT PAS permettre d’inférence exploitable Sécurité
INV-10 Intention non normative : le login est traité comme un acte engageant (hors périmètre de test applicatif) Valeur probatoire
INV-11 Tout écran de login DOIT afficher un rappel d’irrécupérabilité du mot de passe, avec le texte exact suivant : « Votre mot de passe est connu de vous seul. Il ne peut pas être récupéré ni communiqué, y compris à la demande. » Responsabilisation

4.1 Précisions sur la différenciation visuelle (INV-05 / INV-06)

  • Les modes « connexion fondatrice » et « connexion facilitée » doivent présenter au moins un élément visuel distinct parmi : libellé, titre, message d’aide, icône.
  • La distinction doit être perceptible sans ambiguïté sur l’écran de login.
  • Une fois l’utilisateur authentifié, aucun de ces éléments distinctifs ne doit persister ni être visible sur les écrans post-login.

5. Flux nominaux

Flux FN-01 — Connexion fondatrice

  • L’utilisateur accède à l’écran de login.
  • L’utilisateur saisit son email et son mot de passe.
  • Le système engage un échange SRP-6a.
  • Si l’authentification réussit, l’utilisateur est connecté.

Flux FN-02 — Connexion facilitée (biométrie)

  • L’utilisateur accède à l’écran de login.
  • L’utilisateur choisit l’option de connexion facilitée.
  • Une authentification biométrique locale est demandée.
  • Si elle réussit, l’utilisateur est connecté.

Flux FN-03 — Désactivation biométrie

  • L’utilisateur accède aux paramètres.
  • L’utilisateur désactive la biométrie globalement ou par appareil.
  • Toute connexion ultérieure requiert une connexion fondatrice.

5bis. Diagrammes Mermaid

Diagramme d’états — Écran de connexion

L’écran de login possède 5 états distincts. Les transitions reflètent les invariants INV-05 (différenciation visuelle fondatrice/facilitée), INV-07 (biométrie optionnelle) et INV-06 (pas de persistance post-login).

stateDiagram-v2
    [*] --> EcranLogin : Ouverture app

    state EcranLogin {
        [*] --> ChoixMode
        ChoixMode --> SaisieFondatrice : Connexion fondatrice [INV-05]
        ChoixMode --> PromptBiometrie : Connexion facilitée [INV-05, INV-07]

        SaisieFondatrice --> EchangeSRP6a : Soumission email + mdp
        PromptBiometrie --> SaisieFondatrice : Biométrie refusée (ERR-03)
        PromptBiometrie --> Authentifie : Biométrie réussie
    }

    EchangeSRP6a --> Authentifie : SRP-6a OK [INV-01, INV-02]
    EchangeSRP6a --> EcranLogin : Échec (ERR-01 / ERR-02) [INV-09]
    Authentifie --> [*] : Aucun indicateur de mode visible [INV-06]

Diagramme de séquence — Connexion fondatrice SRP-6a (FN-01)

Le protocole SRP-6a implique un échange multi-étapes entre le client iOS et le backend. Le mot de passe ne quitte jamais le terminal (INV-02, INV-03).

sequenceDiagram
    participant U as Utilisateur
    participant App as App iOS
    participant API as Backend API
    participant SRP as Module SRP-6a

    U->>App: Saisit email + mot de passe
    Note over App: INV-04 — libellé « mot de passe »
    Note over App: INV-11 — rappel irrécupérabilité affiché

    App->>SRP: Dérive verifier local (email, mdp)
    Note over SRP: INV-02 — mdp jamais transmis
    Note over SRP: INV-03 — zero-knowledge

    App->>API: SRP Step 1 — envoie identifiant + A (clé publique éphémère)
    API-->>App: Retourne salt + B (clé publique serveur)

    App->>SRP: Calcule preuve M1 (A, B, salt, mdp)
    App->>API: SRP Step 2 — envoie M1
    API->>API: Vérifie M1, calcule M2

    alt Authentification réussie
        API-->>App: Retourne M2 + session token
        App->>SRP: Vérifie M2 (preuve mutuelle)
        App-->>U: Écran principal (INV-06 — aucun indicateur de mode)
    else Échec authentification
        API-->>App: Erreur générique
        App-->>U: « La connexion a échoué. » (INV-09, ERR-01)
    end

Diagramme de séquence — Connexion facilitée biométrie (FN-02)

sequenceDiagram
    participant U as Utilisateur
    participant App as App iOS
    participant Bio as Biométrie OS
    participant KS as Keychain Secure

    U->>App: Choisit connexion facilitée
    Note over App: INV-05 — écran visuellement distinct

    App->>Bio: Demande authentification biométrique
    Note over Bio: INV-07 — optionnel, INV-08 — désactivable

    alt Biométrie réussie
        Bio-->>App: OK
        App->>KS: Récupère credentials chiffrés
        KS-->>App: Credentials
        Note over App: Reprend flux SRP-6a (INV-01)
        App-->>U: Écran principal (INV-06)
    else Biométrie échouée / annulée
        Bio-->>App: Échec
        App-->>U: Retour écran login (ERR-03)
    end

6. Cas d’erreur

ID Situation Comportement attendu
ERR-01 Échec d’authentification Message générique, non différenciant
ERR-02 Indisponibilité technique Message générique, non causal
ERR-03 Biométrie refusée ou échouée Retour à l’écran de login

Tous les messages d’erreur DOIVENT être indiscernables du point de vue de la cause.

Texte exact obligatoire du message d’erreur générique unique :

La connexion a échoué. Vérifiez vos informations et réessayez.


7. Critères d’acceptation (testables)

ID Critère Observable
CA-01 La connexion fondatrice utilise SRP-6a Traces de flux
CA-02 Le mot de passe n’est jamais transmis en clair Analyse réseau
CA-03 Les écrans fondatrice et facilitée sont distincts Inspection UI
CA-04 Aucun indicateur de mode ne persiste après login Navigation UI
CA-05 La biométrie est désactivable globalement Paramètres
CA-06 La biométrie est désactivable par appareil Paramètres
CA-07 Les messages d’erreur sont identiques Tests négatifs
CA-08 Tout écran de login affiche le rappel d’irrécupérabilité du mot de passe avec le texte exact requis Inspection UI
CA-09 En cas d’échec, le message d’erreur générique affiché correspond exactement au texte requis Inspection UI

8. Scénarios de test (Given / When / Then)

TC-01 — Connexion fondatrice valide

  • Given un utilisateur existant
  • When il saisit email et mot de passe valides
  • Then l’accès est accordé

TC-02 — Connexion fondatrice invalide

  • Given un utilisateur
  • When l’authentification échoue
  • Then un message générique est affiché

TC-03 — Connexion biométrique

  • Given une biométrie activée
  • When la biométrie réussit
  • Then l’accès est accordé

TC-04 — Désactivation biométrie

  • Given une biométrie activée
  • When l’utilisateur la désactive
  • Then la connexion facilitée est impossible

9. Hypothèses explicites

ID Hypothèse Impact si faux
H-01 Le protocole SRP-6a est disponible côté backend Blocage complet
H-02 Les mécanismes biométriques sont fournis par l’OS Fonction dégradée