Ho un'applicazione mobile in cui desidero memorizzare le chiavi private in modo sicuro. Il requisito di sicurezza implica che sia molto difficile per gli aggressori essere in grado di ottenere la chiave privata anche se hanno accesso illimitato al dispositivo mobile. Per raggiungere questo livello di sicurezza, l'applicazione utilizza la crittografia simmetrica con una chiave derivata da una passphrase specificata dall'utente e una salt specifica per il dispositivo.Protezione delle chiavi private dagli attacchi brute force sui dispositivi mobili
Idealmente, questo dovrebbe essere abbastanza sicuro contro un attacco di forza bruta; tuttavia vi sono due fattori limitanti:
Poiché la chiave privata deve conformarsi a un certo formato, il processo di decodifica può verificare il risultato del processo per vedere se è valido o meno. Ad esempio, se la chiave privata dovesse essere una chiave privata RSA, l'utente malintenzionato proverà varie combinazioni della passphrase e test per vedere se può utilizzare il testo in chiaro risultante come una chiave privata RSA valida. Poiché la chiave privata RSA deve codificare determinate informazioni in un determinato modo, se la decrittografia non riesce, il motore RSA segnala che la chiave non è valida. Questo dà all'attaccante un modo totalmente offline di verificare i suoi attacchi. Preferibilmente, l'autore dell'attacco dovrebbe non essere in grado di dire, senza comunicare con un server, se il suo tentativo di decrittografia ha avuto successo o meno.
Dal momento che l'applicazione viene eseguita su un dispositivo mobile, la maggiore complessità del Key Derivation Function non aiuta con Key Strengthening dal momento che un attacco non in linea che ha pieno accesso al dispositivo mobile dovrebbe presumibilmente essere effettuata su un dispositivo più capace con le risorse più ricche. In breve, qualsiasi aumento del numero di cicli di calcolo della funzione di derivazione della chiave rallenterebbe l'esperienza dell'utente (che è accettabile fino a un certo limite) ma sarebbe immediatamente vanificata se l'attacco dovesse essere eseguito su un computer desktop.
Qualcuno potrebbe offrirmi una soluzione a questi problemi? In particolare, qualcuno conosce un algoritmo di crittografia asimmetrico in cui la chiave privata può essere una qualsiasi sequenza di byte casuale (potrebbe essere una sequenza di lunghezza fissa, non importa) e l'algoritmo sarebbe comunque in grado di produrre testo cifrato?
Sai abbastanza per essere pericoloso per te stesso. Prendi una copia della crittografia pratica e leggila dall'inizio alla fine. – rook