Ho preso in considerazione la possibilità di scrivere un programma per fare quanto sopra per i siti Web che intendo utilizzare solo per un uso a breve termine.
Sì, c'è una buona ragione, si chiama KeePass . È un'applicazione di gestione password gratuita e open source. Può generare automaticamente una password solida, associarla a un determinato sito Web e archiviarla in un database crittografato in modo sicuro per il quale si dispone della chiave sotto forma di password principale.
Oltre a scopi didattici, non giocare a crypto pro e scrivere i tuoi programmi relativi alla sicurezza.
Ci sono diversi buoni motivi per non farlo:
Una singola istanza SHA-1 è troppo veloce; quando si ricavano oggetti da password si desidera applicare correttamente hashing della password . Il sale è una buona cosa, ma è solo una parte dell'equazione.
Gli algoritmi crittografici non dovrebbero essere improvvisati; ci sono molti modi per danneggiarlo. Riutilizzare un algoritmo di hashing della password esistente che è stato pubblicato e analizzato e che ha resistito agli attacchi per alcuni anni.
Se si desidera modificare la password principale, si perdono tutte le password del sito. Se si desidera modificare una password del sito, è necessario modificare la password principale. Questo è inadeguato Per questo, hai bisogno di uno strato di riferimento indiretto; Ad esempio, la password principale viene utilizzata per crittografare un database locale di password memorizzate per sito (e queste password per sito possono quindi essere completamente casuali o scelte dal sito o qualsiasi altra cosa). Questo è più criptato, quindi di nuovo non farlo a casa.
Se il webmaster di qualsiasi sito che visiti conosce l'algoritmo di cui sopra, diventa possibile per loro montare un attacco di forza bruta sulla tua password principale dalla password generata. Quindi, affinché questo sia uno schema fattibile, la password principale dovrebbe probabilmente essere una lunga stringa di casualità (che probabilmente annullerebbe lo scopo dello schema), o il dispositivo che genera le password dovrebbe avere una chiave casuale lunga che è stata sbloccata dalla password principale.
Non è chiaro in che modo il "sale" si adatta a questo - se è casuale, come fai a sapere quale sale usare per un determinato sito? Se non lo è (cioè è un segreto fisso), in che cosa differisce dalla password principale in natura?
Se disponi di sale saltuario e lo stai memorizzando sul dispositivo di generazione, potresti anche generare l'intera password casualmente e archiviarla protetta sul dispositivo (come Keepass e altri). In pratica, questo ha il vantaggio di avere una registrazione di tutti i nomi dei siti per i quali hai le chiavi. Senza questo, diventa difficile ricordare quale sia il nome canonico per un sito. Ad esempio, farai riferimento a questo sito come "Scambio stack di sicurezza IT", "Sicurezza StackExchange", "Sicurezza", "security.stackexchange.com", "www.security.stackexchange.com" o "user29349.openidprovider" .com" ...?
Leggi altre domande sui tag passwords password-management hash