memorizza le password come hash a senso unico o semplicemente le usi come chiavi AES?

0

Voglio memorizzare alcuni dati in modo che l'unico a poter accedere sia l'utente stesso. Ecco la mia idea: quando l'utente si registra, la sua password verrà sottoposta a hash in SHA256 (quindi verrà adattata come una chiave AES) e crittograferà i dati utilizzando come chiave AES 256 .

Se è così, posso rinunciare alla sezione password nel DB, non avrò bisogno di hash la password, salare, ecc. - Posso solo provare a decodificare i dati - è successo, la password è corretta.

Quindi ciò che è considerato più sicuro? one-way-hash utilizzando password_hash di PHP con un strong salt, o semplicemente hash la password usando SHA256 e usalo come chiave AES ( che non sta crittografando la password stessa?

Dopotutto, ho letto che AES 256 è abbastanza sicuro da crittografare informazioni TOP SECRET, quindi sono abbastanza sicuro che sia difficile capire quale sia la chiave. E anche se riusciranno in qualche modo a tenere premuto il tasto, dovranno comunque forzare lo SHA256 per accedere alla password.

Grazie!

    
posta Vlad Gincher 22.05.2016 - 13:27
fonte

2 risposte

4

Non utilizzare SHA256 per le password di hash. SHA256 è un algoritmo di digest del messaggio. È progettato per essere molto veloce. Utilizzare un algoritmo che è intenzionalmente progettato per essere lento e difficile da implementare in hardware specializzato. Perché? Poiché gli algoritmi veloci consentono a un utente malintenzionato di forzare un numero elevato di password fino a quando non ne trovano uno che funziona. "Dovranno ancora forzare lo SHA256 per accedere alla password" non è un ostacolo. Un cracker SHA256 che gira su una GPU consumer-grade può calcolare gli hash di milioni di password al secondo .

Bcrypt (che viene usato da PHP_shsh_di_utente) è uno di questi algoritmi, ma quando si desidera trasformare una password in una chiave di crittografia, non è la scelta giusta perché non è progettata per questo scopo. Il termine di ricerca che stai cercando è " Key Derivation ". Una soluzione standard è scrypt che presenta diversi vantaggi rispetto al tuo metodo:

  • Ha hash ogni password con un unico sale. Ciò significa che due utenti con la stessa password avranno hash diversi. Ciò significa che l'autore dell'attacco deve forzare manualmente ogni password e non può eseguire il cracker sull'intero database finché non trova una password che si adatti all'hash di di qualcuno
  • .
  • Può generare chiavi di qualsiasi lunghezza tu voglia. In questo modo ottieni maggiore flessibilità per quanto riguarda la durata della crittografia.
  • La sua funzione di hash è intenzionalmente progettata in modo tale da renderla estremamente inadeguata da implementare con hardware specializzato per il calcolo del numero parallelo come GPU, FPGA o ASIC.
risposta data 22.05.2016 - 15:00
fonte
2

Per la crittografia dei dati, in genere è consigliabile memorizzare una chiave casuale e crittografarla con la password correttamente salata. Ciò significa che se / quando l'utente modifica la propria password, è sufficiente decrittografare e crittografare nuovamente la chiave e non tutti i relativi dati.

    
risposta data 22.05.2016 - 23:00
fonte

Leggi altre domande sui tag