Attualmente sto sviluppando un'applicazione web che implementa un servizio di archiviazione dei messaggi. È necessario che i messaggi non siano leggibili dallo sviluppatore / amministratori di sistema, e una cosa bella sarebbe trasmettere i messaggi crittografati end-to-end. I messaggi dovrebbero essere leggibili da tutte le persone in un 'affare'. I messaggi che devono essere archiviati provengono da fonti esterne come API o e-mail. Questi messaggi esterni in arrivo dovrebbero essere considerati classificati. gli utenti dovrebbero essere in grado di accedere da qualsiasi browser.
Nella mia attuale implementazione del test sulla creazione di un 'business' verrà generato un RSA Keypair. La chiave pubblica verrà salvata nel database associato al "business" e la chiave privata verrà crittografata utilizzando un hash derivato dalla password dell'utente e archiviata associata all'utente. Quando altri utenti vengono aggiunti all'azienda, la chiave privata decrittata dell'utente connesso verrà crittografata utilizzando il nuovo hash derivato da password degli utenti e archiviata con il nuovo utente.
I messaggi in arrivo verranno crittografati dall'azienda come chiave pubblica.
Quando si interrogano messaggi, questi verranno decrittografati dalla chiave privata dell'utente (la chiave privata sarà la stessa per tutti gli utenti dell'azienda, eccetto che sono crittografati con un hash derivato da password differente). Pertanto, quando un utente accede alla password verrà utilizzato per ottenere l'hash derivato, decrittografare la chiave pubblica e memorizzarlo in una sessione lato server. Da quel momento i messaggi possono essere decodificati e pubblicati.
L'unico problema è: leggendo i file di sessione, gli amministratori di sistema sono ancora in grado di decodificare i messaggi degli utenti registrati. C'è qualche protocollo per risolvere questo?
Ho pensato anche alla decrittazione lato client (inviando agli utenti la chiave privata crittografata al browser, derivando la chiave dalla password sul lato client, decifrando la chiave privata usando quella, e salvando temporaneamente la chiave privata decodificata in localstorage e decrittografare i messaggi dall'api usando quella chiave privata decrittata sul lato client, ma sta memorizzando una chiave privata decodificata nel browser sicuro?