Metterò a rischio la sicurezza se memorizzo i primi tre caratteri (hash) in una tabella separata?

0

Affinché un rappresentante dell'assistenza clienti identifichi un cliente, vorrebbe chiedere al cliente i primi tre caratteri della sua password.

La lunghezza minima della password è attualmente di otto caratteri, viene utilizzato un "grande" sale e la soluzione di hashing è BCrypt.

L'idea è di hash e memorizzare i primi tre caratteri separatamente.

    
posta Martin R-L 06.09.2017 - 08:44
fonte

1 risposta

9

Se un attaccante ottiene l'accesso agli hash memorizzati e sa che ognuno di questi codifica solo un singolo personaggio, può forzare questo personaggio con pochissime ipotesi. Il sale non protegge da questo dato che fa parte dell'hash della password memorizzato e quindi noto all'attaccante. Il rallentamento eseguito da bcrypt non è d'aiuto, dal momento che solo alcuni caratteri devono essere indovinati.

Ancora peggio, una volta che l'attaccante ha avuto accesso ai primi 3 caratteri della password in questo modo facile, la forzatura bruta dei caratteri rimanenti è considerevolmente meno impegnativa, come se la password dovesse essere obbligatoriamente forzata.

Se non esiste un hash separato per ciascuno dei primi 3 caratteri, ma solo un hash su tutti e tre insieme, non è così insicuro come con tre password di una sola lettera, ma è ancora totalmente insicuro.

Per fare in modo che il problema di memorizzare uno o alcuni caratteri invece di tutti i caratteri di una password in un hash separato mostri chiaramente che la matematica coinvolta considera il seguente esempio:

  • Supponendo che una password sia composta da 100 cifre casuali.
  • Quando brute-forzando questa password in una volta un attaccante dovrebbe controllare al massimo tutte le 2 ^ 100 permutazioni e in media la metà che è ancora troppo per gli attacchi pratici.
  • Ma, se tutte queste cifre sono memorizzate in hash separati e l'attaccante ottiene così un riscontro positivo già dopo aver infranto la cifra per una posizione specifica, ha solo bisogno di almeno 10 tentativi per ciascuna posizione e quindi di 10 * 100 tentativi in totale. In questo modo la password diventa banale in breve tempo anche se ogni tentativo richiede un secondo intero. E nessun sale proteggerà contro questo.
  • Se non hai una sola cifra, ma solo combinazioni di 3 cifre, migliora un po 'ma è ancora lontana dalla sicurezza. In questo caso ognuno di questi hash per 3 cifre richiederebbe al massimo 1000 tentativi. Con 33 di tali hash (e uno per una singola cifra) o memorizza la password originale di 100 cifre, un attacker avrebbe bisogno al massimo di 33 * 1000 + 10 tentativi, cioè è ancora assurdamente insicuro.
risposta data 06.09.2017 - 08:53
fonte

Leggi altre domande sui tag