In un sistema ipotetico, diciamo che un requisito di progettazione è che le persone che curiosano attorno al database di un'applicazione web (sysadmin è diventato canaglia o che cosa hai), non hanno accesso al testo semplice dei messaggi privati tra gli utenti . Una versione crittografata del testo viene invece memorizzata.
Il modo più semplice per farlo è utilizzare uno schema di crittografia a chiave pubblica / privata. Tuttavia è (davvero) inefficace memorizzare la chiave privata nel sistema, o nel browser degli utenti dato un aggressore dalla volontà decisa. Questo lascia l'intervento umano per la generazione.
A corto di usare un'applet java (o HTML5 / Javascript di fantasia), è difficile fornire un'istanza per un essere umano per fornire input casuali per generare la chiave privata, e c'è ancora il problema di archiviarla. C'è anche un problema che richiede agli umani di ricordare una password casuale di 16 caratteri usando caratteri alfanumerici e simboli sensibili al maiuscolo / minuscolo. Anche i dongle di chiavi private che le aziende tendono a utilizzare sono fuori questione.
Quindi la domanda è: Come faccio a prendere una password potenzialmente insicura e trasformarla in una chiave privata sicura? È persino possibile?
Le mie idee tendono a fluttuare verso ciò che non è realmente possibile fino a quando un utente non utilizza una passphrase decisamente sicura (16+ caratteri, maiuscole e minuscole con i numeri), a causa della facilità di forzare brute in questi giorni. Inoltre, un problema potrebbe essere la mancanza di una crittografia sufficientemente sicura che utilizza il proprio input per generare una chiave da utilizzare. Di nuovo, derivando dal problema con la memorizzazione della chiave utilizzata nella generazione.
Inoltre, supponiamo che vengano utilizzate tecniche appropriate in tutti gli altri punti del sistema (SSL, algos di crittografia aggiornati, ecc.)