Sto lavorando a un'applicazione che funge da back end (API REST) per un'estensione di Google Chrome. I dati dovrebbero essere inviati da e verso il cliente.
Il modo in cui funziona è:
- I dati provenienti dal client vengono crittografati dall'applicazione utilizzando AES-256 (utilizzando la chiave master, guarda sotto ) e archiviati in un database SQLite3.
- I dati inviati dall'applicazione al client vengono decrittografati nel back-end e quindi inviati tramite un protocollo HTTP.
Nota, l'applicazione e l'estensione risiedono nello stesso ambiente locale, quindi altri computer sulla rete non possono accedervi. Ecco perché i dati vengono trasferiti in testo normale in entrambi i casi.
Ci sono alcuni vincoli:
- Può esserci un numero di client che inviano richieste al back-end. Sono tutti controllati dalla stessa persona.
- C'è un segno di accesso nel client e richiede solo una chiave master. Una volta inviato il modulo, la chiave deve essere inviata al back-end e il client viene autenticato, cioè confrontandolo con quello (crittografato usando PBKDF2) nel database.
Il problema Il problema è che non voglio memorizzare la chiave master in modo persistente nel client (Javascript), in quanto può essere facilmente individuata da chiunque altro possa accedere al computer. Se era possibile autenticarsi solo una volta, inviando la chiave master tramite il protocollo all'applicazione e quindi rimuovere la chiave dal client.
Quindi la domanda è quale sarebbe la soluzione ottimale?