← Proyectos

ABR Cipher

Suite de cifrado que funciona entera en el navegador. Texto y archivos de varios GB con AES-256-GCM, notas que caducan, vault de contraseñas, borrado seguro y quince herramientas más. Sin servidor, sin cuentas y sin telemetría.

La portada de ABR Cipher con sus diecinueve módulos
Un texto cifrado con AES-256-GCM, listo para compartirUna nota cifrada convertida en enlace que caducaEl módulo de borrado seguro
módulos
19
módulos
tests (Vitest)
~670
tests (Vitest)
decisiones documentadas (ADR)
9
decisiones documentadas (ADR)
commits desde mar. 2026
~450
commits desde mar. 2026

Qué hace

  • Cifrar texto. AES-256-GCM con contraseña, varias contraseñas encadenadas o la clave pública del destinatario. El resultado se comparte como texto, enlace o código QR.
  • Cifrar archivos de varios GB. Por trozos, escribiendo directamente a disco, sin cargar el archivo entero en memoria.
  • Notas que caducan. El mensaje cifrado viaja dentro del propio enlace, con caducidad de una hora a siete días.
  • Vault de contraseñas. Cifrado en el propio navegador y con bloqueo automático.
  • Borrado seguro. Sobrescribe archivos y carpetas en varias pasadas, la última con datos aleatorios.
  • Quince herramientas más. Firmas digitales, códigos 2FA, JWT, HMAC, hashes, esteganografía, limpieza de metadatos EXIF, ZIP cifrados, generador de contraseñas, inspector de certificados X.509 y análisis de entropía y frecuencias.
  • Funciona sin conexión. Es una PWA, está en 4 idiomas (español, inglés, francés y chino) y tiene modo oscuro.

Cómo está hecho

Sin servidor, por diseño

No hay backend que atacar, ni cuentas, ni una sola petición de red con datos sensibles. Es una SPA estática: todo el cifrado ocurre en el dispositivo del usuario.

Solo la criptografía del navegador

Todas las operaciones usan la Web Crypto API nativa, sin librerías criptográficas de terceros. La mantienen y auditan los fabricantes de navegadores, usa aceleración por hardware y no añade ni un byte ni un riesgo de cadena de suministro.

Archivos grandes sin agotar la memoria

Los archivos se cifran en trozos de 64 MB con un formato propio con cabecera mágica, y se escriben directamente a disco con la File System Access API. El trabajo pesado va en Web Workers que, si no pueden arrancar, vuelven al hilo principal.

Capas estrictas y decisiones por escrito

La lógica son funciones puras en TypeScript, testeables sin montar componentes. Los composables orquestan el estado y los componentes solo pintan: un componente nunca importa la lógica directamente. Cada decisión importante está documentada en un ADR.

Un compañero nativo en Rust

cipher-shred es una herramienta opcional en Rust que hace lo que el navegador no puede: escribir saltándose la caché del sistema y borrar la entrada del archivo. Incluye un motor que lee el sistema de archivos NTFS directamente para recuperar archivos borrados por error. Todavía no está publicado.

Problemas que resolví

  • Compartir un secreto sin servidor que lo guarde. El mensaje cifrado viaja en el fragmento # de la URL, que los navegadores nunca envían al servidor por especificación.
  • Archivos cifrados que salían vacíos. Al cifrar un único archivo con el worker, el flujo de escritura nunca se cerraba y el resultado quedaba en 0 bytes. Ahora se cierra siempre, y hay un test que lo comprueba.
  • Workers que se colgaban sin avisar. Si un worker fallaba al arrancar, nadie se enteraba: la operación se quedaba esperando para siempre y nunca se usaba el respaldo. Ahora los errores del worker llegan al mismo manejador que el resto, en los cuatro workers.
  • Leer un disco NTFS sin confiar en lo que contiene. El parser de cipher-shred comprueba todos los límites antes de leer, valida cada sector antes de modificar nada y nunca escribe en el volumen que analiza.

Stack

Nuxt 4Vue 3TypeScriptWeb Crypto APIWeb WorkersFile System Access APIPiniaTailwind CSSRustVitestTesting LibraryPlaywright

Artículos