In che modo la crittografia forza un processore a "mettere in pausa"?

0

Spesso mi viene detto che la crittografia obbliga i processori a "fare una pausa" quando si esegue il calcolo matematico per decrittografare un hash, motivo per cui la forzatura bruta può richiedere così tanto tempo. Non capisco cosa significhi per un processore "fare una pausa" né come una stringa di numeri possa forzare quella pausa. Qualcuno può spiegarlo usando il più semplice inglese possibile?

Riconosco che non potrei lanciare tutti questi termini in modo accurato - il mio computer e i miei fondamenti matematici sono al massimo deboli.

    
posta trosborn 18.02.2016 - 22:59
fonte

3 risposte

3

La tua domanda mi sembra un po 'vaga, quindi posso pensare a due cose che potresti significare costringendolo a mettere in pausa:

Una pausa programmata - nel caso in cui tu non abbia accesso agli hash delle password, e stai solo provando a digitare una password nel dispositivo, il dispositivo può semplicemente attendere arbitrariamente un certo periodo di tempo prima di dirti se ci sei riuscito o no. Questa quantità di tempo può aumentare con ogni tentativo fallito, anche se comunemente le prime volte hanno poca penalità, a causa della tendenza umana a confondere password o digitare le cose in modo errato. Se qualcuno ha accesso agli hash delle password e utilizza il proprio software per testare tutte le combinazioni (un attacco di forza bruta), non è necessario includere tale pausa e non avrà alcun effetto.

Controllo password computazionalmente costoso - alcune strategie di hashing richiedono un sacco di calcolo * per verificare che la password sia corretta. Questi sono intenzionalmente utilizzati per il controllo della password perché non è possibile scrivere il proprio software per bypassarlo. Anche se può sembrare una cattiva idea costringere gli utenti ad aspettare questo calcolo costoso, dover aspettare un intero secondo non è un grosso problema per l'utente valido, ma è un grosso problema quando si ha a che fare con una persona che sta tentando di indovinare la password con la forza bruta, in quanto tale penalità è sostenuta per ogni singola ipotesi sbagliata che fanno. Dovrei menzionare il fatto che, sebbene questo possa sembrare solo una pausa dal punto di vista dell'utente, dal punto di vista del computer, è una quantità enorme di lavoro, che semplicemente non ha alcun risultato visibile disegnato sullo schermo.

* un sacco di calcoli rispetto ai pochi millisecondi che la maggior parte delle operazioni richiedono: il ritardo effettivo può essere solo un secondo o giù di lì, a seconda dell'hardware.

    
risposta data 18.02.2016 - 23:15
fonte
3

Penso che tu stia confondendo un paio di concetti e stai chiedendo in particolare l'hashing della password, corretto?

L'hashing della password, se eseguito correttamente, introduce un fattore di lavoro, il che significa che ci vuole un po 'di tempo per calcolare un hash, non strettamente come una "pausa" mentre lo descrivi, anche se ciò comporta che l'utente finale percepisca alcuni ritardo, che potrebbe essere interpretato allo stesso modo.

Un'ulteriore correzione di nota: un hash è a senso unico. Non c'è possibilità di decifrare. Quindi, se hai un hash di una password e vuoi capire quale password è stata usata per creare quell'hash, il modo in cui lo fai è usare la stessa funzione di hash e inviare le password candidate e confrontare l'hash risultante per l'hash che hai, per vedere se corrispondono. Questo è ciò che i siti web (per esempio) tipicamente fanno. In termini molto semplici, quando crei un account, ti viene chiesto di fornire una password, che viene sottoposta a hash, e l'hash è archiviato. Quando torni ad accedere di nuovo, inserisci di nuovo la tua password, il sito web ha cancellato ciò che hai dato e lo confronta con l'hash che ha memorizzato. Se corrispondono, sei autenticato. In caso contrario, ti verrà chiesto di riprovare.

Quindi, il problema con una semplice funzione di hash è che è abbastanza facile creare gli hash di molte password candidate molto velocemente. Quindi, quando l'utente malintenzionato ruba un hash di password da un database, può quindi creare hash da un dizionario di possibili password e confrontare gli hash risultanti con l'hash rubato per capire quale sia la password a un ritmo sbalorditivo. Per molte funzioni hash comuni, può provare letteralmente miliardi di possibili password ogni secondo.

La soluzione per questo, che penso tu stia alludendo alle tue domande, è il fattore di lavoro che ho menzionato, che è generalmente implementato come iterazioni. Pertanto, quando viene inoltrata una password per l'hashing, questa non viene sottoposta a hash una volta, ma 10.000 volte, o 100.000 volte o 1.000.000 di volte. Ciò significa che quando un utente malintenzionato ruba questo hash, anche lui deve eseguire il hashing di ognuna delle sue password candidate altrettante volte per capire se il candidato è effettivamente corretto. Così ora hai limitato i suoi possibili tentativi da miliardi al secondo, a miliardi divisi per 10.000, o diviso per 100.000, o per 1.000.000. Molto più costoso per lui, e molto meno probabile che otterrà abbastanza lontano nel suo elenco di possibili password per trovare la password effettiva.

In pratica è un po 'più complicato questo. Devi tenere conto di dettagli come sali, durezza computazionale rispetto alla durezza della memoria e altre variabili simili, ma in generale, ad un livello elevato, questo è il meccanismo con cui rendere difficile l'hashing della password di attacco.

    
risposta data 18.02.2016 - 23:17
fonte
2

Penso che ci siano due cose che potresti aver sentito per darti questa idea.

In primo luogo, un buon algoritmo di hash per l'archiviazione delle password è progettato per impiegare molto tempo alla forza bruta. Ciò tuttavia non si ottiene mettendo in pausa il processore. Al contrario, si ottiene facendo lavorare molto il processore.

L'algoritmo hash è progettato per richiedere molti calcoli (e quindi molto tempo). Per forzare un hash, è necessario eseguire l'algoritmo hash miliardi di volte e se l'algoritmo è buono, dovrebbero impiegare anni anche su un buon computer. Ma sono anni di calcolo attivo, non di pausa.

Per ulteriori informazioni sull'hash delle password, consulta l'articolo , in particolare la sezione sulle funzioni di hash lento.

In secondo luogo, potresti aver sentito che su molti sistemi di accesso non accetti alcun numero di tentativi di inserire una password senza costringerti a mettere in pausa, in modo da impedirti di forzare la password. Questo non ha nulla a che fare con la crittografia. Anche il processore non si ferma. È solo che qualunque cosa tu stia effettuando l'accesso (potrebbe essere un server remoto, o potrebbe essere un circuito integrato nel tuo iPhone) si rifiuta di testare le tue credenziali perché è programmato in questo modo.

    
risposta data 18.02.2016 - 23:16
fonte

Leggi altre domande sui tag