Password di accesso al sistema operativo: come funziona?

2

Sto facendo un'applicazione per creare una password per un utente. Sono un po 'sconcertato su come tutto funzioni però. Vale a dire, voglio essere sicuro che la mia applicazione memorizzerà l'hash corretto in modo che l'utente possa effettivamente accedere!

Ho trovato questo codice:

pwhash=$(echo $password | mkpasswd -s -m sha-512)

Ora se eseguo la stessa password ottengo due hash totalmente diversi:

$ echo 'test' | mkpasswd -s -m sha-512
$6$QRsW.mu9wC$CSvMrGkfU6.lu14.sNRrZ8Kiyi0zUdlcAH1VBBd.LoTZDmehuoGnsaywm/WD.9GARwINQnp3jJzxQHWlCk3RI0
$ echo 'test' | mkpasswd -s -m sha-512
$6$rN7ishjxd89AjMS$HpN53OoL3m81rPyrKFgpm2Nm2YWJ96nP4gNLu4GO0Jjy9K6lVhB6v7c0L7/998h74oTMGFzLK6w4zku7U3soW0

Quindi questo per me dimostra quanto poco so. Se la stessa password genera due diversi hash, come può sapere il sistema operativo che ho inserito la password corretta nella schermata di accesso? Che cosa confronterà l'hash della password inserita con?

Anche un po 'di sale ... il sale dovrebbe essere sempre diverso, quindi come può il sistema operativo sapere quale sale usare per la password ad ogni tentativo di accesso?

    
posta Johan Hanssen Seferidis 28.08.2015 - 12:32
fonte

1 risposta

1

Ottieni valori diversi perché vengono utilizzati diversi sali. Il sale è il secondo campo nella password con hash.

Esistono grandi tabelle rainbow che rendono molto economica la ricerca di hash di password comuni. Il punto di sale è aumentare drasticamente il costo degli hash di precalcolo per tutte le password comunemente usate. Quindi, Salt rende fondamentalmente una password non comune. Cioè, rende una password così lunga e casuale che non è possibile precalcolare l'hash per tutte le password comuni per tutti i possibili sali .

Dato che l'obiettivo del sale è prevenire attacchi di precalcolazione di successo, non è necessario che sia un segreto, ma deve essere lungo e casuale. Ciò consente di memorizzare il sale in testo in chiaro insieme a ciascuna password con hash. È una fortuna visto che il sale è necessario per convalidare la password quando l'utente si autentica.

Un esempio di cattiva implementazione di sale sarebbe l'uso di un singolo byte. In tale scenario, un utente malintenzionato può precalcolare tutti gli hash per le password comuni per i 256 possibili sali. È costoso ma non abbastanza costoso. Quel sale non è abbastanza grande.

Un altro esempio di mis-salting è di usare lo stesso sale su ogni password. Ciò consente a un utente malintenzionato di precalcolare una singola tabella che contiene gli hash di tutte le password comuni per quell'unica soluzione. Questo sarebbe costoso ma molto più economico di dover creare una tabella per ogni password. Ecco perché ogni hash della password ha il suo sale.

Modifica: Salting non riduce il costo della forzatura bruta di una singola password. Salatura ti costringe semplicemente a usare password brute-force invece di precalorizzare i loro hash. Proteggi contro la forzatura bruta usando una lenta funzione hash e chiamandola più volte sull'output successivo di se stessa. Ad esempio, eseguendo bcrypt (che è progettato per essere lento anche con una GPU o altro hardware specializzato) 1024 volte. Mentre PHP memorizza il numero di iterazioni nel campo password , su Linux il numero di iterazioni è configurato dall'opzione PAM '' . Diversi utenti qui dicono che l'impostazione predefinita per l'installazione di Debian Linux è di 1000 iterazioni per SHA-512.

Ovviamente, nessuna risposta sulle password è completa senza un riferimento a questa risposta , una spiegazione dettagliata stato dell'arte per la memorizzazione delle password.

    
risposta data 28.08.2015 - 21:58
fonte

Leggi altre domande sui tag