Round in una funzione di hashing

1

Prima di tutto, ciao! Sono nuovo nel sito, non conosco nessun equivalente inglese a "yoroshiku".

Quindi, stavo leggendo la documentazione del generatore di SHA-512crypt e ho trovato la parte:

The default number of rounds for both algorithms is 5,000. To ensure minimal security and stability on the other hand minimum and maximum values for N are enforced:

minimum for N = 1,000

maximum for N = 999,999,999

Bery interessante poiché nella mia umile mente se applichi a molti round in una funzione di hashing potresti finire con una collisione riportandoti al punto uno dell'hash.

Sono corretto? o la mia comprensione delle collisioni è errata?

Per come la vedo io, puoi causare una collisione con testi in chiaro troppo lunghi o con troppe applicazioni con la stessa funzione di hashing.

Ci scusiamo per eventuali errori grammaticali, non sono un madrelingua inglese.

    
posta WOkzinhan 24.01.2017 - 17:15
fonte

3 risposte

4

Credo che in questo contesto yoroshiku possa essere reso come la speranza di una presenza lunga e produttiva su Security.StackExchange :-). Quindi, benvenuto!

Sei parzialmente corretto nella comprensione del problema di collisione; il rischio esiste, ma se l'algoritmo ha un output abbastanza "piatto", il rischio è essenzialmente lo stesso indipendentemente dal numero di round.

La "sicurezza" che viene incrementata incrementando il numero di round è la certezza che chiunque tenti di generare un numero elevato di hash (ad esempio per un attacco di forza bruta) richiederà una quantità di potenza di calcolo sufficientemente improbabile.

Diciamo che SHA-512 con 10.000 round costa dieci volte quello che SHA-512 costa 1000 round. Quindi, l'enumerazione degli hash round 10K per qualsiasi scopo richiederà dieci volte più tempo rispetto agli hash round 1K.

Di solito, nella maggior parte delle applicazioni lo "scenario happy day" coinvolge solo la chiamata one alla funzione hash (ad es. si sta eseguendo l'hashing della password fornita dall'utente). Pertanto, possiamo utilizzare un numero alto arrotondato e consentire comunque all'utente di sperimentare un ritardo trascurabile.

The way i see, you can both cause a collision with too long plain texts or with too many applications of the same hashing function

Sì, ma stai solo confrontando le chiamate con lo stesso numero di round . Diciamo che per esempio l'hash round di 10K di "foo" è abcdef, e l'hash round di 1K di "bar" è troppo abcdef. Questa è una specie di collisione.

Ma quando viene eseguito il sistema, non utilizzerà il risultato dell'hash ad ogni round; aspetterà fino a quando non avrà completato il round 10K prima di restituire l'hash. non saprà mai che è stata generata una "collisione" al round 1.000.

    
risposta data 24.01.2017 - 17:39
fonte
0

Rinnoviamo la tua comprensione degli algoritmi di hash un po '.

Le funzioni di hash possono essere crittografate o meno. Le funzioni hash non sicure sono utili per attività come la mappatura delle stringhe, il rilevamento degli errori nei protocolli di comunicazione, quindi hanno ancora un posto. Ma non sono utili per scopi crittografici, perché hanno alcuni punti deboli.

Per essere sicuro, una funzione di hashing deve avere questi tre attributi specifici:

  • Modifiche a cascata: una modifica di un bit nel messaggio dovrebbe comportare una modifica imprevedibile di circa il 50% dei bit nel digest.
  • Non reversibile: non puoi ricreare un messaggio dato l'hash tranne che per attacco di forza bruta.
  • Resistenza alle collisioni: non è possibile trovare due messaggi con lo stesso valore di hash.

Nel suo cuore, l'effetto a cascata è l'attributo più importante, in quanto fornisce la forza dietro gli altri due attributi.

Ciascuno di questi attributi protegge da un certo tipo di attacco. Eseguendo un giro di hash, l'algoritmo crypt effettua almeno un bit di cambiamento nel messaggio, risultando in un hash completamente nuovo. Se l'algoritmo hash non avesse una strong resistenza di collisione, allora sì, sarebbe possibile avere più round che non cambiano molto l'hash.

Non avere resistenza alla collisione è stato un problema con le routine hash non crittografiche come CRC-32, dove se lo stesso messaggio viene modificato solo leggermente, può produrre lo stesso valore digest. Quindi, se una fonte sta pompando dati che variano solo di pochi byte, è possibile che alcuni possano scontrarsi lasciandoti nella cerchia che hai descritto. Ecco perché questi attributi sono così importanti per la sicurezza.

    
risposta data 24.01.2017 - 17:41
fonte
0

La funzione di hashing potrebbe avere un ciclo breve o un punto fisso. Un punto fisso è un valore per cui hash(value) == value . Ciò riduce notevolmente la sicurezza di un hash iterativo, perché qualsiasi iterazione eseguita dopo aver raggiunto il punto fisso non cambia più nulla.

Per risolvere questo problema l'hash può anche usare il conteggio delle iterazioni come parte dell'hash:

hash = hmac(password, salt)
for (i = 0; i < iter_count; i++) {
    hash = hmac(password, hash + i)
}
return hash

Un'altra soluzione, utilizzata da PBKDF2, è quella di raggruppare tutti gli hash intermedi nel risultato.

I cicli di hash e i punti fissi sono un po 'un rischio teorico. La possibilità di colpirne una è molto bassa e non sono noti cicli noti per funzioni hash come SHA1.

    
risposta data 24.01.2017 - 20:30
fonte

Leggi altre domande sui tag