# Key Management Configuration Page **Auteur** : Équipe 4NK ## Objectif Créer une page de configuration permettant de : - Consulter les clés publiques (npub et hex) - Importer une clé privée sous forme d'URL (nostr://nsec1...) ou de texte (nsec1... ou hex) - Respecter le système de stockage et de sécurisation à deux niveaux existant ## Impacts ### Utilisateurs - Interface dédiée pour gérer les clés Nostr - Consultation facile des clés publiques - Import de clés via URL ou texte - Affichage des mots de récupération après import ### Technique - Nouveau composant `KeyManagementManager` dans `components/` - Intégration dans la page `/settings` - Utilisation des services existants (`nostrAuthService`, `keyManagementService`) - Respect du système de chiffrement à deux niveaux (KEK + phrase de récupération) ## Modifications ### Fichiers créés - `components/KeyManagementManager.tsx` : Composant de gestion des clés - Affichage des clés publiques (npub et hex) - Formulaire d'import de clé privée - Support des formats : nsec URL (nostr://nsec1...), nsec texte (nsec1...), hex (64 caractères) - Extraction automatique de la clé depuis une URL - Avertissement et confirmation avant remplacement d'un compte existant - Affichage des mots de récupération après import ### Fichiers modifiés - `pages/settings.tsx` : Ajout du composant `KeyManagementManager` dans la page settings ## Fonctionnalités ### Consultation des clés publiques - Affichage du npub (format NIP-19) - Affichage de la clé publique hexadécimale - Boutons de copie pour chaque format ### Import de clé privée - Support de plusieurs formats : - URL nostr:// avec nsec : `nostr://nsec1...` - Texte nsec : `nsec1...` - Clé hexadécimale : `64 caractères hex` - Extraction automatique de la clé depuis une URL - Validation du format avant import - Gestion du remplacement d'un compte existant : - Avertissement si un compte existe déjà - Confirmation avant remplacement - Suppression de l'ancien compte avant création du nouveau ### Sécurité - Respect du système de chiffrement à deux niveaux : - KEK (Key Encryption Key) chiffré avec la phrase de récupération - Clé privée chiffrée avec le KEK - KEK stocké dans Credentials API - Clé privée chiffrée stockée dans IndexedDB - Affichage unique des mots de récupération après import - Avertissements clairs sur l'importance de sauvegarder la phrase de récupération ## Modalités de déploiement 1. Vérifier que le composant compile sans erreur : ```bash npm run type-check npm run lint ``` 2. Tester l'interface : - Accéder à `/settings` - Vérifier l'affichage des clés publiques si un compte existe - Tester l'import d'une clé privée (nsec ou hex) - Vérifier l'affichage des mots de récupération - Tester le remplacement d'un compte existant 3. Déployer avec le script de déploiement standard ## Modalités d'analyse ### Logs à surveiller - Erreurs lors du chargement des clés publiques - Erreurs lors de l'import de clé privée - Erreurs lors de la validation du format de clé - Erreurs lors du remplacement d'un compte ### Points de contrôle - Affichage correct des clés publiques (npub et hex) - Extraction correcte de la clé depuis une URL - Validation correcte des formats (nsec, hex) - Gestion correcte du remplacement de compte - Affichage correct des mots de récupération - Copie correcte des clés et mots de récupération ### Tests à effectuer 1. **Consultation des clés publiques** : - Vérifier l'affichage du npub - Vérifier l'affichage de la clé hex - Tester la copie de chaque format 2. **Import de clé privée** : - Tester l'import avec une URL nostr:// - Tester l'import avec un nsec texte - Tester l'import avec une clé hex - Vérifier la validation des formats invalides 3. **Remplacement de compte** : - Créer un compte - Importer une nouvelle clé - Vérifier l'avertissement et la confirmation - Vérifier que l'ancien compte est supprimé - Vérifier que le nouveau compte est créé 4. **Sécurité** : - Vérifier que les mots de récupération sont affichés une seule fois - Vérifier que la clé privée n'est jamais affichée - Vérifier que le système de chiffrement à deux niveaux est respecté