Creazione dell'utente e invio sicuro della password

0

Supponendo che attualmente utilizzi un metodo sicuro per Salt-Challenge-Response-Authentic-Method, le password vengono archiviate e protette.

Ora mi interrogo: in che modo gli utenti impostano la password? Significa che inseriscono la password come testo normale nella casella di testo e cosa succede dopo? il proprio client deve cancellare la password e inviarla al server per essere salata? non è incline a MITM + rainbow-table? Stavo pensando di interrogare il server per il sale, e poi il client esegue il hash e salifica la password e questo è ciò che verrà memorizzato nel DB a parte il sale.

Che ne pensi?

Inoltre, Va bene? Meglio memorizzare la prima parte dell'hash che è la combinazione del nome utente e della password con salt? il che significa che quando cambiano nome utente dovranno reimpostare anche le loro password.

Grazie!

    
posta TheUserCreator 08.12.2014 - 08:39
fonte

3 risposte

0

Dovresti MAI inviare le password in chiaro. Finché le tue comunicazioni sono crittografate (TLS), il tuo server può eseguire l'hash e salare le password quando le riceve.

    
risposta data 08.12.2014 - 09:59
fonte
0

Per App Web fai meglio a

  1. utilizzando TLS come obbligatorio. Ciò include meccanismi come HSTS, per impedire ai MITM di reindirizzare a "controparte" falsi http.
  2. invio della password in chiaro sia per l'accesso che per l'impostazione
  3. salatura e hashing delle password sul server. Fai qualcosa lungo SECUREHASH(pw, salt, it) , dove SECUREHASH è un hash sicuro, e sale è un valore casuale con circa 16 byte.

La risposta alla sfida per le app Web non è necessaria, poiché i visitatori scaricano l'app ad ogni visita (tramite le richieste GET al tuo sito per i file html e js), e quindi se il canale di comunicazione è compromesso, l'intera applicazione è pure. Un utente malintenzionato (attivo) potrebbe semplicemente prendere la password prima di ottenere l'hash del lato client , cambiando di conseguenza i js.

    
risposta data 09.12.2014 - 00:50
fonte
-1

Sembra un po 'come se stessimo cercando di reinventare la ruota :) Non stai dicendo se si tratta di un'app Web o di un'app desktop. In ogni caso ci sono modi di fatto per farlo.

Per il trasporto delle credenziali, utilizzare TLS. Come suggerisce il nome, Transport Layer Security. Usalo per trasferire le credenziali da un utente finale al server. A seconda delle tue esigenze, potresti ottenere dei certificati autofirmati, ma se sei preoccupato per MITM, procurati certs appropriati. Fai questo e non hai bisogno di implementare alcun ulteriore schema di crittografia lato client.

Per generare un hash sicuro per la password, è possibile utilizzare una funzione di allungamento della chiave come PBKDF2 per aggiungere migliaia di iterazioni e rendere l'informatica una password che richiede tempo per l'aggressore.

Nel caso in cui il tuo db sia compromesso e l'hacker scarichi tutte le password, puoi combattere le tabelle arcobaleno salendo le tue password. Il sale non deve essere segreto, ma dovrebbe essere unico per ogni account per ridurre al minimo l'efficacia delle tabelle arcobaleno.

    
risposta data 08.12.2014 - 08:57
fonte

Leggi altre domande sui tag