Calcolo del tempo richiesto per la forza bruta di un codice casuale

3

Supponiamo di avere amount codici di inserimento casuale di length caratteri da un alfabeto di dimensione alphabet . Il numero di possibili codici è quindi facilmente calcolato come keyspace = alphabet ^ length .

Ora prendi un aggressore che sta tentando di ottenere l'ingresso usando la supposizione casuale dei codici con la forza bruta. A percentuale presunta rate , il tempo in cui possono essere tutti controllati (e quindi l'ingresso è garantito) è facilmente calcolato come keyspace / rate .

Tuttavia, quello che mi piacerebbe davvero sapere è come calcolare il tempo necessario perché l'aggressore abbia una data possibilità di trovare un codice di ingresso valido. Questo è un sistema in cui un codice valido è tutto ciò di cui hai bisogno, non esiste un requisito secondario come un nome utente (pensa i coupon). Ancora una volta, ci sono amount in keyspace .

Ad es., quanto tempo ci vuole che l'attaccante abbia una probabilità dell'1% di trovare un codice valido? E il 10%? E il 25%? Ecc. Oppure l'inverso, data una quantità specifica di tempo, quali sono le possibilità?

    
posta Bart van Heukelom 13.07.2015 - 14:18
fonte

2 risposte

2

Per il caso atteso (media) il numero di tentativi ha una relazione lineare con la probabilità di successo presa in considerazione.

expected_time = probability * keyspace / ( rate * 2)

Quindi se lo spazio delle chiavi consisteva di 1 miliardo di codici e l'attaccante poteva eseguire la forza brutale di 1 milione di codici al secondo per avere una probabilità del 10% di successo, l'attaccante avrebbe bisogno di 50 secondi.

expected_time = 10% * 1000000000/(1000000 * 2)

Ora nel tuo caso dichiari che ci sono più codici validi ( amount ). Questi codici possono essere attaccati in parallelo? Generalmente cerchiamo di evitare scenari in cui ciò è possibile. Questo è uno dei motivi per cui aggiungiamo il sale alle password. Impedisce a un utente malintenzionato di attaccare tutte le possibili password con hash in parallelo. Un altro esempio sarebbe legare un codice ad un dato utente. Anche se l'userid è noto, ciò limita l'attaccante alla ricerca di un codice specifico non di un codice valido. Se non sono possibili attacchi paralleli, la formula precedente è vera, ma se l'attaccante può eseguire un attacco contro tutti i possibili codici validi con un singolo tentativo, il tempo previsto viene ridotto dal numero di codici validi ( amount ).

expected_time = probability * keyspace / (rate * amount * 2)

Un altro modo di esaminarlo è la quantità di codici validi che riduce la dimensione dello spazio delle chiavi (supponendo che gli attacchi possano essere eseguiti in parallelo e qualsiasi codice valido sia accettabile). Nota in nessuno dei due casi si applica il problema del compleanno, quindi c'è solo una riduzione lineare del tempo previsto quando l'attaccante può eseguire un attacco parallelo. In termini di hashing questo sarebbe un attacco preimage non un attacco di collisione. Tuttavia, in genere cerchiamo scenari in cui sono possibili attacchi paralleli perché non vogliamo aumentare l'efficienza dell'attacco (anche in modo lineare).

    
risposta data 13.07.2015 - 14:26
fonte
0

Tornando alla matematica delle probabilità nelle scuole superiori, il seguente dovrebbe essere vicino.

Dato amount chiavi valide in uno spazio di dimensione space , la possibilità che qualsiasi ipotesi casuale sia corretta è winChance = amount / space .

Dato un numero di tentativi (che è facilmente calcolato da rate e time ), la possibilità di trovare 0 chiavi valide è (1-winChance) ^ guesses . Ciò rende la possibilità di trovare almeno 1 chiave valida:

1 - ((1-winChance) ^ guesses)

Quello che non ho preso in considerazione è che dopo ogni ipotesi fallita, la probabilità che la prossima ipotesi sia corretta aumenta leggermente. Suppongo che con uno spazio abbastanza grande / una quantità piccola sufficiente, questo aumento sia trascurabile.

    
risposta data 13.07.2015 - 16:27
fonte

Leggi altre domande sui tag