I was planning on user AES256 to ensure the client can't change the value of the cookie.
La crittografia fornisce riservatezza, non fornisce l'autenticazione.
Se non vuoi che gli utenti vedano un valore di dati di sessione, allora devi crittografare quindi autenticare il valore. Ciò impedisce a un bit di lanciare l'attacco di modificare il valore all'interno del token crittografato perché l'hash con chiave non corrisponderà più se vengono scambiati bit.
Se la riservatezza non è richiesta, puoi semplicemente autenticarti. Ad esempio, potresti utilizzare un HMAC su SHA-256 . Questo mostrerà all'utente finale quale sia il valore in chiaro, tuttavia non sarà in grado di modificare il valore perché non sarà in grado di ricalcolare il valore dell'hash con chiave senza la chiave.
es. Il tuo cookie sarà impostato come segue:
Set-Cookie: Session=Username=admin&expires=20150809104100&hash=7C2CD7DB7DF4055E782E3A5F70487FEB9A5CABEED3FB70F5D8772586FD8B2759
Scade impedisce a un utente di salvare i cookie offline per un uso futuro quando non sono un amministratore perché l'hash è calcolato anche oltre la scadenza:
Username=admin&expires=20150809104100
Puoi utilizzare questo sito per verificarlo (la chiave utilizzata era stackexchange
, tuttavia dovresti usare uno pseudo crittograficamente sicuro a caso generato una chiave a 128 bit).
Tuttavia, esiste una tecnologia Internet standard per fare ciò già denominata Token Web JSON . L'algoritmo HS256 genererà il valore del token sul lato client calcolato da HMAC su SHA-256.
Se vuoi anche la crittografia scegli A128GCM
- nota che una chiave a 128 bit è sufficiente per i tuoi dati - una chiave a 256 bit che utilizza AES-256 è più lenta e inutile. potrebbe essere anche meno sicuro in quanto vi sono differenze significative su come AES elabora una chiave a 128 e 256 bit.
Poiché JSON Web Encryption supporta solo algoritmi di crittografia autenticati, ciò impedirebbe anche il bit-flipping.