X:/Chat es una aplicación web que utiliza HTML, CSS y JavaScript en el front-end y node.js en el back-end. Permite a los usuarios comunicarse entre sí de manera segura (aunque soy nuevo en Node.js, y no puedo garantizar dicha seguridad).
JavaScript y el almacenamiento local son absolutamente obligatorios para que la aplicación web funcione. El almacenamiento local se utiliza para almacenar claves públicas, claves privadas, configuraciones y mucho más.
Si usa la función "Chat anónimo", el servidor almacena absolutamente nada. Quería hacer la forma de comunicación más segura que se me ocurriera, y terminé eligiendo ni siquiera almacenar registros de conversación a través del chat anónimo. Cuando hace clic en el botón "Chat anónimo", se redirige a "/Anónimo", donde se genera una identificación para usted, junto con una clave pública y una clave privada. Estos se guardan únicamente en su navegador (en el almacenamiento local). El servidor no almacena ninguna de esta información. Lo único que almacena el servidor es la ID de conversación y el tiempo de creación. Esto se hace para que las conversaciones puedan expirar después de una hora. Después de completar la carga, puede enviar su URL a cualquier persona que desee y hacer que se conecten con usted. Una vez que lo hacen, también obtienen un par de claves públicas/privadas para ellos, así como una identificación. Luego se le proporciona su clave pública y su identificación. Cuando envía un mensaje, lo encripta usando su clave pública RSA-2048, que luego descifran de su lado (localmente) usando su clave privada. Dado que el mensaje está encriptado en el lado del cliente, el servidor nunca sabe lo que se dice. Refrescar la página elimina los mensajes para quien se renovó, ya que los mensajes no se almacenan en ninguna parte . Sin embargo, debido al hecho de que nada se almacena en el servidor, significa que los usuarios pueden cambiar fácilmente sus ID y tal, por lo que este proyecto fue hecho para ser utilizado por pequeños grupos, en lugar del público en general. Hacer que el servidor almacene conversaciones anónimas proporcionaría el beneficio de que las conversaciones sean inmutables por los usuarios, pero significaría que el servidor puede modificarlas, y que existirían registros. Entonces, ¿preferirías confiar en tu amigo o algún servidor aleatorio?
El chat normal se parece más a su aplicación de chat genérica. Los mensajes aún están encriptados en el lado del cliente con RSA-2048, y las claves privadas de los usuarios están encriptadas con AES-256-CTR, que utiliza el hash SHA512 de la contraseña del usuario como clave de descifrado. La contraseña del usuario se almacena utilizando bcrypt con 10 rondas de sal. En resumen, a menos que el código del servidor se modifique o algo para capturar la clave privada del usuario, no hay absolutamente ninguna forma de obtener el contenido de una conversación. La configuración del usuario, los contactos y otros datos se almacenan en formato JSON en archivos de texto para facilitar el acceso. Estos se almacenan en texto sin formato, pero sería fácil cifrarlos con la contraseña del usuario y los AES. Si desea hacer realidad eso, recuerde, ya hay funciones escritas para hacerlo más fácil. Puede usar las funciones "AES_ENCRYPT (EnsinText, Password)" y "AES_Decrypt (Cifryped, Password)" que escribí para cifrar fácilmente lo que quiera.
Puede haber algunos errores o algún comportamiento inesperado, pero esto es de esperar, este es, después de todo, mi primer proyecto Node.js. Si intenta romper la aplicación, es muy probable que tenga éxito. No hay tantos controles de validación y como me gustaría, pero hay suficientes para proteger las cuentas y conversaciones del usuario. Sin embargo, me disculpo de antemano si algo sale mal.