Metodi per rallentare un algoritmo di hashing

19

Capisco perché un algoritmo di hashing dovrebbe essere lento, ma è il metodo che lo rende lento alla forza dell'hash? Tutto quello che ho letto dice che l'algoritmo dovrebbe essere computazionalmente lento - copiare la cosa su migliaia di iterazioni o concatenarlo con stringhe enormi per rallentarlo. Sembra che ciò metterà a dura prova la CPU. Non potresti semplicemente cancellare la password una volta con un buon salt random e quindi mettere il thread in pausa per un certo periodo di tempo?

    
posta Matthew 08.08.2014 - 17:14
fonte

2 risposte

43

L'obiettivo non è quello di rendere l'hash lento per il calcolo. L'obiettivo è di rendere l'hash lento per il calcolo da parte di un utente malintenzionato. Più specificamente, lento per un utente malintenzionato che dispone di hardware veloce e una copia sia dell'hash che di sale e che quindi ha la possibilità di eseguire un attacco offline. L'autore dell'attacco non deve mettere in pausa un thread durante i suoi calcoli solo perché l'hai aggiunto alla tua applicazione. Utilizzerà software e hardware che gli consentiranno di calcolare gli hash nel modo più rapido ed efficiente possibile. Pertanto, per renderlo computazionalmente difficile per lui, con tutto il suo hardware veloce e il suo efficiente software di hashing, l'hash deve essere computazionalmente difficile da calcolare.

    
risposta data 08.08.2014 - 17:29
fonte
2

Eseguire poche migliaia di iterazioni o aggiungere un sale molto lungo non è necessariamente il modo migliore per eseguire un hash lento, ma è il più ovvio (il più semplice).

L'intento è innanzitutto quello di rallentare gli attacchi massivamente paralleli . Un utente malintenzionato non sarà in grado di forzare il tuo hash in un tempo ragionevole su una singola CPU. Utilizzerà una botnet o una macchina con diverse GPU (o entrambe).

Eseguire lo stesso hash un migliaio di volte non è esattamente la cosa più saggia, poiché è facile eseguire questa attività in parallelo, e per lo più sottolinea ALU, essendo entrambe le corrispondenze perfette per il calcolo della GPU. D'altra parte, l'impatto sulla tua CPU potrebbe essere molto evidente (dipende da quante iterazioni fai).

Idealmente, un hash lento implicherebbe operazioni che rendono difficile la parallelizzazione e che utilizzano la larghezza di banda in aggiunta all'ALU grezzo, come richiedere e toccare quantità notevoli di RAM (questo limita anche la quantità di istanze che possono essere eseguite su uno zombie senza essere rilevato) o che richiedono operazioni costose su GPU (ad es. scritture ad accesso casuale).

Ovviamente questo non è esattamente tanto semplice da realizzare quanto semplicemente eseguire un hash di qualche migliaio di iterazioni, motivo per cui solitamente ci si concentra su questo.

    
risposta data 09.08.2014 - 10:11
fonte

Leggi altre domande sui tag