**Motivations:** - Provide a dedicated interface for managing Nostr keys - Allow users to view public keys (npub and hex) - Enable importing private keys via URL or text format - Respect the existing two-level encryption system **Root causes:** - No dedicated interface for key management - Users need to view their public keys easily - Users need to import keys in various formats (nsec URL, nsec text, hex) **Correctifs:** - None (new feature) **Evolutions:** - Created KeyManagementManager component for key management - Added public key display (npub and hex formats) - Implemented private key import with support for: - nostr:// URLs with nsec - nsec text format (nsec1...) - hex format (64 characters) - Automatic key extraction from URLs - Account replacement warning and confirmation - Recovery phrase display after import - Individual copy buttons for each key format - Integration in settings page **Pages affectées:** - components/KeyManagementManager.tsx (new) - pages/settings.tsx (modified) - features/key-management-configuration.md (new)
125 lines
4.3 KiB
Markdown
125 lines
4.3 KiB
Markdown
# 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é
|
|
|