Quale è più veloce, in media, trovare il testo in chiaro originale di un hash: forza bruta in ordine, o con testo in chiaro?
Matematicamente, assumiamo che l'utente crea la sua password usando una distribuzione di probabilità che l'attaccante conosce perfettamente . L'utente malintenzionato genera quindi le password per tentare in ordine di plausibilità. Quando più password hanno la stessa probabilità di essere scelte dall'utente, l'ordine in cui l'utente malintenzionato le prova non ha importanza per il tasso medio di successo.
L'ipotesi di "perfetta conoscenza" da parte dell'attaccante è l'unica che consente un'analisi del rischio sostenibile. Ad esempio, supponiamo di iniziare in una situazione in cui gli utenti scelgano le loro password a caso, in modo uniforme, in un insieme di N possibili password. Gli aggressori quindi esplorano abitualmente le password in ordine lessicografico. Notando che, un utente può quindi dire a se stesso: "hey, inizierò la mia password con 'zzz' in modo che gli aggressori provino che ultimo . Che astuzia da parte mia!". Tuttavia, questo non durerà: gli aggressori si adatteranno e inizieranno a provare le password in ordine inverso . Il nostro arguto utente sceglierà quindi una password che inizia con "mzz" o "naa", in modo da trovarsi nel mezzo dell'intervallo, a una "distanza di sicurezza" da entrambi i tipi di attaccanti. Questo farà in modo che alcuni attaccanti inizino l'esplorazione anche a metà del range. E così via ...
Questo esempio mostra che il vantaggio che un utente può ottenere rispetto agli aggressori in base all'asimmetria delle informazioni è, nella migliore delle ipotesi, di natura transitoria e non può essere quantificato in modo affidabile, poiché dipende dalla "intelligenza" e dalla velocità di evoluzione degli aggressori. Quindi preferiamo assumere che gli aggressori provano le password nell'ordine "ottimale", cioè sanno già come generiamo le password.
In queste condizioni, il meglio che l'utente può sperare è una selezione uniforme: quando ci sono N possibili password, e ogni password ha probabilità 1 / N di essere selezionato , il costo medio dell'attacco è N / 2 . I punti interessanti sono:
In una certa misura, questo in realtà significa che ordine casuale è la strategia dell'attaccante che riduce al minimo i rischi dell'attaccante . Esplorare le N password possibili in un ordine casuale garantisce un costo medio di N / 2 , indipendentemente da come l'utente potrebbe essere stato furbo nel suo strategia di selezione della password. Dal punto di vista dell'attaccante, l'utilizzo di un ordine specifico definito comporta il rischio di essere sorpassato dall'utente. Anche gli aggressori sono esseri razionali: supponiamo che gli hacker conoscano perfettamente la nostra strategia di generazione di password, perché altrimenti non potremmo valutare i nostri rischi; allo stesso modo, gli aggressori presumono che gli utenti possano essere pienamente consapevoli dell'ordine di esplorazione dello spazio della password e selezionare le password in base a questa conoscenza, in modo che gli aggressori razionali reagiscano applicando un ordine casuale.
Tutto quanto sopra, tuttavia, è per uno spazio noto e limitato di possibili password. Questo è ciò che si applicherebbe, ad esempio, alle vecchie password Unix con la funzione "crypt" basata su DES : lo spazio è l'insieme di tutte le sequenze di 8 caratteri ASCII.
In molti casi pratici, lo spazio delle password è più aperto e l'attaccante avrà una percentuale di successo piuttosto bassa: creerà le alcune password, ma non tutte. In tal caso, l'ordine di esplorazione della password non ha molta importanza: per ogni password, l'utente malintenzionato cerca uno spazio completo di password N , che funziona (lo spazio contiene le password dell'utente) o, più spesso , non. Per tutti i casi in cui l'attacco non funziona, il costo dell'attaccante sarà quello di N , né più né meno, e questo non dipende dall'ordine in cui l'utente malintenzionato tenta.
Quindi la risposta pratica è: non ha importanza .
Dovrebbe fare poca differenza statisticamente, è il calcolo dell'hash che prende la potenza di calcolo e non la scelta del testo normale. Suppongo che se dovessi fare la scelta per cui andrei in ordine semplicemente perché potrebbe essere un calcolo leggermente meno intenso, che col tempo potrebbe fare un po 'di differenza in quanto potrebbe consentire al sistema di mettere solo un po' più di memoria e CPU nella generazione di hash.
Tutto si riduce a come lo sviluppatore ha codificato il meccanismo per scegliere il testo semplice in modo sequenziale, e in modo casuale. Vorrei semplicemente provare entrambi in condizioni controllate e vedere se c'è una differenza significativa in fessure al secondo.
Perchè esiste un motivo statistico per scegliere l'uno o l'altro, quindi no.
In pratica, il più veloce sarà quello di andare in ordine con input classificati dal più o meno comuni per le password comuni prima di passare a cose meno comuni. Se è veramente casuale, andare in ordine vs random non fa alcuna differenza statistica dato che le tue probabilità su ogni ipotesi sono esattamente le stesse, ma in pratica le persone non sono brave a essere casuali, quindi meglio puoi ridurre la casualità nelle tue ipotesi , più velocemente otterrai un successo.
Ancora non vedrai una differenza statistica scegliendo la forza bruta semplice (a, b, c, ... aa, ab, ... ecc.) scegliendo casualmente. Devi mettere un po 'di intelligenza nelle ipotesi per fare meglio delle ipotesi casuali.
Leggi altre domande sui tag brute-force hash