HMAC-SHA256 per firma token JWT

0

Attualmente sto lavorando in un'azienda in cui abbiamo la necessità di progettare un sistema di autenticazione basato su token. Saremo proprietari e controllori di due server, uno dei quali è il server di autenticazione e l'altro il server delle applicazioni.

Sono abbastanza esperto su concetti di sicurezza informatica, minacce, vulnerabilità comuni e contromisure, ma una domanda a cui non ho trovato risposta è se hai bisogno di più cicli di hash quando usi HMAC-SHA256 per firmare un token JWT.

Poiché per qualcosa come hashing una password usando SHA256 la regola generale che intendo è eseguire 2 ^ (anno 2000) (dare o prendere in base alle esigenze di prestazioni) cicli di hashing, faccio fatica a credere a un singolo round di HMAC -SHA256 è abbastanza buono, eppure non ho mai visto nessuno fare questa domanda quando ho cercato l'argomento.

Pertanto, data una chiave segreta e un'intestazione e un payload del token JWT, quale delle seguenti è considerata la migliore procedura per la firma del token:

  1. Una singola iterazione di HMAC-SHA256 è considerata sicura per una firma di token JWT.
  2. Si consiglia di eseguire HMAC-SHA256 più e più volte riutilizzando la stessa chiave segreta.
  3. Esegui HMAC-SHA256 una volta quindi esegui iterazioni di hashing SHA256 sul prodotto dal calcolo di HMAC. (Questo è ciò che suppongo sia una buona pratica)
  4. Ho torto totalmente ed è qualcosa di diverso.

Grazie mille per qualsiasi aiuto. Voglio solo assicurarti che il sistema sia progettato nel miglior modo possibile.

    
posta dFrancisco 12.01.2018 - 15:28
fonte

1 risposta

3

HMAC e hashing della password risolvono problemi molto diversi. Con HMAC ci si aspetta che il segreto sia di alta qualità (cioè 128 bit di entropia), mentre le password dovrebbero essere di bassa qualità (30 bit di entropia sono ottimisti per la maggior parte delle persone).

Un singolo giro di una rapida funzione di hash è dannoso per le password perché consente agli aggressori di tentare rapidamente molte password comuni o di eseguire un attacco di forza bruta su una password di bassa entropia. Per HMAC questo rischio non esiste realmente (purché il segreto sia generato da un CSPRNG), quindi un round è sufficiente.

Nota a margine: non hai specificato, ma non devi usare SHA-256 direttamente per le password di hashing, anche se usi molti round. È molto più semplice usare PBKDF2 con SHA-256 da una libreria standard in modo da non incorrere in insidie.

    
risposta data 12.01.2018 - 15:48
fonte

Leggi altre domande sui tag