From aedfa09bbc45d5788eff30cf5d1e10c7f478b9e4 Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Wed, 29 Oct 2025 12:42:13 +0100 Subject: [PATCH] fix: verify PBKDF2 key in pbkdf2keys store during prerequisites check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations :** - La vérification des prérequis ne vérifiait pas réellement la présence de la clé PBKDF2 dans le store pbkdf2keys - Il y avait une duplication de code pour la vérification de la clé PBKDF2 - Le mode de sécurité était recherché deux fois au lieu d'être réutilisé **Modifications :** - Déplacement de la vérification réelle de la clé PBKDF2 dans la section des prérequis - Vérification explicite de la présence de la clé dans le store pbkdf2keys avant de continuer - Stockage du mode de sécurité trouvé dans une variable au niveau supérieur pour réutilisation - Suppression de la vérification dupliquée plus tard dans le code - Amélioration des messages de log pour indiquer explicitement la vérification dans le store pbkdf2keys **Pages affectées :** - src/pages/wallet-setup/wallet-setup.ts (vérification des prérequis améliorée) --- src/pages/birthday-setup/birthday-setup.ts | 4 +- src/pages/wallet-setup/wallet-setup.ts | 110 ++++++++------------- 2 files changed, 45 insertions(+), 69 deletions(-) diff --git a/src/pages/birthday-setup/birthday-setup.ts b/src/pages/birthday-setup/birthday-setup.ts index 99daf96..013097d 100644 --- a/src/pages/birthday-setup/birthday-setup.ts +++ b/src/pages/birthday-setup/birthday-setup.ts @@ -39,7 +39,7 @@ document.addEventListener('DOMContentLoaded', async () => { // Vérifier que le PBKDF2 key existe d'abord (prérequis le plus basique) const { SecureCredentialsService } = await import('../../services/secure-credentials.service'); const secureCredentials = SecureCredentialsService.getInstance(); - + let pbkdf2KeyFound = false; const securityModes = ['none', 'password', 'os', 'proton-pass']; for (const mode of securityModes) { @@ -77,7 +77,7 @@ document.addEventListener('DOMContentLoaded', async () => { break; } } - + if (!wallet) { console.log('⚠️ Wallet still not found after retries, redirecting to wallet-setup...'); updateStatus('⚠️ Redirection vers la configuration du wallet...', 'loading'); diff --git a/src/pages/wallet-setup/wallet-setup.ts b/src/pages/wallet-setup/wallet-setup.ts index a2267bf..357cd41 100644 --- a/src/pages/wallet-setup/wallet-setup.ts +++ b/src/pages/wallet-setup/wallet-setup.ts @@ -52,6 +52,7 @@ document.addEventListener('DOMContentLoaded', async () => { updateProgress(10); let services: any; // Déclarer services au niveau supérieur + let currentMode: string | null = null; // Déclarer currentMode au niveau supérieur try { console.log('🔄 Importing services...'); @@ -105,24 +106,50 @@ document.addEventListener('DOMContentLoaded', async () => { updateStatus('🔐 Génération des clés de sécurité...', 'loading'); updateProgress(30); - try { - const { SecureCredentialsService } = await import('../../services/secure-credentials.service'); - const secureCredentialsService = SecureCredentialsService.getInstance(); + // Vérifier les prérequis en base de données + updateStatus('🔍 Vérification des prérequis...', 'loading'); + updateProgress(20); - // Vérifier les prérequis en base de données - updateStatus('🔍 Vérification des prérequis...', 'loading'); - updateProgress(20); + // CRITICAL: wallet-setup ne doit PAS générer de credentials + // Les credentials et clé PBKDF2 doivent être créés dans security-setup + // On vérifie que la clé PBKDF2 existe dans le store pbkdf2keys + console.log('🔐 Checking for existing PBKDF2 key in pbkdf2keys store...'); + + const { SecureCredentialsService } = await import('../../services/secure-credentials.service'); + const secureCredentialsService = SecureCredentialsService.getInstance(); - // Vérifier si des credentials existent déjà - // CRITICAL: wallet-setup ne doit PAS générer de credentials - // Les credentials et clé PBKDF2 doivent être créés dans security-setup - // On vérifie juste que la clé PBKDF2 existe - console.log('🔐 Checking for existing PBKDF2 key...'); - } catch (error) { - // Erreur lors de la vérification, on continuera pour tester les clés PBKDF2 - console.log('ℹ️ Could not check credentials status, will test PBKDF2 keys directly'); + // Vérifier que la clé PBKDF2 existe pour au moins un mode de sécurité dans le store pbkdf2keys + const securityModes: Array<'otp' | 'password' | 'none' | 'os' | 'proton-pass'> = + ['none', 'otp', 'password', 'os', 'proton-pass']; + + for (const mode of securityModes) { + try { + const hasKey = await secureCredentialsService.hasPBKDF2Key(mode); + if (hasKey) { + const key = await secureCredentialsService.retrievePBKDF2Key(mode); + if (key) { + currentMode = mode; + console.log(`✅ PBKDF2 key found in pbkdf2keys store for security mode: ${mode}`); + break; + } + } + } catch (error) { + // Continue to next mode + console.log(`⚠️ No PBKDF2 key found in pbkdf2keys store for mode ${mode}`); + } } + if (!currentMode) { + console.log('⚠️ No PBKDF2 key found in pbkdf2keys store, redirecting to security-setup...'); + updateStatus('⚠️ Redirection vers la configuration de sécurité...', 'loading'); + setTimeout(() => { + window.location.href = '/src/pages/security-setup/security-setup.html'; + }, 1000); + return; + } + + console.log('✅ Prerequisites verified: PBKDF2 key found in pbkdf2keys store for mode:', currentMode); + // Étape 3: Sauvegarde du wallet avec état birthday_waiting updateStatus('💰 Sauvegarde du portefeuille...', 'loading'); updateProgress(60); @@ -130,59 +157,8 @@ document.addEventListener('DOMContentLoaded', async () => { try { console.log('🔐 Sauvegarde du wallet avec état birthday_waiting...'); - // DÉTECTER le mode de sécurité via la clé PBKDF2 disponible - // Le mode de sécurité est identifié par la clé PBKDF2 qui fonctionne - const { SecureCredentialsService } = await import('../../services/secure-credentials.service'); - const secureCredentialsService = SecureCredentialsService.getInstance(); - - // TEST: Log credentialId from sessionStorage - const storedCredentialId = sessionStorage.getItem('webauthn_credential_id'); - if (storedCredentialId) { - console.log('🔐 TEST: credentialId from sessionStorage in wallet-setup:', storedCredentialId); - } else { - console.log('🔐 TEST: No credentialId found in sessionStorage'); - } - - console.log('🔍 Testing all security modes to find a PBKDF2 key...'); - - // Tester tous les modes de sécurité pour trouver une clé PBKDF2 valide - // Mettre 'none' en premier pour éviter d'ouvrir la fenêtre du navigateur - const allSecurityModes: Array<'otp' | 'password' | 'none' | 'os' | 'proton-pass'> = - ['none', 'otp', 'password', 'os', 'proton-pass']; - - let currentMode: string | null = null; - - for (const mode of allSecurityModes) { - console.log(`🔍 Testing security mode: ${mode}`); - try { - // Vérifier d'abord silencieusement si une clé existe - const hasKey = await secureCredentialsService.hasPBKDF2Key(mode); - if (hasKey) { - // Si une clé existe, essayer de la récupérer - const key = await secureCredentialsService.retrievePBKDF2Key(mode); - if (key) { - currentMode = mode; - console.log(`✅ PBKDF2 key found for security mode: ${mode}`); - break; - } - } else { - console.log(`⚠️ No PBKDF2 key found for mode ${mode}`); - } - } catch (error) { - console.log(`⚠️ No PBKDF2 key found for mode ${mode}`); - } - } - - // CRITICAL: Si aucune clé PBKDF2 n'est disponible, rediriger vers security-setup - if (!currentMode) { - console.log('⚠️ No PBKDF2 key found, redirecting to security-setup...'); - updateStatus('⚠️ Redirection vers la configuration de sécurité...', 'loading'); - setTimeout(() => { - window.location.href = '/src/pages/security-setup/security-setup.html'; - }, 1000); - return; - } - + // Le mode de sécurité a déjà été trouvé dans la vérification des prérequis + // currentMode est déjà défini et vérifié console.log('🔐 Using security mode for wallet encryption:', currentMode); // Générer un wallet temporaire avec état birthday_waiting