Come valutare la forza di un algoritmo di hashing?

11

Al lavoro l'algoritmo di hash che usiamo per le password sembra essere su misura. Ovviamente questa è una pessima idea, ma la gestione non sembra infastidita.

L'algoritmo produce sempre stringhe maiuscole di 20 caratteri. Un aspetto particolarmente preoccupante del suo comportamento è che password simili producono hash simili: Password1 e Password2 producono hash che sono diversi solo di circa 5 caratteri.

L'altro problema ovvio è che non sembra che l'algoritmo sia deliberatamente lento, il che mi viene detto che dovrebbero essere validi algoritmi di hashing ( bcrypt , scrypt ).

Come si fa a valutare la forza di un algoritmo di hashing? E che tipo di attacchi dovremmo essere particolarmente preoccupati con un algoritmo di hashing veloce con scarsa uniformità?

Ho accesso alla fonte (anche se sfortunatamente non posso pubblicarlo su un forum pubblico, per ovvi motivi).

    
posta AnonEmployee 26.12.2012 - 21:45
fonte

4 risposte

11

Un algoritmo di hashing strong implicherebbe che cambiando anche un un carattere avrà come risultato un completamente hash diverso.

Un buon algo hashing ha queste caratteristiche:

  • Il valore dell'hash è determinato dai dati sottoposti a hashing
  • La funzione di hash utilizza tutti i dati dati
  • L'hash distribuisce tutti gli hash possibili in modo uniforme su tutti i possibili risultati di hash
  • Se hai una stringa e prendi una stringa molto simile, otterrai un risultato hash completamente diverso (la modifica di un singolo bit di input dovrebbe cambiare tutti i bit di output con una probabilità del 50% .Un altro requisito è che l'hash sia , nella massima misura possibile, statisticamente indipendente dall'input, ad esempio un elevato peso di hamming nell'input non produce un peso costante a> nell'output. - Polinomiale )

Dillo alla tua gestione

non essere Dave e usa solo uno degli algoritmi di hashing standard. Se si utilizzano gli hash per memorizzare le password, utilizzare bcrypt . Quando esegui l'hashing di una password, sei anche preoccupato per i sali, bcrypt fa tutto questo per te. Inoltre è tutto gratis.

    
risposta data 26.12.2012 - 22:19
fonte
5

Notando che:

similar passwords produce similar hashes: Password1 and Password2 produce hashes that are different by only about 5 characters

è sufficiente per dichiarare che questo algoritmo di "hashing" è pura spazzatura. Il minimo che un algoritmo che pretende di essere un "hash" è, almeno, sembrare casuale . Algoritmi completamente spezzati come MD4 o anche hash non crittografici (come CRC32 ) offrono un risultato" soddisfacente "per quanto riguarda la semplice analisi statistica.

La funzione di hash a cui alludi sembra seguire la fantasia hollywoodiana di "close decryption" (quando hai quasi il tasto giusto, il testo è quasi leggibile, solo un po 'sfocato). Questo è solo un revival del gioco da tavolo Mastermind .

La sicurezza significa sconfiggere un avversario dedicato, intelligente e malevolo. La funzione di hash sul tuo lavoro può essere violata da uno scimpanzé.

    
risposta data 27.12.2012 - 18:50
fonte
3

Una valutazione professionale è molto complicata e deve essere eseguita da esperti del settore per un lungo periodo di tempo. Detto questo, non penso che sia necessario avere un esperto per dare un'occhiata a questo: con un algoritmo di hash veloce con scarsa uniformità e dimensioni ridotte (20 caratteri maiuscoli sono circa 94 bit, anche md5 ha 128) sei vulnerabile a entrambi attacchi a forza bruta e attacchi di collisione hash.

La tua azienda dovrebbe cambiare questo sistema al più presto.

(In realtà, a seconda di quanto sia pessimo quell'algoritmo, potrebbe essere possibile invertirlo in modo tale che un programma rapido possa immediatamente fornire password corrette per determinati hash .Questo è particolarmente terribile in quanto infrange tutte le password contemporaneamente.)

    
risposta data 26.12.2012 - 22:17
fonte
1

Una buona funzione di hashing deve avere quelle che vengono definite buone "caratteristiche valanghe"; una piccola modifica al messaggio produce una grande (e teoricamente imprevedibile) modifica nel digest di hash. La tua funzione di hash ha un effetto valanga molto piccolo.

L'effetto valanghe è uno dei modi principali in cui le funzioni hash resistono agli "attacchi pre-attacco". Un attacco preimage è essenzialmente "de-hashing" del digest; dati un hash digest e la funzione di hash, trova un messaggio (di solito qualsiasi cosa farà, a volte ci sono limitazioni della lunghezza del messaggio e del valore del byte) che produrrà l'hash di destinazione. Lo scopo di base di una funzione di hash è la sua trasformazione deterministica ma a senso unico, e quindi qualsiasi algoritmo che può trovare una preimage in meno di 2 ^ N volta, per un hash digest di N bit, dovrebbe essere preso come prova che l'hash è fondamentalmente rotto.

Caso in questione; l'effetto valanga basso significa che le modifiche a un digest di hash, dato un cambiamento noto al messaggio, possono essere monitorate e previste. Ciò consente un approccio di "ricerca degli obiettivi"; dato un messaggio di partenza, fai una piccola modifica, calcola l'hash e vedi se è "più vicino" a quello reale (più dei bit corretti impostati). I cambiamenti chirurgici possono quindi essere utilizzati per modellare il messaggio di lavoro in un preimage.

    
risposta data 27.12.2012 - 21:57
fonte

Leggi altre domande sui tag