C'è una stringa particolare (URL) che ho bisogno di inviare dal mio webserver al browser. Il browser dovrà ispezionare la stringa e in seguito inviarla non modificata (ovvero richiedere la risorsa a cui punta l'URL). Se il browser potesse modificare la stringa, sarebbe un rischio per la sicurezza. Quindi devo assicurarmi che la stringa non sia stata manomessa.
Per farlo ho bisogno di fornire una sorta di checksum nell'URL che il server può validare, ma che il client non può generare. Mi vengono in mente due approcci:
- Aggiungi una stringa segreta (detta anche "salt", preferibilmente piuttosto lunga e casuale) all'URL e cancellala con SHA1. Poiché il client non conosce la stringa segreta, non dovrebbe essere in grado di generare l'hash per un URL diverso. La mia preoccupazione: dal momento che può raccogliere molti di questi URL generati sul lato server (dell'ordine di alcune decine), forse può decodificare il sale?
- Lo stesso di prima, ma anche crittografarlo con AES. Questo è più lento, ma c'è una vera e propria crittografia. La mia preoccupazione: SHA1 genera 160 bit, mentre AES funziona con blocchi a 128 bit. Quindi l'hash dovrà essere riempito, probabilmente con zeri. Inoltre, ci sono solo 2 blocchi. Ciò non consentirà all'aggressore di scoprire facilmente la chiave?
Qualcuno di questi approcci è davvero sicuro? O dovrei provare a fare qualcos'altro interamente?