Sto tentando di utilizzare SRP per verificare i client quando eseguono l'autenticazione con un server web, in modo che la password non venga mai inviata sul filo.
Osservando la procedura SRP , quando un client si registra con il server invia v
( verificatore), s
(sale) e I
(nome utente o identificatore) al server che memorizza questi valori. Tuttavia, si afferma che:
[The salt] could be chosen by either side but is done by [the client] so
that [it] can register I, s and v in a single registration request.
Se il sale può essere scelto dal server o dal client, allora possiamo semplicemente supporre che il server lo generi.
Quando il client tenta in seguito di autenticarsi con il server, il client invia I
e il server risponde con s
. Quindi il client utilizza s
e altri dati per preformare la prova della password.
La mia domanda è: perché s
statico? Perché deve essere conservato affatto?
Il sale viene inviato a chiunque lo richieda e, a causa di ciò, un utente malintenzionato potrebbe tentare di creare una tabella arcobaleno mirata richiedendo il sale di un utente specifico. Questo viene visualizzato in questa domanda , al punto 2 #.
Non fornirebbe più sicurezza per il server di generare in modo casuale un sale su un ClientHello
messaggio? Su ogni richiesta separata, sarebbe inviato un sale diverso , evitando che l'attaccante possa compilare una tabella arcobaleno mirata. Inoltre, il sale non verrebbe memorizzato sul server, il che renderebbe l'informazione ancora meno utile in caso di violazione dei dati.
In particolare, questo metodo potrebbe aprire un vettore di attacco in cui l'attaccante avvia continuamente la procedura di autenticazione fino a quando il server non risponde con un sale favorevole. Tuttavia, se l'entropia del sale s
è sufficientemente grande, ciò non sarebbe fattibile. Inoltre, il server potrebbe limitare il numero di tentativi di autenticazione per username I
, in modo che un utente malintenzionato non possa eseguire questo attacco in parallelo con una botnet
- Ad esempio: dopo aver avviato un tentativo di autenticazione per
I
, il server non ha risposto ai successivi tentativi di autenticazione comeI
entro un intervallo di tempo di dire, mezzo secondo.