You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/configuration/config-gestion-mdp.md
+57Lines changed: 57 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -37,6 +37,63 @@ Ces deux limites sont representé dans l'interface de changement de mot de passe
37
37
* Caractères obligatoires : Vous pouvez régler quels caractères obligatoires doit comporter le nouveau mot de passe
38
38
* Vérifier si le mot de passe est connu avec haveibeenpwned (voir [https://haveibeenpwned.com/](https://haveibeenpwned.com/)). Si le mot de passe est connu l'utilisateur ne pourra pas l'utiliser
39
39
40
+
### Vérification HIBP et empreintes planifiées
41
+
42
+
Deux niveaux complémentaires :
43
+
44
+
| Option (interface) | Champ API | Effet |
45
+
| --- | --- | --- |
46
+
| Vérifier les mots de passe compromis |`checkPwned`| Refus immédiat à la saisie si le mot de passe est dans HIBP (k-anonymity) |
47
+
| Stockage des empreintes HIBP |`pwnedRecheckEnabled`| Enregistre une empreinte SHA-1 **chiffrée** dans l'historique pour re-vérifier plus tard via cron |
48
+
49
+
Le stockage d'empreintes **nécessite** :
50
+
51
+
- l'historique des mots de passe (`passwordHistoryEnabled`, activé par défaut) ;
52
+
-`checkPwned` activé ;
53
+
- la variable d'environnement `SESAME_PASSWORD_HISTORY_HIBP_KEY` sur l'orchestrateur.
Puis redémarrer le conteneur. Sans cette clé, l'interface désactive le toggle « Stockage des empreintes HIBP » et la sauvegarde de la policy avec `pwnedRecheckEnabled=true` est refusée.
81
+
82
+
#### Activation dans l'interface
83
+
84
+
1. Menu **Paramètres → Politique de mot de passe**.
85
+
2. Activer **Vérifier les mots de passe compromis**.
86
+
3. Activer **Stockage des empreintes HIBP (Pwned Passwords)** (si la clé est valide).
87
+
4. Régler **Âge max avant re-check HIBP** (secondes) — par défaut 7 jours.
88
+
5. Sauvegarder.
89
+
6. Activer la tâche cron `identities-pwned-recheck` (voir [Configuration cron](cron.html#tache-par-defaut-re-check-hibp-pwned-passwords)).
90
+
91
+
#### Sécurité et rotation de clé
92
+
93
+
- Le mot de passe en clair n'est **pas** stocké pour HIBP : seule l'empreinte SHA-1 chiffrée (`hibpSha1Enc`).
94
+
- Le serveur peut déchiffrer l'empreinte **uniquement** avec `SESAME_PASSWORD_HISTORY_HIBP_KEY` pour interroger l'API HIBP en mode *range* (5 premiers caractères du hash envoyés, reste comparé localement).
95
+
-**Rotation de clé** : sans ré-encryptage des entrées existantes, les anciennes empreintes ne pourront plus être re-vérifiées (statut « déchiffrement impossible » côté cron).
96
+
40
97
* Réinitialisez par SMS : L'utilisateur aura le choix de recevoir son code de réinitialisation par mail ou par SMS
- Sélectionne les entrées d'historique ayant une empreinte (`hibpSha1Enc`) dont `hibpLastCheckAt` est absent ou plus ancien que `pwnedRecheckMaxAgeSeconds` (policy).
130
+
- Déchiffre l'empreinte, appelle `https://api.pwnedpasswords.com/range/<prefix>` (k-anonymity), met à jour `hibpLastCheckAt` et `hibpPwnCount`.
131
+
- Si `hibpPwnCount > 0`, applique `pwnedRecheckAction` : `none`(log uniquement), `notify` (email), `expire` (forcer changement de mot de passe).
132
+
133
+
### Test manuel
134
+
135
+
```bash
136
+
yarn run console identities pwned recheck --limit=10
137
+
```
138
+
94
139
## Variables dynamiques dans `options`
95
140
96
141
Les `options` supportent des variables dynamiques évaluées au runtime (à chaque exécution de la tâche).
- re-vérifie les empreintes chiffrées de l’historique des mots de passe via l’API HIBP ;
51
+
- met à jour `hibpLastCheckAt` / `hibpPwnCount` sur chaque entrée ;
52
+
- peut notifier ou forcer l’expiration selon `pwnedRecheckAction` (si configuré côté policy)
53
+
54
+
Voir [Configuration cron](../../configuration/cron.html#tache-par-defaut-re-check-hibp-pwned-passwords) et [Politique mots de passe](password-policy.html#stockage-des-empreintes-hibp-pwnedrecheckenabled).
-**Sauvegarde** : `POST /settings/passwdadm/setpolicies` (avec gestion des validations)
39
+
-**Statut clé HIBP** : `GET /settings/passwdadm/hibp-keystatus` (valide la présence/format de `SESAME_PASSWORD_HISTORY_HIBP_KEY`)
40
+
41
+
## Vérification HIBP à la saisie (`checkPwned`)
42
+
43
+
Le toggle **« Vérifier les mots de passe compromis »** active le contrôle en temps réel via l’API [Have I Been Pwned – Pwned Passwords](https://haveibeenpwned.com/Passwords) (k-anonymity : seuls les 5 premiers caractères du hash SHA-1 sont envoyés).
44
+
45
+
- Si le mot de passe apparaît dans une fuite connue, il est **refusé** à la création/changement.
46
+
- Ce contrôle ne nécessite **pas** de clé `SESAME_PASSWORD_HISTORY_HIBP_KEY`.
47
+
48
+
## Stockage des empreintes HIBP (`pwnedRecheckEnabled`)
49
+
50
+
Le toggle **« Stockage des empreintes HIBP (Pwned Passwords) »** permet de conserver, dans l’**historique des mots de passe**, une empreinte chiffrée utilisable pour un **re-check planifié** (sans renvoyer le mot de passe en clair à chaque exécution du cron).
51
+
52
+
### Prérequis
53
+
54
+
1.**Historique des mots de passe activé** (`passwordHistoryEnabled=true`, défaut côté API). Sans historique, aucune entrée n’est enregistrée et aucune empreinte n’est stockée.
55
+
2.**Vérification HIBP activée** (`checkPwned=true`) : le toggle empreintes est désactivé sinon.
56
+
3.**Clé de chiffrement serveur**`SESAME_PASSWORD_HISTORY_HIBP_KEY` définie et valide (32 octets, en hex 64 caractères ou en base64). L’interface interroge `GET /settings/passwdadm/hibp-keystatus` et grise le toggle si la clé est absente ou invalide.
57
+
4.**Tâche cron**`identities-pwned-recheck` activée pour exécuter le re-check (voir [Configuration cron](../../configuration/cron.html#tache-par-defaut-re-check-hibp-pwned-passwords)).
58
+
59
+
### Comment activer (résumé)
60
+
61
+
1. Générer une clé (ex. depuis le dépôt orchestrator) :
62
+
```bash
63
+
make hibp-key-hex
64
+
# ou
65
+
make hibp-key-b64
66
+
```
67
+
2. Ajouter la variable dans l’environnement de **sesame-orchestrator** (fichier `.env` ou secrets) :
68
+
```env
69
+
SESAME_PASSWORD_HISTORY_HIBP_KEY=<valeur_generee>
70
+
```
71
+
3. Redémarrer l’orchestrateur.
72
+
4. Dans **Paramètres → Politique de mot de passe** :
73
+
- activer **« Vérifier les mots de passe compromis »** ;
74
+
- activer **« Stockage des empreintes HIBP »** ;
75
+
- ajuster **« Âge max avant re-check HIBP »** si besoin (défaut : 7 jours) ;
76
+
- sauvegarder.
77
+
5. Dans **Paramètres → Cron**, activer la tâche `identities-pwned-recheck` (ou éditer `configs/cron/identities-pwned-recheck.yml`).
78
+
79
+
### Paramètres associés (policy)
80
+
81
+
| Champ | Rôle |
82
+
| --- | --- |
83
+
|`pwnedRecheckEnabled`| Active le stockage de `hibpSha1Enc` à chaque enregistrement d’historique |
84
+
|`pwnedRecheckMaxAgeSeconds`| Délai minimum entre deux re-checks HIBP pour une même entrée (défaut : 604800 = 7 jours) |
85
+
|`pwnedRecheckAction`| Action si compromis détecté au cron : `none`, `notify`, `expire` (l’UI force `none` à la sauvegarde actuelle) |
86
+
87
+
### Ce qui est stocké (sans exposer le mot de passe)
88
+
89
+
Pour chaque changement enregistré dans l’historique :
90
+
91
+
1. Hash du mot de passe (Argon2) pour l’anti-réutilisation — **jamais exposé dans l’UI**.
92
+
2. Si `pwnedRecheckEnabled` : `SHA-1(mot de passe)` puis chiffrement **AES-256-GCM** → champ Mongo `hibpSha1Enc` (format `iv.tag.cipher` en base64).
93
+
94
+
L’API liste d’historique (`GET /management/password-history/:identityId`) ne renvoie **pas**`hibpSha1Enc` : seulement `hasHibpFingerprint`, `hibpLastCheckAt`, `hibpPwnCount`.
95
+
96
+
### Consultation côté identité
97
+
98
+
Dans la fiche identité, onglet **Historique des mots de passe** : colonne **HIBP** avec les états possibles :
99
+
100
+
-**Empreinte non stockée** : entrée créée avant activation ou échec de chiffrement ;
101
+
-**Non vérifié** : empreinte présente, en attente du cron ;
102
+
-**OK** / **Pwned (N)** : résultat du dernier re-check (`hibpPwnCount` = occurrences dans la base HIBP).
103
+
104
+
Voir aussi la configuration détaillée : [Configuration de la politique de mot de passe](../../configuration/config-gestion-mdp.html#verification-hibp-et-empreintes-planifiees).
0 commit comments