Persistendo l'output di HMAC invece dell'ID di sessione?

0

Invece di persistere in un token generato casualmente ho visto una strategia di persistenza dell'output di HMAC-SHA256 usando invece il token e una chiave privata.

La ragione per utilizzare una funzione di hash con una chiave privata è che un utente malintenzionato abbia bisogno della chiave per iniettare i token appropriati nel DB?

Ci sono altri vantaggi o svantaggi di questo metodo?

L'adozione di questa metodologia funzionerebbe nel seguente scenario di gestione delle sessioni:

Requisiti:

  1. L'utente dovrebbe essere in grado di revocare tutte o singole sessioni
  2. La revoca dovrebbe essere istantanea

Emissione:

  1. L'utente accede con e-mail e password
  2. Crea un ID di sessione 128 bit casuale
  3. Crea una firma taggando l'id della sessione con una chiave privata usando HMAC-SHA256
  4. Archivia un'associazione tra firma e id utente in DB
  5. Emettere un token di sessione al client: "{ID sessione} - {firma}"

convalida:

  1. Ricevi token di sessione "{ID sessione} - {firma}"
  2. Verifica la firma calcolando HMAC con la chiave privata e l'ID di sessione ricevuti. Scarta preventivamente la richiesta se non valida.
  3. Il token è valido, recupera l'ID utente dal DB utilizzando la firma.

O tutto questo è solo over-engineering rispetto all'utilizzo di un ID di sessione a 128 bit, hash senza chiave privata e mappa per l'id utente? (cioè, i vantaggi non sono abbastanza significativi e gli attacchi possono ancora essere fatti)

Grazie!

    
posta user71581 31.01.2018 - 02:04
fonte

0 risposte

Leggi altre domande sui tag