Sfortunatamente, non c'è modo di fare crittografia in modo sicuro in JavaScript . Per riassumere i punti chiave del collegamento:
- JavaScript non ha un generatore di numeri casuali sicuro e nessun archivio di chiavi sicure, il che significa che non può generare o archiviare in modo sicuro le chiavi di crittografia.
- Non c'è modo di garantire che il browser non sia stato compromesso.
- Senza SSL / TLS, non c'è modo di garantire che i dati o il codice caricato dal browser sia quello fornito dal server.
È possibile crittografare i dati sul server, quindi inviare i dati al client tramite SSL / TLS. Tuttavia, una volta che i dati sono lì, hai bisogno di qualcosa per decrittografarlo, che richiede la memorizzazione della chiave. Sfortunatamente, non c'è modo di memorizzare la chiave in modo sicuro. Né storage locale né sistemi specifici del browser, ad es. chrome.storage , sono crittografati.
Ci sono altre opzioni, tra cui controlli ActiveX, applet Java, Adobe AIR o applicazioni Adobe Flash. Sfortunatamente, tutti questi sono problemi di sicurezza o sono specifici della piattaforma. È possibile scrivere plug-in del browser, ma questi sono anche browser e talvolta specifici della piattaforma.
This data is sensitive and must be secure
Quanto è sicuro? La convenienza o la funzionalità di solito superano la sicurezza, quindi è probabile che tu debba prendere in considerazione i compromessi, come ad esempio:
- È possibile memorizzare alcuni dati e non le parti più sicure? Ad esempio, se si memorizzano i dettagli di contatto del cliente, i dati della cache che non sono Informazioni di identificazione personale (PII, come i numeri di previdenza sociale degli Stati Uniti).
- Puoi richiedere un determinato browser o piattaforma? Ad esempio, se la maggior parte dei clienti utilizza Windows, prendere in considerazione un controllo ActiveX o un'applicazione desktop ClickOnce. Se usano Windows 8+, puoi creare un'app nell'app store di Windows (anche se questo suggerimento potrebbe causare brividi)?
- I dati cambiano frequentemente, quindi l'impatto di un compromesso è piccolo?
Ricorda inoltre che l'archiviazione sicura non è l'unica cosa da considerare. Anche se si risolve questo problema, non è necessario archiviare i dati in modo sicuro se non viene fornito su SSL / TLS (quindi può essere visualizzato o manomesso in transito) o se si utilizza l'autenticazione debole o scarsa (ad esempio cookie di autenticazione non crittografato e non modificato ). Allo stesso modo, dato l'accesso fisico al supporto di memorizzazione, non c'è modo di proteggere i dati da un attaccante paziente determinato, anche se è crittografato.