Password multiple con hashing

1

Per proteggere le password un sito Web utilizza una funzione di hashing prima di memorizzare la password (questo è solo un esempio di una semplice funzione di hash):

f (x) = x mod 10

Le password vengono sottoposte a hash prima di essere archiviate nel database e quindi quando un utente accede al campo di immissione della password viene sottoposto a hash e confrontato con quello nel database.

Se la password dell'utente è 17, allora 17 mod 10 = 7 è ciò che è memorizzato nel database. Se l'utente digita 17 durante l'accesso, eseguirà l'hash su 7 e funzionerà correttamente. Tuttavia, non potevano 27, 37, 47 ... non ci sarebbero molte password anche da hash a 7 in modo che si autenticassero correttamente?

    
posta Melkor 03.12.2016 - 23:38
fonte

1 risposta

3

Tutte le funzioni di hash - ad eccezione delle funzioni di hashing perfette - hanno collisioni, poiché l'hashing normalmente associa un insieme più grande di input a un set di output più piccolo.

Detto questo, mod 10 è una funzione terribile per le password di hashing in quanto la quantità di collisioni non è accettabile in pratica.

A parte questo, è anche inaccettabile perché è troppo veloce, e perché è incredibilmente facile trovare un input corrispondente (perché si può semplicemente usare l'hash come password, corrisponderà sempre). Inoltre, non puoi ridurre realmente le collisioni aumentando il divisore. Ad esempio, se si impostasse su 1000, tutti gli input inferiori a 1000 in realtà non cambiano.

Questo è un bell'esempio che non tutte le funzioni di hash sono accettabili come funzioni hash crittografiche.

Le funzioni hash crittografiche devono essere pre-resistive, seconda pre-resistenza e resistenza alle collisioni.

mod non è nessuno di questi:

  • Resistenza pre-immagine: dato un hash h, dovrebbe essere difficile trovare una password p tale che h = h (p). Non è. p = h funzionerà sempre.
  • Seconda resistenza pre-immagine: data una password p1, dovrebbe essere difficile trovare un'altra password p2 tale che h (p1) = h (p2). Non è. p2 = p1 + divisore funzionerà.
  • Resistenza alla collisione: dovrebbe essere difficile trovare due password p1 e p2 tali che h (p1) = h (p2). Ovviamente non lo è, visti i due punti precedenti.

Per le funzioni accettabili, vedi Come fare in modo sicuro le password di hash? .

    
risposta data 04.12.2016 - 00:05
fonte

Leggi altre domande sui tag