Cos'è più sicuro: singolo hash lungo o combinazione di due più brevi?

1

Scenario fittizio:

L'utente accede a dati riservati (disponibili online) identificati da una stringa casuale (supportata da captcha per rendere più difficile la forzatura bruta).

Quindi i dati non sono protetti da un account utente / password, ma ogni informazione del caso è identificabile e accessibile a tutti coloro che conoscono una tale stringa univoca e casuale.

Che cos'è più sicuro:

  1. singola stringa casuale di 10 caratteri (la lunghezza è solo a scopo di esempio - potrebbe essere più lunga)

    sample:

    YuE9sfQGf6

  2. 2 x 5 caratteri a caso stringhe

    sample:

    1. YuE9s
    2. fQGf6

Diciamo che i caratteri consentiti (in una stringa casuale) sono: a-z , A-Z e 0-9 .

    
posta Jeffz 24.07.2013 - 18:50
fonte

2 risposte

2

Le tue "stringhe casuali" sono quelle che i crittografi chiamerebbero keys : una chiave è un valore segreto senza una struttura interna implicita (al contrario di una password che è "una chiave che si adatta a un cervello umano ").

Nel primo caso, agli utenti verrà concesso l'accesso in base alla loro capacità di presentare una sequenza specifica di 10 caratteri nell'alfabeto a-zA-Z0-9. Questi sono 62 segni possibili, quindi ci sono 62 10 = 839299365868340224 chiavi possibili. Un attaccante che cerca di forzare il suo ingresso dovrà "indovinare" la sequenza, che non può fare se non provando possibili chiavi in qualsiasi ordine (abbiamo assunto "nessuna struttura interna implicita", che significa "probabilità uniforme"). In media, l'attaccante dovrà provare metà delle possibili chiavi prima di riuscire, e questo è 419649682934170112.

Supponiamo ora di essere nel secondo caso: l'utente verrà accettato solo se inserisce due stringhe di 5 caratteri in due campi di testo. Entrambi i valori devono avere ragione se l'accesso deve essere concesso. In questa situazione, ci sono 62 combinazioni 5 per ogni stringa, per un totale complessivo di 62 5 * 62 5 = 839299365868340224 possibilità, che è esattamente lo stesso conteggio di prima, quindi non ha importanza .

Cioè a meno che tu non lo batti . "Botching it" significherebbe, qui, dire all'utente se ha corretto una delle due stringhe di 5 caratteri, anche se l'altra non lo è. Ad esempio, i due campi di immissione sono in pagine successive e il server mostrerà la seconda pagina solo se la prima stringa era corretta. In tal caso, l'attaccante può crackare entrambe le stringhe di 5 caratteri una dopo l'altra: quello è 62 5 / 2 = 458066416 prova in media per la prima stringa, quindi 458066416 di nuovo per la seconda stringa. L'utente malintenzionato riesce quindi a eseguire (in media) 916132832 tentativi, ovvero 458066416 più veloci rispetto all'implementazione non compromessa. Questo è ciò che definisco un fallimento epico. (Tale errore è già successo , dalla stessa Microsoft.)

È più semplice, e più sicuro, richiedere l'immissione di tutti e 10 i caratteri in una volta sola. Il modo in cui li visualizzi, come un campo di testo, due campi di testo o un mazzo di palloncini a forma di cuore che galleggia sullo schermo, non ha importanza, a condizione che non vengano rilevate informazioni su quali sono corrette. Le solo informazioni che il sistema di verifica dovrebbe fornire è se i caratteri tutti fossero corretti, o almeno uno non lo fosse.

    
risposta data 24.07.2013 - 19:42
fonte
0

Prima assicuriamoci di capire il tuo scenario. Quello che stai dicendo è essenzialmente che alcuni dati sono limitati essenzialmente da una password condivisa da tutti. Quindi, non è una combinazione utente / password, ma è una password universale vero?

Se questo è il caso, avere una "password" di lunghezza 10 è più sicura, ASSUMENDO che le due password siano indovinate una dopo l'altra. Specificamente, se l'autore dell'attentatore fosse informato su quale delle password fosse sbagliata, sarebbe più semplice perché invece di essere n ^ 5 * n ^ 5 sarebbe n ^ 5 + n ^ 5 = 2n ^ 5.

Tuttavia, se comunichi all'utente solo se entrambe le password sono corrette o meno, allora sarebbero ugualmente sicure, almeno dal punto di vista matematico. Se li mettete anche su pagine separate con captcha separati e comunicate all'utente solo se entrambi fossero corretti o meno, questo sarebbe ancora più sicuro perché l'utente malintenzionato dovrebbe caricare due pagine Web, richiedendo così più tempo e anche il dover fare un altro captcha che richiede anche più tempo. Questo sembra piuttosto poco pratico, anche se considerato quanto incredibilmente fastidioso sarebbe per i tuoi utenti. Mi dispiacerebbe farlo da solo.

In effetti, potresti anche avere una password di lunghezza 10, ma se per qualche motivo avessi delle restrizioni sulla lunghezza delle password al massimo 5, purché non possano dire che una singola password è giusta o sbagliata, loro sono la stessa cosa.

    
risposta data 24.07.2013 - 19:43
fonte

Leggi altre domande sui tag