JavaScript cryptography is not a good idea
La crittografia JavaScript non è male di per sé, è solo inefficace contro le minacce più comunemente considerate.
Se consideri un man-in-the-middle (MITM) una minaccia, SSL / TLS è un controllo molto più efficace in quanto altrimenti l'autore dell'attacco potrebbe sostituire il JavaScript per una versione che non utilizza la crittografia.
Se consideri il software dannoso sul lato client come una minaccia, potrebbe presumibilmente modificare il codice JavaScript in qualsiasi modo e la tua crittografia sarebbe inutile.
Se consideri il lato server come una minaccia (ad esempio il client vuole che il server memorizzi qualcosa ma non veda il contenuto), allora potrebbe essere efficace, ma il client ha bisogno di un altro modo per garantire che JavaScript non stato manomesso (che non è un problema facile da risolvere) e il client deve gestire da solo la chiave.
Nel caso d'uso che hai descritto, non sembra che la crittografia del lato client aggiunga davvero ulteriore sicurezza. In entrambi i casi devi affrontare la questione della comunicazione della chiave, che probabilmente dipenderà dall'integrità di SSL / TLS indipendentemente . O il client dovrà inviare la chiave al server o viceversa, e anche se utilizzi la crittografia a chiave pubblica per risolvere questo problema, avrai ancora il problema di verificare che la chiave pubblica inviata al client sia autentica. Molto probabilmente finirai per reimplementare una tipica infrastruttura a chiave pubblica.
A parte questo, non c'è alcun problema fondamentale con l'esecuzione della crittografia in JavaScript, tranne che:
- In genere è piuttosto lento rispetto alla maggior parte degli standard
- Generare chiavi crittograficamente sicure può essere un problema, in particolare nei vecchi browser che non supportano alcune API più recenti per questa attività