Diciamo che sviluppiamo un sito web di social network, che consente di inviare messaggi personali tra gli utenti. Non vogliamo che nessuno (nemmeno noi) legga questi messaggi, ad eccezione del mittente e del destinatario del messaggio.
È possibile?
Quello che stai cercando è qualcosa chiamato crittografia a chiave pubblica .
L'analogia è che abbiamo due persone: Alice e Bob. Alice vuole inviare un messaggio a Bob ma non l'ha mai incontrato prima in privato, quindi non ha alcun segreto / chiave / ecc precostituito.
Alice invia a Bob un messaggio che dice "Voglio mandarti un messaggio. Per favore inviami un lucchetto aperto a cui hai la chiave". Questo 'blocco' è chiamato una chiave pubblica nel mondo crittografico.
Bob invia ad Alice una copia del lucchetto aperto (poiché le cose possono essere facilmente duplicate nel mondo crittografico). Alice mette il suo messaggio in una scatola e blocca la scatola con il lucchetto di Bob. Alice invia quindi la casella bloccata a Bob.
Bob riceve la casella nella posta e utilizza la sua chiave (con accesso solo a Bob) per sbloccare la casella. Bob può ora estrarre il messaggio e leggerlo. Nel mondo crittografico, questa chiave privata viene chiamata, sorpresa a sorpresa, la chiave privata :)
Il processo di bloccare il messaggio in una casella in modo che altri non possano leggerlo è noto come crittografia
La regola n. 1 in crypto è non scrivere la tua cripto. Questo perché è molto facile incasinare, ma ciò non significa che non dovresti usare una consolidata implementazione criptata.
Ti consiglio di esaminare le librerie crittografiche JavaScript come kbpgp, sjcl, tweetnacl, ecc.
Come accennato da altri utenti, un grosso problema con crypto e js è che gli utenti non possono sapere con certezza che il server sta servendo il vero javascript. Un server compromesso potrebbe inviare un codice che dice che sta crittografando la roba, ma sta davvero risucchiandolo a qualche malvagio terzo partito. Allo stesso tempo, questa preoccupazione è rilevante indipendentemente dal fatto che tu usi o meno la crittografia, quindi (imo) non dovrebbe impedirti di gestire il mondo in un posto migliore usando la crittografia
Quindi quello che probabilmente vorresti è una chiave pubblica privata.
L'utente A invia la propria chiave pubblica all'utente B, l'utente B può quindi crittografare i messaggi utilizzando la chiave pubblica degli utenti A.
L'utente B quindi restituisce il messaggio crittografato all'utente A, l'utente A ha una chiave privata che corrisponde alla chiave pubblica, l'utente A deve sempre mantenere questo PRIVATO. Utilizzando l'utente della chiave privata A è possibile decodificare il messaggio dall'Utente B. Una volta che l'utente Criptato B non è in grado di decodificare il messaggio, la chiave pubblica viene utilizzata solo per la crittografia.
quello che stai cercando è stato usato in molte tecnologie, uso un metodo simile giorno per giorno con PGP.
ovviamente dovresti progettare la tua applicazione per tenerne conto per gestire tutte le generazione di chiavi e memorizzarle sul dispositivo delle persone (non memorizzarle sul tuo server)
Un altro metodo potrebbe essere l'utente di una chiave già condivisa e un altro tipo di crittografia come AES, tuttavia ciò richiederebbe al mittente e al destinatario di conoscere la stessa chiave. problematico se parli solo online.
la chiave già condivisa significherebbe che l'utente avrebbe bisogno di una chiave per ogni conversazione, mentre un PPK (pubblico e privato) significherebbe che molte persone potrebbero avere una chiave pubblica degli utenti e l'utente tenere saldamente su quella chiave privata.
Leggi altre domande sui tag cryptography encryption websites databases