C'è qualche vantaggio nel dividere una password?

41

Ho letto dell'hash LANMAN (LM) e sono curioso di conoscere una parte particolare del algoritmo.

L'hash LM è calcolato come segue:

  1. La password ASCII dell'utente viene convertita in maiuscolo.
  2. Questa password è completata da null a 14 byte.
  3. La password di 14 byte è divisa in due metà a 7 byte.
  4. Questi valori vengono utilizzati per creare due chiavi DES, una per ogni metà di 7 byte.
  5. Ciascuna delle due chiavi viene utilizzata per crittografare DES la stringa ASCII costante "KGS! @ # $%", risultante in due valori di testo cifrato a 8 byte.
  6. Questi due valori di testo cifrato sono concatenati per formare un valore di 16 byte, che è l'hash LM.

Ci sono molte debolezze di sicurezza delineate nell'articolo di Wikipedia collegato e abbiamo parlato altrove, ma sono particolarmente interessato ai passaggi da 3 a 6. Sono curioso di sapere cosa ha portato a questo progetto. C'è un reale vantaggio in termini di sicurezza nel dividere una password, crittografando le due metà separatamente, quindi combinando le due metà per formare di nuovo un hash? O è solo un esempio di "sicurezza attraverso l'oscurità"?

    
posta Bill the Lizard 04.04.2011 - 20:06
fonte

3 risposte

35

Dividere la password in hash è un vantaggio non . È stato fatto per motivi oscuri che non sono più rilevanti oggi.

La ragione per cui l'hash di LanMan funziona in questo modo è perché l'hash di LanMan è costruito su DES. DES accetta una chiave a 56 bit. Pertanto, è naturale trattare un blocco di 7 byte come forma di un tasto DES. Non c'è un buon modo di usare DES all'hash più di 7 byte alla volta, e abbiamo bisogno di un modo per costruire un hash per password più lunghe di DES, quindi i progettisti dell'hash di LanMan hanno deciso di dividere la password in due metà. / p>

Oggi non creeremo mai un hash di password in questo modo. Dovremmo semplicemente usare Bcrypt, Scrypt, PBKDF2, o qualche equivalente - o costruiremo qualcosa di simile sulla base di primitive esistenti, come SHA256. Ma al momento, Bcrypt, Scrypt, SHA256, ecc. Non esistevano, aprendo l'opportunità ai progettisti LanMan di fare questo tipo di errore devastante.

Per gli standard moderni, l'hash LanMan è un design scadente. Ci sono molti molti attacchi su di esso. È molto debole Nessuno dovrebbe usare l'hash LanMan oggi se può evitarlo. (Come altri hanno sottolineato, la sua sicurezza è scadente anche per gli standard del tempo. Un punto giusto.)

    
risposta data 05.04.2011 - 07:37
fonte
48

La divisione della password è una debolezza , non un vantaggio . Permette di rompere ciascuna password in modo indipendente. Iniziando con caratteri ASCII (codici da 32 a 126, inclusi), quindi rimuovendo le lettere minuscole, si finisce con 127-32-26 = 69 possibili caratteri nell'alfabeto della password. Questo porta a 69 7 possibili metà, che è un po 'al di sotto di 2 43 . In altre parole, questo è altamente trattabile attraverso la forza bruta. Non hai nemmeno bisogno di un dizionario.

Questa non è sicurezza attraverso l'oscurità. Questa è insicurezza per incompetenza.

Modifica: "altamente trattabile con forza bruta" apre anche la strada a varie ottimizzazioni. Notare che LanMan non è salato, quindi le tabelle precalcolate possono essere efficienti (si paga il costo della compilazione di una tabella una volta , quindi si attaccano diverse mezze password - in realtà vale la pena anche per una singola password, dato che una password è due mezze password). Nel 2003, Philippe Oechslin ha pubblicato un miglioramento del rapporto tempo-memoria (è l'articolo in cui ha coniato il termine "tavolo arcobaleno") e tabelle calcolate per incrinare le password LanMan. Si è limitato alle password alfanumeriche (lettere e cifre, ma senza segni speciali), quindi uno spazio di 2 37 . La dimensione cumulativa delle tabelle sarebbe quindi di 1,4 GB, con efficienza di cracking del 99,9% e tempo di attacco inferiore a un minuto.

Con uno spazio 2 43 , cioè 64 volte più grande, la dimensione della tabella e il tempo di attacco aumentano entrambi di un fattore 16 (cioè 64 2 / 3 ), quindi stiamo parlando di circa 23 GB (non è tanto per i dischi di oggi) e di un attacco di 15 minuti. In realtà, l'attacco sarebbe più veloce di così, perché il collo di bottiglia è la ricerca sul disco rigido, e l'attaccante intelligente utilizzerà un SSD che può fare ricerche 50 volte più velocemente di un hard-disk meccanico (un SSD da 32 GB costa meno di 70 $ ...). Lo sforzo di creazione della tabella (una spesa una tantum) potrebbe richiedere alcune settimane su un singolo PC o pochi giorni su qualsiasi cloud decente, quindi è piuttosto economico.

Apparentemente , tali tabelle esistono già ...

    
risposta data 04.04.2011 - 21:04
fonte
3

Solo perché qualcosa è più complesso non rende necessariamente più sicuro. Ho lanciato un password cracker sulla mia finestra di Windows e sembrava rompere le password in 8 stringhe di caratteri, e ha rotto ogni stringa indipendentemente dall'altra stringa, rendendo il processo molto rapido.

Quindi, dal punto di vista pratico, la suddivisione di una password non è vantaggiosa, e @Thomas ha già spiegato perché non è utile matematicamente.

    
risposta data 05.04.2011 - 01:22
fonte

Leggi altre domande sui tag