Il "file pieno di password" va bene, ma richiede una certa attenzione quando lo si utilizza. Quando viaggio con il mio, lo criptico con GnuPG e decrittalo solo su un computer portatile (il mio , quindi è "pulito") che esegue Linux, senza alcuno spazio di swap attivato, e decritto solo in /tmp
, che ho configurato come "file system di memoria" ( tmpfs
) supportato con RAM. Il punto dell'esercitazione è di impedire a nessuna delle mie preziose password di colpire mai in modo non crittografato una memorizzazione permanente dei dati (il disco rigido interno / SSD).
Alcune applicazioni di gestione delle password (ad es. KeePass ) possono automatizzare questo processo e offrire un sistema più facile da usare.
Un altro metodo è passare alla matematica al momento della generazione delle password. L'idea è di memorizzare nella tua mente una singola "password principale" (renderla grande e molto casuale, diciamo 20 lettere casuali). Quando è necessario generare una password per un utilizzo U , è sufficiente applicare alcune operazioni crittografiche deterministiche (ad esempio, hashing) che coinvolgono sia U che la password principale. " U " qui sarà una stringa che usa un formato ( qualsiasi formato che desideri) che codifica in qualche modo la destinazione della password.
Ad esempio, rendi U la stringa " ssh:foo.example.com
" per indicare "la password utilizzata per connettersi con SSH alla macchina foo.example.com
". La codifica non ha importanza finché non è ambigua, ovvero puoi ricostruire dinamicamente la stringa dalla tua conoscenza della situazione ("Voglio collegarmi con SSH a foo.example.com
") e non avrai collisioni (due distinte usi che finiscono sulla stessa stringa di utilizzo)
La "operazione di crittografia" che combina la password principale e la stringa di utilizzo in una password deve essere progettata con un po 'di attenzione. Suggerisco di utilizzare PBKDF2 , la stringa di utilizzo U come "sale". Il conteggio delle iterazioni per PBKDF2 è un compromesso: un conteggio superiore protegge meglio la password principale, ma implica un costo maggiore quando si desidera ricalcolare una password. Un costo di iterazione di circa un milione è probabilmente adeguato.
Non ho un utile riferimento a un prodotto esistente che lo faccia, ma sono certo che tali prodotti esistono; e potrebbe altrimenti essere reimplementato facilmente con una semplice applicazione .NET (.NET ha un'implementazione di PBKDF2 da .NET 2.0 ed è anche disponibile sulla porta Linux Mono ).
Il punto di usare la matematica è che non hai nulla a store : l'applicazione (pubblica, fissa) e la password principale (privata, mai memorizzata da nessuna parte ma nella tua testa) concettualmente " contenere "tutte le password per un numero virtualmente infinito di usi. Le sfide con questo tipo di soluzione sono:
-
Devi codificare l'output PBKDF2 (una sequenza di byte) in una "password" che sarà considerata accettabile "ovunque". Sfortunatamente, ogni sito, server o applicazione che accetta le password può avere le sue restrizioni (lunghezza minima, lunghezza massima, set di caratteri accettabili, set di caratteri NON accettabili ...) e non è chiaro se sia possibile progettare una singola codifica con conseguente password che funzionano per ogni sistema.
-
Per la stessa destinazione (la nostra "stringa di utilizzo"), ottieni sempre la stessa password. Alcuni siti / sistemi impongono cambiamenti di password su base regolare (per nessun motivo veramente razionale, ma sono gli umani per te). Puoi supportare tali cose includendo la data corrente (mese e anno) nella "stringa di utilizzo", ma è complicato dover ricordare se un determinato sito ha bisogno di password rotanti o meno.
Quindi, anche se questo metodo ha un po 'di eleganza, potrebbe essere poco pratico fino a quando alcuni pensieri pesanti e armeggiare saranno investiti nella creazione di un prodotto che fa il lavoro (il prodotto può essere uno strumento da riga di comando con un codice breve). / p>
Modifica: come per l'aggiornamento, una volta memorizzate le password, puoi sempre crittografare i file arbitrari con GnuPG (crittografia simmetrica con una password: gpg -c
). Pertanto, puoi memorizzare qualsiasi in questo modo, incluse le chiavi private per i certificati.