it-swarm.dev

C'è qualche vantaggio nel dividere una password?

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

L'hash LM viene calcolato come segue:

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

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

45
Bill the Lizard

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

Il motivo per cui l'hash LanMan funziona in questo modo è perché l'hash LanMan è basato su DES. DES accetta una chiave a 56 bit. Pertanto, è naturale trattare un blocco di 7 byte come una chiave DES. Non esiste un buon modo di usare DES per eseguire l'hashing di più di 7 byte alla volta, e abbiamo bisogno di un modo per creare un hash per password più lunghe da DES, quindi i progettisti dell'hash LanMan hanno deciso di dividere la password in due metà.

Oggi non costruiremmo mai un hash password in questo modo. Useremmo semplicemente Bcrypt, Scrypt, PBKDF2 o qualche equivalente - o costruiremmo qualcosa di simile basato su primitivi esistenti, come SHA256. Ma a quel tempo, Bcrypt, Scrypt, SHA256, ecc., Non esistevano, aprendo l'opportunità ai progettisti di LanMan di fare questo tipo di errore devastante.

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

38
D.W.

La divisione della password è un debolezza, non un vantaggio. Consente di infrangere ciascuna password in modo indipendente. A partire da ASCII (codici da 32 a 126, inclusi), quindi rimuovendo le lettere minuscole, si arriva a 127-32-26 = 69 possibili caratteri nell'alfabeto della password. Questo porta a 697 possibili metà, leggermente al di sotto 243. 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. Nota che LanMan non è salato, quindi le tabelle pre-calcolate possono essere efficienti (paghi il costo della costruzione della tabella una volta, quindi attacchi parecchi mezze password - in realtà ne vale la pena anche per una singola password, poiché uno la password è due mezze password). Nel 2003, Philippe Oechslin ha pubblicato un migliorato compromesso della memoria temporale (è l'articolo in cui ha coniato il termine "tavolo Rainbow") e ha calcolato le tabelle per decifrare le password LanMan. Si è limitato alle password alfanumeriche (lettere e cifre, ma senza segni speciali), quindi uno spazio di 237. Le dimensioni cumulative delle tabelle sarebbero quindi 1,4 GB, con un'efficienza di cracking del 99,9% e un tempo di attacco inferiore a un minuto.

Con un 243 spazio, ovvero 64 volte più grande, la dimensione della tabella e il tempo di attacco aumentano entrambi di un fattore 16 (ovvero 642/3), quindi stiamo parlando di circa 23 GB (non è molto per i dischi di oggi) e 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ò effettuare ricerche 50 volte più veloce di un disco rigido meccanico (un SSD da 32 GB costa meno di 70 $ ...). Lo sforzo di costruzione di tabelle (una spesa una tantum) potrebbe richiedere alcune settimane su un singolo PC o qualche giorno su qualsiasi cloud decente, quindi è piuttosto economico.

Apparentemente , tali tabelle esistono già ...

54
Thomas Pornin

Solo perché qualcosa di più complesso non lo rende necessariamente più sicuro. Ho eseguito un cracker di password sulla mia finestra di Windows e sembrava spezzare le password in 8 stringhe di caratteri, e ha spezzato ciascuna stringa in modo indipendente dall'altra stringa, rendendo il processo estremamente rapido.

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

3
MasterZ