HMAC e utilizzo di un campo casuale crittograficamente sicuro come messaggio

0

Dire che ho una grande applicazione per la quale vorrei creare un'API sicura. Il modo standard per andare sarebbe lavorare con una chiave API pubblica e una chiave API segreta e fornirle all'utente. Successivamente, in ogni richiesta API, i messaggi vengono firmati utilizzando un MAC sulla chiave segreta e (in parte il messaggio).

Ora, dal momento che questa applicazione è grande, non voglio dover selezionare il mio campo messaggio su base gateway per API (ad esempio se la mia richiesta API era per rispondere a una domanda, message=answer , se la mia richiesta API era per la pubblicazione di un commento message=comment ecc ...).

Per comodità vorrei quindi aggiungere un campo casuale crittograficamente sicuro, che viene aggiunto ad ogni richiesta (chiamiamo questo campo il nostro salt ). In questo modo posso scrivere una verifica di richiesta che copre tutte le situazioni.

Le mie domande ora sono:

Questa è una buona idea e perché (non) così?

    
posta JohannesB 06.05.2018 - 23:07
fonte

1 risposta

1

Un elemento unico (spesso casuale) aggiunto a un messaggio è chiamato nonce . Può essere usato come difesa contro gli attacchi di replay (cioè, un utente malintenzionato che può osservare una richiesta legittima firmata correttamente può in seguito riprodurre quella richiesta esatta per fare in modo che il server riprenda la stessa azione). In quanto tale, può essere molto utile (supponendo che tu verifichi che un dato nonce possa essere effettivamente usato una sola volta).

Tuttavia, se ho capito bene, vuoi calcolare il MAC per il nonce / sale invece di per i dati dei messaggi effettivi. Ciò non funzionerà, poiché sono ovviamente protette solo le parti del messaggio incluse nel MAC. Ti suggerisco di serializzare l'intero messaggio in un formato adatto (ad es. JSON), calcolare il MAC su di esso e inviarlo entrambi nella richiesta. In questo modo, il MAC / firma non fa parte del messaggio corretto e la verifica può essere eseguita senza conoscere la struttura del messaggio stesso.

    
risposta data 07.05.2018 - 11:55
fonte

Leggi altre domande sui tag