Questa non è una domanda pratica, ma più una questione di curiosità. Ho sentito un professore di CS consigliare di passare da password di md5ing non a SHA1, ma a AES crittografando la password usando se stesso come chiave. Qualcuno ha qualche idea se questo sia effettivamente più o meno sicuro?
Alcune riflessioni sull'argomento:
- SHA1 è a senso unico, che dovrebbe renderlo più sicuro di una funzione che conserva i dati.
- D'altro canto, l'hacker non può trarre vantaggio dalla natura decifrabile di AES perché non conosce ancora la password.
- A meno che non lo indovini. Ma in ogni caso non sarebbe stato in grado di criptarlo.
- Poiché sai che la password di AES viene decifrata quando la chiave di decodifica corrisponde all'output, potrebbe essere bruta sul computer dell'hacker.
- Ma l'hacker non sa come è crittografato, quindi non lo proverebbe.
- Ma l'hacker avrebbe potuto ottenere anche il codice di crittografia, nel qual caso è semplicemente una questione di quali dati impiegano più tempo per la forza bruta.
- La maggior parte dei siti web usa md5 o sha1 (giusto?), quindi le tabelle di ricerca per questi hash sarebbero molto più diffuse rispetto al metodo AES. Così rendendo il metodo AES più sicuro.
- Ma se salassimo entrambi i metodi, sarebbero ugualmente immuni alle tabelle di ricerca.
Alcuni punti comuni nelle risposte e contro-punti:
AES encryption is not designed to be collision resistant, and thus will probably have more collisions for the same hash string length.
Se utilizziamo un valore più lungo, la password crittografata sarà più lunga di un hash SHA1. Questo potrebbe essere sufficiente per portare le collisioni a un livello simile - o forse no.
AES encryption tells you how long the password was, within 16 bytes.
Possiamo aggiungere al metodo AES: dopo averlo crittografato, il pad o il trim viene eseguito su una lunghezza ragionevole (che è più lunga di quella di SHA1 in modo da evitare collisioni).