Chat web simple encriptado. Impulsado por Socket.io, la API de criptografía web. Este proyecto es un ejemplo de cómo funciona el cifrado del lado del cliente y cómo puede integrarlo como un servicio de chat.
Darkwire Server es una aplicación Node.js.
El cliente web Darkwire.io está escrito en JavaScript con React JS y Redux.
Copie los archivos .env.dist en server/ y client/ directorios sin las extensiones .dist y adaptarlos a sus necesidades.
Debe tener una conexión HTTPS para que DarkWire funcione porque está usando API de navegador Crypto a la que se puede acceder solo en localhost y detrás de una conexión HTTPS.
Puede usar NVM para instalar la versión correcta del nodo usando este comando:
nvm install # If the right node version is not already installed
nvm use
npm install yarn -g # To install yarn
Instalar dependencias
$ yarn
Iniciar servidor y cliente
$ yarn setup
$ yarn dev
Simplemente ejecute lo siguiente:
$ docker-compose up
Esto creará automáticamente los archivos .env predeterminados para usted.
Crear compilaciones de producción de servidor y cliente
$ yarn build
Inicio del servidor
$ yarn start
Construirlo.
$ docker build --tag darkwire.io:latest .
Entonces ejecutarlo. Ejemplo:
$ docker run --init --name darkwire.io --rm -p 3001:3001 darkwire.io
Puede utilizar cualquiera de las variables de entorno disponibles en server/.env.dist y client/.env.dist . Los valores predeterminados están disponibles en DockerFile
Informe cualquier problema de seguridad a [email protected] .
Darkwire utiliza una combinación de cifrado asimétrico (RSA-OAEP), claves de sesión simétrica (AES-CBC) y claves de firma (HMAC) para la seguridad.
Aquí hay una descripción general de un chat entre Alice y Bob (también se aplica a los chats grupales):
Los chats grupales funcionan de la misma manera porque en el paso 5 encriptamos claves con la clave pública de todos. Cuando se envía un mensaje, incluye claves cifradas para todos en la habitación, y los destinatarios eligen los que ellos para ellos en función de su ID de usuario.
Darkwire no proporciona ninguna garantía de que la persona con la que se está comunicando es con quién cree que son. La funcionalidad de autenticación se puede incorporar en versiones futuras.
Darkwire codifica documentos en Base64 usando BTOA y está encriptado de la misma manera que los mensajes de chat.
El límite de tamaño de archivo transferible predeterminado es de 4MB, pero se puede cambiar en el archivo .env con la variable REACT_APP_MAX_FILE_SIZE .
Darkwire usa Socket.io para transmitir información cifrada utilizando Secure WebSockets (WSS).
Las habitaciones se almacenan en la memoria en el servidor hasta que todos los participantes se hayan ido, momento en el que se destruye la habitación. Solo las claves públicas se almacenan en la memoria del servidor durante la vida de la habitación.
El historial de chat se almacena en el navegador de cada participante, por lo que se borra efectivamente (para ese usuario) cuando su ventana está cerrada.