feat: Implémentation authentification NIST SP 800-63B v3.0.8

- Ajout du service PasswordSecurityService conforme NIST SP 800-63B
- Vérification des mots de passe contre la base Have I Been Pwned
- Validation : minimum 8 caractères, maximum 64 caractères
- Pas d'exigences de composition obligatoires (conforme NIST)
- Intégration dans LoginController et UserController
- Génération de mots de passe sécurisés non compromis

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-08-15 15:31:23 +02:00
parent 0e98a94374
commit 268444d6e8
44 changed files with 77937 additions and 75359 deletions

View File

@@ -773,6 +773,83 @@ LoggerService.info('Application démarrée');
Cette architecture garantit un système de logging professionnel, sécurisé et performant, adapté aux besoins de développement tout en protégeant la production. 📝✨
## 🔐 Gestion des identifiants - Normes NIST SP 800-63B
### 🎯 Vue d'ensemble
GEOSECTOR v2.0 implémente les **normes NIST SP 800-63B** pour la gestion des identifiants (usernames et passwords), offrant une sécurité renforcée tout en améliorant l'expérience utilisateur avec des règles plus flexibles et modernes.
### 📋 Conformité NIST SP 800-63B
| Exigence NIST | Implémentation | Statut |
|---------------|----------------|--------|
| **Longueur minimale : 8 caractères** | ✅ MIN = 8 caractères | ✅ CONFORME |
| **Longueur maximale : 64 caractères minimum** | ✅ MAX = 64 caractères | ✅ CONFORME |
| **Accepter TOUS les caractères ASCII imprimables** | ✅ Aucune restriction sur les caractères | ✅ CONFORME |
| **Accepter les espaces** | ✅ Espaces acceptés (début, milieu, fin) | ✅ CONFORME |
| **Accepter Unicode (émojis, accents, etc.)** | ✅ Support UTF-8 complet | ✅ CONFORME |
| **Vérifier contre les mots de passe compromis** | ✅ API Have I Been Pwned avec k-anonymity | ✅ CONFORME |
| **Pas d'obligation de composition** | ✅ Pas d'erreur si manque majuscules/chiffres/spéciaux | ✅ CONFORME |
| **Pas de changement périodique forcé** | ✅ Aucune expiration automatique | ✅ CONFORME |
| **Permettre les phrases de passe** | ✅ "Mon chat Félix a 3 ans!" accepté | ✅ CONFORME |
### 🔑 Règles pour les identifiants
#### **Username (Nom d'utilisateur)**
- **Longueur** : 8 à 64 caractères
- **Caractères acceptés** : TOUS (lettres, chiffres, espaces, accents, symboles, emojis)
- **Exemples valides** :
- `jean dupont 75`
- `Marie-Claire.2024`
- `Pompier Paris 🚒`
- `utilisateur@amicale`
#### **Password (Mot de passe)**
- **Longueur** : 8 à 64 caractères
- **Aucune règle de composition obligatoire** (plus besoin de majuscules/minuscules/chiffres/spéciaux)
- **Phrases de passe recommandées** pour une meilleure mémorisation
- **Exemples valides** :
- `Mon chat Félix a 3 ans!`
- `J'aime les pizzas du vendredi soir`
- `Le camion rouge part à 8h30`
- `☀️ Soleil brillant sur Paris ☀️`
### 🎲 Générateurs intelligents
#### **Générateur de username**
Crée des noms d'utilisateur uniques basés sur :
- Nom/prénom de la personne
- Code postal et ville de l'amicale
- Numéro aléatoire pour l'unicité
- Peut inclure des espaces et séparateurs (., -, _)
#### **Générateur de phrases de passe**
Génère des phrases de passe mémorables en français :
- Phrases naturelles et faciles à retenir
- Combinaisons variées (sujets, verbes, compléments)
- Ajout optionnel de caractères spéciaux ou emojis
- Exemples générés :
- `Le chien Max danse dans le jardin!`
- `Mon vélo rouge vole 42 fois en été`
- `Luna a 7 ans!☀️`
### ⚠️ Points importants
1. **Pas de trim()** : Les espaces en début/fin sont préservés et font partie de l'identifiant
2. **Pas de vérification password == username** : Sur demande du client, cette règle a été retirée
3. **Validation côté API** : L'API vérifie les mots de passe contre la base Have I Been Pwned
4. **Rétrocompatibilité** : Les anciens identifiants restent valides
### 🔄 Impact sur l'expérience utilisateur
| Aspect | Avant | Après NIST |
|--------|-------|------------|
| **Complexité** | Règles strictes difficiles à mémoriser | Liberté totale, phrases naturelles |
| **Longueur password** | 12-16 caractères obligatoires | 8-64 caractères flexibles |
| **Caractères spéciaux** | Obligatoires | Optionnels |
| **Mémorisation** | Mots de passe complexes oubliés | Phrases personnelles mémorables |
| **Sécurité** | Règles arbitraires | Vérification contre bases de données compromises |
## 🎯 Gestion des rôles
### Hiérarchie des permissions