Ho una situazione in cui ho bisogno di un token che fornisce l'autenticazione. La procedura HMAC comune che ho trovato è:
- Ottieni una chiave utilizzando le credenziali di accesso
- Crea messaggio, aggiungi la chiave e altri dati del messaggio (nell'ordine definito)
- Hash con un tasto segreto
- Trasmetti il messaggio e includi i valori presenti nel messaggio (non con hash)
Poi
- Ricevi il messaggio
- Utilizza i valori unhashed per ricostruire il messaggio
- Hash con chiave segreta
- Se gli hash corrispondono, il messaggio è buono.
Sto implementando qualcosa di simile - ma non penso di aver bisogno di fare alcuni di questi passi. Volevo sapere: La mia implementazione ha dei buchi di sicurezza nella logica ?
La mia implementazione:
- Il client chiede al server di generare un token - questo richiede le credenziali di accesso.
- Il server crea un token ma non lo restituisce (è conservato nel database) - restituisce un timestamp.
- Il client genera un messaggio basato su data e ora, utente e altri dati.
- Token hash del client con una chiave segreta, fornita al di fuori di questo processo.
- Il client invia token al server.
Quindi:
- Ricevi il messaggio
- Se quel token è nel database, è valido
Il mio ragionamento sull'eliminazione della ricostruzione del messaggio è: che è successo quando il token è stato generato e il client non poteva sapere del token nel database a meno che non sapesse come generarlo, il che significa che sono autenticati e hanno una chiave segreta.