Sicurezza dell'hash delle password utilizzando bcrypt Done sul lato client

7

Attualmente sto usando una tecnica in cui mando il nome utente / password in chiaro (usando https) al server, che poi esegue il bcrypt e lo confronta con il db. Pratica standard.

È considerato sicuro.

L'invio di hash bcrypt al server per il controllo sarebbe ugualmente sicuro?

Il punto di bcrypt è che è computazionalmente costoso, quindi gli hash rubati non possono essere forzati brute (o richiederebbero molto tempo). Con il client che invia l'hash, penso che questo sia ancora valido.

Quindi, la domanda è: questa tecnica potrebbe compromettere in qualche modo la sicurezza della mia rete?

- Modifica

Vorrei farlo perché riduce la potenza di calcolo di cui il server ha bisogno. Fare cose moderatamente costose sul client non è mai una cattiva idea.

    
posta code ninja 07.08.2014 - 14:25
fonte

3 risposte

17

Il problema è che il tuo hash ora diventa essenzialmente la tua password. Se il tuo database di hash viene rubato, non è necessario preoccuparsi della forzatura bruta di nessuno degli hash, perché è tutto ciò che devi inviare ora per autenticarti.

    
risposta data 07.08.2014 - 14:49
fonte
7

Questo post dovrebbe rispondere alla tua domanda: link

In sostanza, se si esegue l'hash sul lato client, la password hash diventa il token di autenticazione e significa che si sta essenzialmente memorizzando la password in testo normale nel database.

Quindi, per rispondere alla tua domanda: non comprometterebbe la sicurezza della tua rete, ma significherebbe che se il tuo database viene violato hai perso tutti i vantaggi di archiviare la password in un formato hash in primo luogo poiché gli hash sono ora il le password.

    
risposta data 07.08.2014 - 14:53
fonte
5

Penso che ora tu sappia già dalle risposte, perché può essere un problema inviare l'hash della password al server. Vorrei solo commentare questo particolare punto:

I would like to do this because it reduces the computational power the server needs. Doing moderately expensive things on the client is never a bad idea.

Il fatto che bcrypt (una funzione di hash adattativa) sia lento e consuma più potenza di calcolo del server può rendere il server vulnerabile a un semplice attacco DoS. Poiché ciò rende la verifica della password un'attività più intensa di calcolo, un utente malintenzionato può inviare molte richieste di accesso al server e indurre il server a fare più lavoro del previsto. Puoi trovare maggiori dettagli sul problema nei seguenti thread:

Can l'hashing lato client riduce il rischio di negazione del servizio con hash lenti?

Se ti interessa sugli attacchi DoS se il tuo server utilizza bcrypt?

Quindi, invece delle password di hashing sul lato client, puoi fare uso di un proof-of-work schema in cui il browser esegue una serie di calcoli e fornisce una prova al server che il server può verificare molto rapidamente nella stessa richiesta in cui viene inviata la password. In questo modo, il server calcolerà solo il bcrypt se il PoW è verificato. Questo può impedire al server di eseguire il DoS in quanto il client dovrà fare anche un po 'di lavoro. Per i dispositivi con minore potenza di calcolo (che potrebbe non essere adatto per calcolare la prova di lavoro), è possibile utilizzare schemi come CAPTCHA.

    
risposta data 07.08.2014 - 16:07
fonte

Leggi altre domande sui tag