La risposta breve. Il tuo meccanismo è troppo complicato. Esiste una soluzione più semplice, migliore, più sicura: usa SSL a livello di sito e imposta il secure
bit su tutti i tuoi cookie in modo che vengano inviati solo tramite connessioni crittografate (SSL).
Nitidezza tecnica. Se vuoi davvero discutere del tuo meccanismo proposto, possiamo parlarne, ma penso che le carenze tecniche specifiche in esso contenute siano secondarie al punto più generale che c'è un modo più semplice e migliore per farlo. Ecco alcune specifiche:
Se risolvi questi difetti, la tua proposta non è del tutto irragionevole. Ad esempio, ASP.NET supporta la crittografia e l'autenticazione dei cookie utilizzando un MachineKey.
Tuttavia, non ti consiglio di seguire questa strada. Mentre probabilmente potresti correggere questi difetti dati gli sforzi di engouh, sospetto che la complessità di inventare come farlo correttamente sia probabilmente più di quanto tu sia qualificato per. Sono cose complicate e sarebbe facile sbagliare qualcosa. (Ad esempio, testimonia i vizi devastanti nella crittografia di ASP.NET, che ha permesso agli attacchi padding-oracle di decrittografare tutto e sconfiggere la sicurezza di tutta la crittografia.)
Consigli generali. Invece di provare a fare qualcosa di funky con la crittografia della tua cucina, ti suggerisco il seguente consiglio:
-
In generale, essere riluttanti a memorizzare lo stato nei cookie. Invece, memorizzarlo nella sessione o nel database. In questo modo, tutto ciò di cui hai bisogno è un cookie di sessione.
-
Utilizza il supporto integrato per la gestione delle sessioni del framework di programmazione web; non provare a tirare il tuo. (Se provi a lanciare il tuo, puoi facilmente ritrovare vulnerabilità come la fissazione della sessione.)
-
Usa SSL in tutto il sito. Imposta il flag secure
su tutti i cookie.
-
Usa la difesa CSRF per tutte le richieste POST. Assicurati che tutte le richieste GET non abbiano effetti collaterali (le richieste con effetto collaterale devono essere inviate come POST).
-
Leggi i materiali di OWASP sulla sicurezza delle applicazioni Web.