Conosco questo tipo di domande, ma non sono riuscito a trovare una risposta semplice, la maggior parte delle risposte sono "non farlo"
Per giocare, mi sono costruito una webapp, usa sjcl per crittografare e decifrare le note sul client, mentre si invia il modulo crittografato al server.
Sto memorizzando la chiave nella memoria locale.
Dalla mia ricerca, sono a rischio di:
- Attacchi di cross site scripting (la mia applicazione utilizza AJAX per inviare e ricevere i dati dal server, non sono sicuro che sia un vettore di attacco).
- La macchina locale viene hackerata. Al momento l'app può essere utilizzata solo su macchine di cui ho il pieno controllo, al momento dell'accesso da una macchina che non controllo e digitando la mia chiave, quella macchina ha essenzialmente la mia chiave.
- Qualsiasi tipo di difetto nell'archiviazione locale che consente a un sito di un dominio diverso di leggere l'archiviazione di altri siti Web memorizzati nel browser.
Sono sicuro di aver perso innumerevoli altri vettori di attacco.
A prima vista, mi sembra impossibile progettare una nota crittografata lato client che tenga l'applicazione che non invia mai la chiave al server. Con la programmazione, c'è quasi sempre un modo.
C'è un modo per rendere effettivamente utilizzabile l'app?