Opinione sulla crittografia della password del database SQL necessaria

4

Sto cercando di capire se la mia struttura di crittografia della password del database è buona o poco utile.

Quindi quando registro, il php genererà una chiave casuale di 50 caratteri, e quella chiave verrà inserita in una tabella di db chiamata hash tagged rispetto all'ID utente, quindi l'hash verrà utilizzato per crittografare la password e la password AES sarà memorizzato in un'altra tabella.

Quando un utente effettua il login, l'hash verrà estratto e utilizzato per la decrittografia. E se l'accesso ha esito positivo, la chiave di hash verrà sostituita con una nuova generata per il prossimo utilizzo ecc .....

Non sono sicuro che questa sia una buona idea o no, qualsiasi feedback è buono, grazie!

    
posta John 12.09.2016 - 11:58
fonte

4 risposte

34

No , questa non è una buona idea! Come indicato da Lukas in un commento, desidera hash una password , non crittografarla mai! Con il tuo schema, sarebbe possibile ottenere le password in chiaro da un dump del database senza alcuno sforzo. Non permettere che ciò accada!

    
risposta data 12.09.2016 - 12:16
fonte
10

No, non va affatto bene.

Prima di tutto, c'è un'enorme confusione sulla terminologia.

Una funzione hash esegue il mapping di input arbitrari a un set fisso. Il vantaggio è che sono unidirezionali, quindi possono essere utilizzati per memorizzare le password per l'autenticazione senza memorizzare la password effettiva e senza la possibilità di recuperare la password effettiva.

Encryption d'altra parte è bidirezionale: se hai la chiave, la decrittografia è banale.

Ciò che chiami "hash" non sembra affatto un hash, sembra essere una chiave simmetrica , utilizzata per crittografare e decifrare.

L'intero schema non offre alcun vantaggio per l'archiviazione delle password in testo semplice. Se un utente malintenzionato ha accesso in lettura al database e può quindi leggere le password crittografate, può anche leggere la chiave, rendendo la crittografia inutile.

In genere, quando si cripta qualcosa memorizzato in un database, non si desidera memorizzare la chiave di crittografia nello stesso database. Ma in questo caso non importa, come le password sono hash, non crittografate .

    
risposta data 12.09.2016 - 12:31
fonte
1

C'è una cosa chiamata "decodifica" per la crittografia, ma non esiste una cosa come "unhashing". Quindi puoi salare la password o utilizzare la funzione password_hash integrata.

    
risposta data 12.09.2016 - 13:41
fonte
1

Un altro motivo per cui questo potrebbe non essere sicuro, in aggiunta all'intero hash! = problema di crittografia, è la maniera della generazione della password. La tua "chiave" o "hash" come la chiami, è fondamentalmente questa: una password generata automaticamente.
Ora, se l'algoritmo che genera detta password esegue questa operazione in modo prevedibile e l'utente malintenzionato può accedervi. Quindi diventa possibile per un utente malintenzionato prevedere la password per tutti gli utenti, anche se è correttamente hash!

Raccomando di leggere un po 'di più sugli attacchi temporali e di assicurarti di utilizzare una fonte casuale appropriata per questo tipo di password / generazioni di chiavi.

    
risposta data 13.09.2016 - 16:58
fonte

Leggi altre domande sui tag