No, non lo è.
Mentre è lo scopo stesso della crittografia, per proteggere i dati all'interno della crittografia (a condizione che la chiave sia sicura!), esiste una vulnerabilità molto chiara, che le password, in particolare, sono abbastanza vulnerabili a:
Una data stringa di input, crittografata con AES, darà sempre lo stesso risultato.
Ciò significa che, se due utenti hanno le stesse password e una è compromessa, anche l'altra viene automaticamente compromessa.
Ad esempio, diciamo che ho impostato la mia password con la password più comune: "password". Ottengo la stringa crittografata AES. Quindi lo cambio in "123456", e ottenere questa stringa crittografata. Passo a poco a poco il mio modo attraverso le prime 10.000 password, generando 10.000 stringhe crittografate (e le loro password non criptate). Non ho idea di quale chiave è stata utilizzata.
Ora, vado a un altro utente casuale. C'è una possibilità del 90% di poter cercare la loro password crittografata con AES nella mia tabella arcobaleno, a quel punto posso vedere esattamente quale sia la loro password.
Gli hash delle password sono anche vulnerabili a questo. Questo è il motivo per cui sale & normalmente vengono utilizzati i peperoni.
Inoltre, per le password più lunghe, se il primo blocco (16-32 caratteri) dell'ingresso corrisponde, anche il primo blocco dell'output corrisponderà. Quindi, se la password è "Il mio nome di accesso è AMADANON Inc." e la password di qualcun altro è "Il mio nome di accesso è Harry Cho" e la mia password è compromessa, sono noti anche i primi 16 caratteri della tua password.
Sebbene questi problemi possano essere risolti, c'è anche un problema più grande: se qualcuno riceve la chiave AES, tutte le password sono in chiaro. Le chiavi AES sono, abbastanza inevitabilmente, archiviate abbastanza vicine alle password crittografate (sulla stessa macchina). dovresti accettare che, se il malware accede a un server con la chiave AES e le password crittografate AES, vengono compromessi.
L'unica ragione per archiviare una password crittografata AES, è sul lato client, se non si ha il controllo del lato server. NON farlo MAI sul server - usa un buon hash standard, da una libreria standard, con sale e pepe.
Se stai scrivendo sia il client che il server, NON utilizzare affatto le password. A questo punto, non si sta autenticando un utente, ma una macchina. Per autenticare una macchina, le password sono lo strumento sbagliato. Invece, usa la chiave pubblica crypto - TLS per esempio, con l'autenticazione del client - di nuovo, ci sono già delle librerie scritte per te. Se si desidera autenticare anche l'utente, inserire una password sulla chiave privata. La chiave crittografica pubblica ha i vantaggi che il segreto non viaggia mai attraverso la rete e il server non sa cosa sia; si dimostra di averlo senza darlo al server.