Scenario:
- La pagina delle richieste degli utenti sul mio sito
- Il server genera token utilizzando vari valori, lo crittografa (tramite un algoritmo standard del settore, nulla di homegrown) utilizzando una chiave che solo il server conosce e lo restituisce come parte dei dati della pagina
- Il token è incorporato nel link alla pagina
- Quando il client fa clic su quel collegamento, il token viene inviato al server, decrittografato e analizzato e i valori utilizzati per determinare cosa fare
Questo perché abbiamo bisogno di alcune informazioni da inviare dal client al server, ma non vogliamo perdere quei bit di informazioni sul client perché rivelerebbero dettagli dei meccanismi interni del server.
Il problema qui è che, ogni volta che un particolare utente visualizza una determinata pagina, per loro verrà generato lo stesso token. Oltre a consentire la ripetizione all'infinito della stessa richiesta per l'endpoint, questo rende più probabile che qualcuno possa rompere la crittografia del token (sì, lo so che non è probabile, ma è possibile).
Per rendere la crittografia ancora più resiliente, la mia intenzione è quella di inserire un valore casuale di alta qualità, ad esempio un GUID, nel token prima che venga crittografato. Il risultato finale sarà introdurre più entropia nel processo di crittografia, il che significa che per un dato insieme di valori identici di cui ci preoccupiamo (vale a dire tutto tranne il valore casuale), il token generato sarà quasi certamente diverso. Questo valore casuale verrà sempre inserito nello stesso posto e sarà sempre della stessa lunghezza, quindi la rimozione e il lancio dopo la decifrazione del token è banale. In effetti, si tratta di un aumento della crittografia con offuscamento.
Sembra a mio occhio inesperto che questa è una soluzione relativamente semplice e sicura al mio problema, ma lo è, o sto semplicemente sprecando il mio tempo e / o rendendo le cose meno sicure e più complicate?