Opzioni di password in home ortororico teorico, o cos'è che SCrypt, BCrypt, PBKDF2 è così speciale?

1

Sto sviluppando una struttura web personale, niente internetty, e probabilmente nemmeno nulla che possa mai andare sulla mia LAN personale. E alla ricerca di consigli sulle password, le persone sembrano raccomandare solo quelle librerie nel titolo. Lo sto facendo per imparare la sicurezza da una prospettiva di sviluppo, e di nuovo, sono consapevole che questa non è la miglior pratica che voglio imparare implementandola da sola (e infastidendo la comunità con domande incessanti).

Attualmente la mia routine fa 4096 colpi di SHA512 salato (un numero strappato dal nulla - I'll concedere che è una cosa che probabilmente hanno ordinato) in questo modo:

string randomdatabasesalt = "whateverdatabasesalt"  
user = "username"
string password = "whateverpassword"  
for (int i = 0; i < 4096; i++)  
{  
  password = SHA512(user + randomdatabasesalt + password);  
}   
store (user, password);  

Ora, se ne avrò bisogno in un secondo momento, potrò aggiungere altri round all'hash di tutti (pre-violazione ovviamente) e potrò rafforzarlo senza che nessuno debba reimpostare le password, tutte ragionevolmente facilmente. Oppure, se lo SHA2 si rompe completamente per quanto riguarda la velocità di cracking, posso ripassare quegli hash e aggiungerlo alla routine senza che nessuno sia più saggio, ma potrebbe essere uno spreco indesiderato di cicli. Quindi, che cosa c'è di sbagliato in questo approccio, a parte la scelta casuale e calcolata dei round? E 'solo la mancanza di revisione tra pari o fare le librerie di cui sopra fare qualcosa che non sto prendendo in considerazione?

Domanda secondaria, aggiungerei i sali che ogni passaggio in qualche modo indebolisce l'hashing? È meglio salare solo l'hash iniziale quindi passare attraverso? Esempio:

string password = "whateverpassword" 
password = SHA512(user + randomdatabasesalt + password); 
for (int i = 0; i < 4095; i++)  
{  
    password = SHA512(password);
}   
store (user, password);  
    
posta user2867314 20.06.2014 - 18:39
fonte

1 risposta

8

Bene, si tratta di una miscela di "no peer review" e "qualcosa che fai male". La cosa che stai facendo (apparentemente) è la tua selezione di sale: la chiami "randomdatabasesalt", che suggerisce l'idea di utilizzare lo stesso valore di sale per diversi hash, se dovessi memorizzare diversi hash delle password (ad es. quadro ha diversi utenti). Questo è un peccato: invalida la maggior parte del motivo per cui dovresti usare un sale in primo luogo. I sali dovrebbero essere per istanza: ogni utente dovrebbe avere il proprio sale, e il sale deve essere cambiato quando l'utente cambia la sua password.

Per il resto: chiunque può creare uno schema crittografico che non può rompere. La parte difficile è creare uno schema che nessun altro può distruggere. La parte difficile di veramente è quella di assicurarsi che nessuno possa romperlo (perché vogliamo sicurezza, ma vogliamo anche dormire la notte).

I crittografi si affidano quindi alla revisione tra pari e allo sviluppo a ritmo lento. Quando vogliono progettare una nuova funzione, organizzano una competizione in cui le persone sono incoraggiate a presentare candidati, completi di specifiche, vettori di test e implementazioni di riferimento; e poi passano un po 'di tempo (anni) per cercare di rompere le creazioni l'uno dell'altro. I sopravvissuti sono quindi considerati "probabilmente sicuri". Questo è ciò che è stato fatto per AES e SHA-3, ad esempio. E, proprio al momento giusto, c'è una competizione in corso per le funzioni di hashing della password .

Questa presentazione è una buona introduzione sull'hash delle password e elenca alcune funzionalità che dovrebbero avere buone funzioni di hashing della password. Dai anche un'occhiata a la risposta .

(Un modo di progettare cryptosystems che NON funziona è un veloce ciclo di modifica dei commenti, che di solito avviene come un dialogo tra un aspirante designer e un crittografo amicable e competente. Il designer, pieno di zelo, presenterà un interminabile flusso di varianti minori del suo schema, ognuna delle quali aggiunge un costrutto casuale per rispondere all'ultimo commento del crittografo.Questo finisce sempre con il crittografo essere stufo e smettere di rispondere, il progettista quindi rivendica la vittoria e scrive una pagina Web colorata, e poi non riesce a diventare ricco durante la notte quando il resto del mondo non riconosce il genio del nuovo algoritmo.)

    
risposta data 20.06.2014 - 19:15
fonte

Leggi altre domande sui tag