Sale "reale" e "finto"

43

Durante un periodo di Q & A in DEFCON quest'anno, un membro del pubblico ha affermato che stiamo usando "false sale" quando concateniamo un valore casuale e una password prima dell'hash. Ha definito "reale salt" come qualcosa visto nell'implementazione originale della crypt Unix che ha cambiato il modo in cui l'algoritmo è stato eseguito, richiedendo quindi un codice diverso da utilizzare per decifrare ogni password e causare attacchi di GPU di grande entità.

C'è qualche merito alla discussione sul sale "vero" e "falso"?

    
posta Jeff Ferland 09.08.2011 - 15:32
fonte

6 risposte

45

La distinzione è arbitraria. Un algoritmo basato sul sale funziona prendendo i dati di input e rimescolandoli in vari modi, e non c'è alcun metodo per inserire il sale che è più o meno "falso" di qualsiasi altro.

Cercando di escogitare un algoritmo di elaborazione della password che sia efficiente su una CPU generica ma che non si adatta bene a una GPU (o a un FPGA o ASIC personalizzato) è un vero argomento di ricerca. Questo è ciò che scrypt riguarda, e probabilmente bcrypt fa già un buon lavoro. L'idea qui è di usare gli accessi in tabelle che sono costantemente modificate; l'accesso alla tabella nella RAM è qualcosa a cui le CPU generiche sono buone, ma che rende le cose difficili per GPU (possono farlo, ma non con un parallelismo completo come quello che si ottiene di solito con una GPU).

    
risposta data 09.08.2011 - 16:27
fonte
21

Sì, c'è una distinzione valida da tracciare; avresti bisogno di un crittologo per dirti quanto sia significativa la differenza.

Un "vero sale" come hai descritto è usato per "perturbare l'algoritmo di crittografia". Lo capisco vagamente, ma non abbastanza per descriverlo correttamente. Basti dire che con un vero salt, il testo della password originale è codificato ma con output diversi a seconda di come l'algoritmo incorpora l'input salt (l'algoritmo ha (almeno due) input, il sale e (separatamente) il testo della password originale).

Un "finto sale" comporta la modifica del testo della password originale con il sale prima di cifrarlo con l'algoritmo di crittografia. Ad esempio, se la mia password è "nezperce" e il mio sale è "qp", l'algoritmo verrà consegnato al testo della password modificato "qpnezperce" per la codifica. Se Alice cerca anche di usare la password "nezperce", ma ha salt "w4", allora l'algoritmo codificherà il testo della password modificato "w4nezperce" per lei. Di conseguenza, il suo hash crittografato sarà diverso dal mio, anche se utilizzeremo entrambi la stessa password.

Entrambi i metodi forniscono il vantaggio principale del sale; per garantire che la stessa password non sia sempre codificata allo stesso modo. L'uso dei sali aumenta la difficoltà di montare un attacco di hash precalcolato (in precedenza ho detto dizionario o attacco a forza bruta, vedere i commenti).

Credo che ci siano altri vantaggi nell'usare un "sale reale", come un maggiore overhead computazionale (che rallenta gli attacchi). Ma, di nuovo, avresti bisogno di qualcuno con più abilità cripto di me per sapere se è vero o no.

Penso che il vantaggio di un "finto sale" sia che è più facile da implementare e richiede meno criptazione. So che il posto in cui ho più comunemente visto i sali falsi sono le applicazioni web che gestiscono il proprio database di autenticazione.

    
risposta data 09.08.2011 - 16:08
fonte
7

Come Thomas ha sottolineato, la nozione generale di applicare semplicemente il sale come una modifica all'algoritmo di hashing non ti offre fondamentalmente alcuna protezione aggiuntiva. Può richiedere che l'attaccante adotti gli attacchi software e hardware esistenti, ma può anche metterti nei guai se non sai davvero cosa stai facendo.

Ma hanno perso l'altra vecchia innovazione nella carta originale sulla salatura - ciò che viene normalmente chiamato "pepe": una chiave personalizzata che fa parte dell'implementazione e non è archiviata insieme alle password. Mi riferisco al modo in cui Morris e Thompson hanno introdotto questo concetto anche nel loro seminario di Unix nella discussione su Password Hashing aggiungi sale + pepe o sale abbastanza?

Un peperone ha il vantaggio di poterlo usare in combinazione con un sale, in modo tale che anche se qualcuno ruba il database delle password (che ha i sali), avrebbe anche bisogno di rubare il pepe (magari incorporato nell'applicazione o il codice della libreria hashing o memorizzato su un sistema completamente separato) per decifrare le password. In molti casi ciò non sarà molto più difficile, ma in alcuni casi potrebbe essere molto più difficile.

    
risposta data 15.08.2011 - 19:06
fonte
5

Non ho familiarità con i dettagli dell'implementazione della crittata Unix originale. Ma non sembra che abbia davvero senso per me. Soprattutto considerando quale sia lo scopo della salatura delle password in primo luogo. Penso che se si utilizza un salt cambia il tuo algoritmo per renderlo 'più strong', quindi stai usando l'algoritmo sbagliato in primo luogo.

    
risposta data 09.08.2011 - 16:04
fonte
3

Ero anche al discorso e fui quello che si sedette con entrambi i crittografi durante il discorso. Il vero sale rispetto a un finto sale mi ha davvero incuriosito. Ora perdonami perché non ho i miei appunti di fronte a me, ma c'è una grande differenza nella sicurezza del vero sale rispetto a un sale finto. Un vero sale altera la chiave mentre entra nel codice a blocchi, quindi non solo la chiave in chiaro (password) è la chiave per determinare in che modo le iterazioni avranno luogo. Ora un sale falso altera semplicemente il testo in chiaro (password) e la chiave rimane la stessa. Regolando l'algoritmo il vero sale diventa esponenzialmente più difficile da rompere di un sale finto.

Quindi usiamo un esempio per descriverlo. In questo esempio userò un hash MD5 (non ricordo se è possibile utilizzare un vero sale su MD5, anche se così non mi fiamma per questo) con un vero sale e un sale falso. Ora diciamo che sto usando CUDA-Multiforcer come mio cracker per password GPU. Avrei impostato di correre contro lo standard MD5 per provare a decifrare la password ma da quando ho salato la password poteva girare per sempre in base al sale (vero o falso). Ora parte della descrizione che mi è stata data è stata la capacità di rompere il sale finto e di come ci sia voluto un po 'più a lungo per calcolare / spezzare spezzando l'hashish. Non ho seguito quello che stavano dicendo in modo che potessi essere lontano da quello. Ora assumiamo che siamo stati in grado di acquisire la password salt (true of fake). Usando un sale finto, lo inseriamo nel nostro password cracker e continuiamo a usare la forza bruta fino a quando non possiamo abbinare gli hash. Non molto difficile da eseguire e verrà eseguito abbastanza rapidamente.

Ora, se usassimo un vero sale, sarebbe esponenzialmente più difficile, e più lungo per rompere gli hash. Usando un vero sale dovrei riscrivere una parte del CUDA-Multiforcer per usare un vero sale con l'algoritmo specifico che era in uso. Ricorda che cambia la chiave nel codice, il che significa che non si tratta solo di un semplice cambio di testo, è un cambiamento dell'algoritmo, quindi ora devo modificare il codice per farlo. Ok, ora abbiamo cambiato il modo in cui viene eseguito il cracker delle password, ora ci imbattiamo in un problema di velocità. Con il cambio della chiave ora ci vuole un bel po 'di tempo per testare ogni password, dato che ora sta cambiando l'iterazione che usa per ogni password forzata bruta. Entrambi mi hanno dato alcuni esempi della differenza nella velocità, e penso che con un sale finto era circa 1 milione al secondo, e un vero sale era intorno

    
risposta data 15.08.2011 - 16:57
fonte
2

La distinzione tra sale falso e sale reale è diversa se gli algoritmi di hashing sono nascosti all'attaccante. un "sale reale" che determina una variazione dell'algo di hashing in un algo standard aperto sarebbe facilmente implementato da un attacco GPU / distribuito, poiché tutti gli input sono noti all'attaccante e quindi il sub-algo può essere facilmente determinato prima di tempo.

I primi hashing di Unix per le password (come ricordo da Bell System V7) NON fornivano l'algoritmo per l'hashing della password: era l'unica parte del sistema per cui si poteva ottenere solo il file .o, dove le università sono state in grado di ottenere il codice sorgente per tutto il resto.

    
risposta data 09.08.2011 - 19:34
fonte

Leggi altre domande sui tag