Qualsiasi generazione di coppie di chiavi asimmetriche può essere descritta come un algoritmo deterministico che si nutre di una fonte casuale. Pertanto, in linea generale, è possibile trasformare una password in una coppia di chiavi pubblica / privata attenendosi alla seguente procedura:
-
Trasforma la password in un "seme" di lunghezza sufficiente (ad esempio, almeno 128 bit) con un funzione di hashing della password .
-
Inserisci quel seme in un PRNG crittograficamente sicuro per estendere quel seme in tutti i bit pseudocasuali, se necessario.
-
Esegui l'algoritmo di generazione della coppia di chiavi con il CSPRNG con seme come fonte di casualità.
Questo tipo di processo ha diversi svantaggi importanti di cui dovresti essere a conoscenza:
-
Richiede un algoritmo di generazione di coppie di chiavi completamente specificato e invariato. Ad esempio, per RSA, l'algoritmo concetto è quello di produrre numeri casuali fino a quando vengono trovati numeri interi giusti della giusta dimensione, ma nell'impostazione basata su password si dovrebbe essere molto precisi su come esattamente si svolta i bit casuali in un numero intero candidato e così via.
Utilizzare un algoritmo basato su curve ellittiche come ECDSA / ECDH può essere d'aiuto, perché la chiave privata è quindi solo un numero casuale, senza condizioni sulla primalità o qualcosa di simile. Devi ancora specificare l'algoritmo di generazione, ma almeno è semplice .
-
Se cambi la tua password, cambi anche la tua coppia di chiavi, che potrebbe avere conseguenze in qualunque sistema tu stia immaginando.
-
L'hashing della buona password richiede un salt , che non è un valore segreto, ma non dovrebbe essere risolto neanche. Avresti bisogno di uno spazio di archiviazione per quel sale, da qualche parte.
-
La chiave pubblica risultante sarebbe, per costruzione, utilizzabile in un attacco dizionario offline . Gli attacchi del dizionario offline non sono una buona cosa per le password. Le funzioni di hash della password configurate correttamente possono aiutare a respingere gli attacchi del dizionario, ma ci sono dei limiti alla loro potenza. Una chiave pubblica generata da password richiede quindi una password davvero casuale. Sfortunatamente, le password veramente casuali sono difficili da memorizzare (vedi questo domanda per un po 'di discussione - il metodo "cavallo giusto", come presentato nel post, fornisce password con 44 bit di entropia, che è buono per una password, ma non abbastanza per rendere gli attacchi di dizionario offline veramente tollerabili) .