Ad Nihilum 0.4.3

Se lanzó Ad Nihilum 0.4.3, un servicio minimalista para intercambiar mensajes cifrados bajo el principio de 'leí - quemé', enfocado principalmente en el autoalojamiento.

El servidor actúa solo como un almacenamiento ciego. El cifrado y descifrado ocurren exclusivamente del lado del cliente, en el navegador (a través de AES-GCM).

Características

  • cifrado y descifrado local, servidor nunca ve la clave;
  • soporte para una capa adicional de cifrado por contraseña, que (1) el servidor no puede conocer, (2) no se puede determinar a través del enlace transmitido;
  • el proyecto contiene alrededor de 2200 líneas de código del servidor en C y 600 líneas de código del cliente en JS, lo que facilita la auditoría;
  • Ad Nihilum solo depende de libmicrohttpd. Se proporciona una versión modificada de QRCode.js para la generación de códigos QR;
  • se incluye una guía para levantar rápidamente un servicio local sin una IP externa;
  • Ad Nihilum funciona en Android, se adjunta un script correspondiente para compilar en Termux;
  • servidor de un solo hilo y sincrónico.

Cambios

Rediseño a gran escala

  • Se separaron las páginas de envío y recepción de mensajes, el código del cliente correspondiente.
  • En general, el diseño fue muy modificado y ajustado teniendo en cuenta los deseos de los lorchanos
  • Clientes 'simples' y locales:
    • se agregó un cliente con un diseño simplificado https://adnihilum.net/simple;
    • las páginas del cliente se pueden guardar localmente y usar desde file://.

Políticas del navegador

  • se implementó CSP para combatir XSS;
  • el servidor envía HSTS.

Las fechas YYYY-M-DD y YYYY-MM-D ya no se interpretan

  • el proyecto fue renombrado de Epha-ots;
  • se compró el dominio adnihilum.net;
  • TLS se garantiza mediante Let’s Encrypt, es importante tenerlo en cuenta (no hay dinero);
  • se simplificó el manejo de archivos;
  • transición a punteros-fat;
  • se corrigieron errores menores;
  • auto-jsminify y construcción de archivos del cliente al compilar a través de CMake.

Revisión del protocolo

Generar tres valores aleatorios: la clave K, el vector de inicialización N y la sal S. K — 256 bits, N — 96 bits, S — 128 bits.

Mostrar ID de K y S usando HKDF basado en SHA-256.

Formar una cadena de datos adicionales autenticados aad — es simplemente una cadena del tipo: id=ID

Si el usuario estableció una contraseña:

  • salida Pk de la contraseña y S usando PBKDF2, SHA-256, 800000 iteraciones;
  • la misma sal se utiliza para todo;
  • cifrar datos usando AES-GCM, utilizando la clave Pk, IV/nonce N y transmitir aad.

Agregar una etiqueta de dos bytes a los datos ya cifrados, si hubo contraseña, o a los datos originales si no hubo contraseña.

El primer byte tiene el valor: indica si los datos fueron cifrados por contraseña:

  • 0x73 — los datos están cifrados por una contraseña;
  • 0x13 — los datos no están cifrados por una contraseña.

El segundo byte es un valor constante 0x37.

Volver a cifrar el resultado con AES-GCM, utilizando el mismo iv = N y el mismo aad. Esto proporciona el texto cifrado final ct.

Combinar bytes en una cadena: blob = N .. S .. ct

Enviar blob al servidor junto con ID. El servidor devuelve blob a través de esto ID y no puede ser sustituido: el cliente primero comprobará ID utilizando N y K incluso antes de la descifrado, y luego a través de aad.

El cliente almacena K. K nunca se envía al servidor. Pk también no se envía; todo lo relacionado con la contraseña se elimina de la memoria.

El cliente forma un enlace: origin/#ID/K

Aquí ID y K — cadenas en formato base64url.

Cuando el destinatario abre el enlace:

  • el navegador descarta todo lo que comienza con #; esto se llama location.hash;
  • la aplicación cliente se carga desde el servidor;
  • en mi opinión, esta es la principal brecha: en realidad, estamos volviendo a encontrar que “TLS es débil”;
  • sin embargo, nada impide que el cliente se almacene fuera de línea;
  • idealmente debería haber un cliente independiente.

El JavaScript del cliente verifica location.hash, y si hay ID y K, carga los datos desde el servidor.

Luego los verifica, los descifra y, si es necesario, solicita la contraseña y los descifra una vez más.

Licencia

El proyecto se distribuye bajo GPLv3.

Fuente: linux.org.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster