Digamos que desarrollamos un sitio web de redes sociales, que permite enviar mensajes personales entre usuarios. No queremos que nadie (ni siquiera nosotros) lea estos mensajes, excepto el remitente y el receptor del mensaje.
¿Es posible?
Lo que estás buscando es algo llamado cifrado de clave pública .
La analogía es que tenemos dos personas: Alice y Bob. Alice quiere enviar un mensaje a Bob, pero no se han conocido antes en privado, por lo que no tienen ningún secreto / clave / etc preestablecido.
Alice le envía a Bob un mensaje que dice "Quiero enviarte un mensaje. Por favor, envíame un candado abierto al que tenga la clave". Este 'bloqueo' se denomina clave pública en el mundo criptográfico.
Bob le envía a Alice una copia del bloqueo abierto (ya que las cosas se pueden duplicar fácilmente en el mundo criptográfico). Alice pone su mensaje en una caja y la cierra con la cerradura de Bob. Alice luego le envía la caja bloqueada a Bob.
Bob recibe la casilla en el correo y usa su llave (con la que solo Bob tiene acceso) para desbloquearla. Bob ahora puede sacar el mensaje y leerlo. En el mundo criptográfico, esta clave privada se llama sorpresa sorpresa, clave privada :)
El proceso de bloquear el mensaje en un cuadro para que otros no puedan leerlo se conoce como cifrado
La regla # 1 en criptografía es no escribir su propia criptografía. Esto se debe a que es muy fácil de desordenar, pero eso no significa que no debas usar una implementación criptográfica establecida.
Recomiendo buscar en las bibliotecas criptográficas de JavaScript como kbpgp, sjcl, tweetnacl, etc.
Como lo mencionaron otros usuarios, un gran problema con crypto y js es que los usuarios no pueden saber con seguridad si su servidor está sirviendo el javascript real. Un servidor pirateado podría enviar un código que diga que está encriptando cosas pero que realmente lo está desviando a una tercera parte malvada. Al mismo tiempo, esa preocupación es relevante ya sea que use criptografía o no, por lo que (imo) no debería disuadirlo de que el mundo sea un lugar mejor mediante la criptografía
Entonces, lo que probablemente quieras son las claves privadas públicas.
El usuario A envía su propia clave pública al usuario B, el usuario B puede cifrar los mensajes utilizando la clave pública de los usuarios A.
El usuario B luego envía el mensaje cifrado al usuario A, el usuario A tiene una clave privada que coincide con la clave pública, el usuario A siempre debe mantener esta PRIVADA. El uso de la clave privada del usuario A puede descifrar el mensaje del usuario B. Una vez que el usuario B cifrado no pueda descifrar el mensaje, la clave pública se usa solo para el cifrado.
lo que estás buscando se ha utilizado en muchas tecnologías, yo uso un método similar día a día con PGP.
obviamente, usted diseñaría su aplicación para tener esto en cuenta para manejar toda la generación de claves y almacenarlas en el dispositivo de las personas (nunca almacenarlas en su servidor)
Otro método sería utilizar una clave previamente compartida y otro tipo de cifrado como AES, sin embargo, esto requeriría que el remitente y el receptor conozcan la misma clave. problemático si solo hablas en línea.
la clave previamente compartida significaría que el usuario necesitaría una clave para cada conversación, mientras que un PPK (público y privado) significaría que muchas personas podrían tener una clave pública de los usuarios y que el usuario mantenga segura esa clave privada.
Lea otras preguntas en las etiquetas cryptography encryption websites databases