Dove si applica la password di hashing / sale?

1

Ho seguito un tutorial PHP / JS sulla registrazione degli utenti con hashing sicuro (senza sale però) usando sha. Quello che non ho capito è perché l'hash è stato generato sul client. Inoltre, non capisco l'hashing in generale.

Ecco come I pensa che funzioni:

  1. L'utente crea un account e una password e invia un testo semplice al server
  2. Il server riceve questo comando "register" con username e password
  3. Il server fa qualcosa di magico con la password

Quindi, qual è la "magia"? Se la magia trasforma "myPass" in "abcd12345", come fa l'utente di nuovo l'accesso con "myPass"?

Il server esegue esattamente la stessa procedura che ha inizialmente convertito la password, per verificare se la password di accesso è valida?

    
posta user2410532 27.03.2016 - 22:24
fonte

2 risposte

4

di hashing

Una funzione di hashing utilizza un algoritmo creato pensando a diverse cose:

  • Qualsiasi hash generato avrà la stessa lunghezza (cioè un hash SHA256 lo farà sempre 256 bit)
  • Usare sempre lo stesso algoritmo di hashing con lo stesso input lo stesso output
  • Un piccolo cambiamento nel valore originale da hash avrà un enorme impatto sul valore dell'hash
  • Non è possibile direttamente invertire un hash

Memorizzando solo la versione hash di una password, non è possibile direttamente trovare la password che lo accompagna. In questo modo, quando il database con i dati dell'utente viene rubato, i criminali avranno solo hash, ma non le password effettive.

Quando una password viene immessa sul client, viene inviata tramite una connessione sicura (ad esempio HTTPS). Il server esegue quindi la funzione di hash e la confronta con l'hash della password memorizzata. (Se l'hash viene eseguito sul client è facile rinviare l'hash.) Se corrispondono, si presume che sia stata inserita la password corretta (in teoria una password diversa potrebbe avere lo stesso hash, ma è improbabile che ciò accada).

Quale funzione di hashing usare è un compromesso tra sicurezza e usabilità.

La quantità di tempo necessaria per calcolare un hash è importante: vuoi una funzione di hashing che non può essere risolta rapidamente, perché allora un attacco di forza bruta diventa fattibile, d'altra parte non vuoi che i tuoi utenti dover aspettare un minuto mentre il server sta controllando la propria password.

Tabelle arcobaleno

Perché dico che non possono essere direttamente invertiti perché è possibile creare un dizionario che ha tutte le password possibili e i valori hash che appartengono a quelle password ("numerari di curve "). Una tabella arcobaleno è specifica per un particolare algoritmo di hashing (MD5, SHA-1, SHA-2, ecc.)

Esistono vari siti online con tabelle arcobaleno, ad esempio MD5cracker.org per hash MD5 o crackstation.net per varie funzioni di hash.

Salt

Una possibile protezione contro le tabelle arcobaleno è l'uso di sali . L'idea è di aggiungere un numero di byte aggiuntivi alla password per renderla più lunga (questo non influenza però la lunghezza dell'hash, poiché rimane della stessa lunghezza, indipendentemente da ciò che viene sottoposto a hash).

Un sale viene generalmente aggiunto come segue ( + è concatinazione):
saltedhash(password) = hash(password + salt)
o
saltedhash(password) = hash(hash(password) + salt)

I sali non devono essere tenuti segreti, quindi possono essere memorizzati nel database con la password. Per impedire che le stesse password appaiano come lo stesso hash nel database, usa un sale separato, casuale per ogni password.

    
risposta data 28.03.2016 - 02:36
fonte
1

Sì, il server essenzialmente "esegue esattamente la stessa procedura che ha convertito la password inizialmente, per verificare se la password di accesso è valida", anche se inizialmente dovrebbe essere usato un salt casuale e all'accesso il sale viene recuperato dallo store e usato per cancellare la password inviata.

La domanda Come fare in modo sicuro le password di hash ha una buona risposta in materia di sicurezza .stackexchange.com. La versione breve della risposta è utilizzare bcrypt, PBKDF2 o scrypt. La versione più breve è utilizzare bcrypt, o in php 5.5 o versioni successive usare password_hash ()

    
risposta data 28.03.2016 - 17:16
fonte

Leggi altre domande sui tag