Autenticazione servizio Web Utilizzo di PBKDF2 e di un sistema di distribuzione pubblico: il sale deve essere modificato a ogni richiesta?

1

Ho implementato l'autenticazione PBKDF2 per alcuni servizi Web.

Al client vengono fornite le seguenti informazioni, in modo che possano duplicare la funzione PBKDF2:

  • l'algoritmo di hashing (SHA256)
  • una password segreta di 30 byte
  • il numero di iterazioni (4096)
  • la lunghezza dell'hash (32)

Si prevede che il client generi un sale casuale crittograficamente sicuro e lo utilizzi nella funzione PBKDF2. L'hash PBKDF2 risultante e una codifica base64 del salt viene quindi aggiunto a un'intestazione X-Authorization in ogni richiesta.

es. Autorizzazione X: 882fac38qkf98ff1ed29W4bd2f95P214 = & & = 2c55a195

Tutte le richieste vengono eseguite su https: //. Ho sempre avuto l'impressione che un nuovo salt dovrebbe essere generato su ogni richiesta, in quanto ciò previene gli attacchi dei tavoli arcobaleno ... ma è davvero necessario?

Diciamo che qualcuno sfonda il livello TLS e così può vedere l'hash della password e il sale che è stato usato. Sono intenzionati a rompere questa password e quindi creano una tabella arcobaleno utilizzando questo sale visibile. Dubito che creino una password di 30 byte, ma se lo fanno, ora hanno la password che abbiamo inviato al client.

A questo punto, con la password, possono fare qualsiasi richiesta a loro piace. Non importa se un nuovo sale viene utilizzato su richieste future. Non è necessario creare un'altra tabella arcobaleno per craccarli, perché abbiamo già la password.

C'è qualcosa che sto trascurando o fraintendendo? C'è un vantaggio nel generare un nuovo salt ed eseguire la funzione PKDF2 ad ogni richiesta?

    
posta Sno 14.03.2018 - 10:39
fonte

2 risposte

3

Il punto di utilizzo di sale è prevenire attacchi di forza bruta contro più password contemporaneamente. Se hanno tutti diversi sali, il tuo dizionario o la tua tabella arcobaleno è valido solo per un sale specifico.

Quindi, in effetti l'utilizzo di sali diversi per la stessa password non è utile.

N.B .: Se qualcuno può interrompere le connessioni TLS probabilmente attaccherà qualcosa di più interessante della tua webapp. ;)

    
risposta data 14.03.2018 - 10:58
fonte
0

Onestamente? Non ce n'è bisogno, è solo un overhead di elaborazione extra. Se crei un sale unico, puoi usarlo per tutte le tue comunicazioni e l'unico modo per romperlo sarebbe che l'aggressore ti salassi, quindi usa il sale per attaccare la tua password. Se hai usato una password complessa, poco o per caso succederà qualcosa.

    
risposta data 14.03.2018 - 14:03
fonte

Leggi altre domande sui tag