Decimen Optical Transfer: cómo enviar archivos sin Bluetooth ni conexión a Interne

Decimen Optical Transfer: cómo enviar archivos sin Bluetooth ni conexión a Interne

Decimen Optical Transfer es una herramienta basada en el navegador para transferir archivos y texto a través de un canal óptico. Un dispositivo muestra códigos QR que cambian rápidamente, otro captura el flujo con la cámara y recupera los datos originales. No se requieren Wi‑Fi, Bluetooth, cable, cuenta ni conexión de red directa entre los dispositivos.

Qué es Decimen Optical Transfer

Decimen convierte la pantalla de un dispositivo en transmisor y la cámara de otro en receptor. El usuario elige un archivo o pega un texto; el navegador divide el contenido en bloques y codifica una secuencia de cuadros QR. El receptor lee suficientes cuadros, reconstruye los datos originales y ofrece guardar el archivo.

La diferencia principal respecto a los servicios habituales de intercambio de archivos es el canal físico de transmisión. No es necesario enviar el contenido a través de un servidor en la nube ni de una red local. La carga útil pasa de la pantalla a la cámara en forma de luz. Este enfoque está pensado sobre todo para sistemas aislados, bancos de ensayo y otros escenarios donde no se desea o no es posible un canal de red entre los dos dispositivos.

La versión actual admite archivos arbitrarios de hasta 64 MiB y fragmentos de texto de hasta 16 KiB. Se conserva el nombre del archivo y el tipo MIME. Antes de la transmisión, la aplicación puede aplicar gzip, pero solo si la compresión realmente reduce el tamaño.

Funciones de Decimen

  • transfiere archivos arbitrarios de hasta 64 MiB;
  • transfiere texto de hasta 16 KiB;
  • funciona sin conexión de red entre el emisor y el receptor;
  • comprime datos de forma adaptativa mediante gzip;
  • verifica el contenido recuperado mediante SHA-256;
  • transmite usando uno, dos, cuatro o seis códigos QR simultáneamente;
  • ajusta la frecuencia de presentación de cuadros y la densidad de datos;
  • permite elegir la cámara en el dispositivo receptor;
  • decodifica en paralelo mediante Web Workers;
  • exporta el flujo QR a APNG o a una secuencia de PNG;
  • ofrece modos de diagnóstico y control para medir la tasa;
  • funciona sin conexión como PWA;
  • admite archivos HTML autónomos para emisor y receptor;
  • está traducido a 12 idiomas, incluido el ruso.

Los códigos QR los procesa un decodificador WebAssembly independiente, decimen-codec, basado en zxing-cpp. El proyecto intenta descargar el hilo principal del navegador y distribuye el reconocimiento de cuadros entre hilos de trabajo.

Cómo funciona la transmisión

El principal problema del canal «pantalla → cámara» es la falta de retroalimentación. El receptor no puede pedir al emisor que repita un fragmento perdido. La cámara puede perder cuadros de forma regular por movimiento, autofoco, reflejos, frecuencia de actualización de la pantalla y limitaciones del propio navegador.

En el código fuente actual, Decimen usa un esquema que el autor denomina systematic carousel. El archivo original se divide en K bloques. Primero, el transmisor muestra secuencialmente los K bloques originales y luego envía K cuadros de recuperación. Cada cuadro de recuperación contiene una combinación XOR de bloques originales elegidos mediante un generador pseudoaleatorio. Para los cuadros de recuperación, la implementación actual selecciona entre 4 y 24 bloques.

Tras completar el ciclo, la transmisión se repite. Los cuadros de recuperación de cada nuevo ciclo usan otras combinaciones de bloques porque el conjunto se calcula a partir del número absoluto del cuadro. Si la cámara leyó bien la primera pasada secuencial, el archivo se puede recuperar prácticamente sin redundancia adicional. En caso de pérdidas, los cuadros XOR siguientes ayudan a rellenar los huecos.

En la documentación del proyecto hay una discrepancia notable. El archivo docs/technical/protocol.md aún describe la codificación fountain LT clásica con robust-soliton distribution y afirma que cada cuadro transmitido es una combinación XOR pseudoaleatoria de bloques. Sin embargo, el actual shared/fountain.ts indica explícitamente que ese algoritmo corresponde al antiguo wire format v1, se conserva en la base de código para vectores de prueba y ya no lo utiliza el emisor. El carrusel sistemático apareció en la v0.4.0 y se mantuvo tras el paso al wire format en la versión 0.5.0.

La versión 0.5.0 también aumentó la cabecera de cuadro de 20 a 22 bytes. En la cabecera aparecen campos separados para magic, versión del protocolo y banderas de funciones. Además se transmiten el identificador de sesión, el número de cuadro, la cantidad de bloques, el tamaño de bloque, el tamaño total de datos y la suma de comprobación de la carga útil. Gracias a la versión del formato, un receptor moderno puede determinar si el transmisor usa una versión antigua incompatible o la versión nueva del protocolo.

Verificación de integridad

Dentro del contenedor transmitido, Decimen almacena el nombre del archivo, el tipo MIME, la información de compresión y el SHA-256 de los bytes originales. Tras reconstruir el contenido, la aplicación recalcula SHA-256 y verifica el resultado antes de guardar.

SHA-256 en este caso sirve como verificación de integridad, pero no como autenticación. Decimen no establece relaciones de confianza entre dispositivos ni confirma la identidad del remitente. Un campo separado payloadFnv en la cabecera emplea FNV-1a, que tampoco es un mecanismo criptográfico de protección.

Velocidad de transferencia

El desarrollador publica ejecuciones de referencia junto con informes de diagnóstico. En la tabla de resultados para v0.4.0 se indica un flujo sostenido de 418,5 KB/s al transferir desde un equipo de escritorio a un iPhone 17 Pro Max mediante cuatro códigos QR. Un archivo de 1 MiB en esa prueba se transmitió en 2,5 segundos.

Para la transmisión entre dos iPhone 17 Pro Max mediante dos códigos QR se publicó un resultado de 199,2 KB/s y 5,1 segundos para el mismo archivo de 1 MiB. El README también incluye una ilustración de una transferencia de aproximadamente 130 KB/s, pero esa cifra corresponde a una ejecución de demostración separada y no al récord actual.

No se deben considerar los resultados como velocidades garantizadas. El ancho de banda depende de la cámara, la pantalla, la distancia, la iluminación, el autofoco, la cantidad de códigos QR mostrados simultáneamente y el rendimiento del dispositivo.

Seguridad y limitaciones

La ausencia de red no implica confidencialidad. Decimen no cifra el flujo QR. Cualquier cámara que vea suficientemente bien la pantalla del emisor puede grabar los cuadros y recuperar el contenido. Para archivos secretos, los datos deben cifrarse por separado antes de iniciar la transmisión.

En el repositorio de GitHub permanece abierto un informe sobre DoS de la pestaña receptora. El problema está relacionado con que el manejador de cuadros acepta los campos k, blockLen y totalLen, pero no verifica su coherencia mutua.

Un código QR especialmente preparado puede indicar k=1, un tamaño de bloque pequeño y totalLen=0xFFFFFFFF. Tras un único cuadro de grado 1, el decodificador considera el bloque recuperado y puede intentar crear un Uint8Array de cerca de 4,29 GB. En un dispositivo móvil, esa operación puede agotar la memoria disponible de la pestaña y provocar su cierre abrupto.

El autor del informe valora el problema como Medium, aproximadamente 4,3 puntos CVSS 3.1. El ataque afecta solo a la disponibilidad. Para explotarlo, el usuario debe dirigir la cámara de Decimen a un código QR preparado, y las consecuencias se limitan a la pestaña receptora del navegador. El informe no describe fugas de datos ni modificaciones de archivos. En el momento de la comprobación el issue sigue abierto y la función de validación de cuadros aún no controla que totalLen coincida con el producto de la cantidad y el tamaño de bloques.

Limitaciones prácticas del canal óptico

La alta densidad de código QR no es adecuada para cualquier cámara. Por defecto, Decimen puede alojar hasta 2953 bytes en un cuadro. Si un monitor normal se lee mal, la documentación recomienda reducir el valor a 1465 bytes y, si es necesario, bajar la frecuencia de envío a 24 cuadros por segundo. También ayudan una pantalla muy brillante, un código QR grande y una cámara inmóvil.

La versión 0.5.x es incompatible con la 0.4.x a nivel de wire format. Al usar el sitio basta con actualizar ambas páginas. Los usuarios de archivos HTML autónomos deben tomar sender y receiver de la misma generación de lanzamientos.

Para quién es Decimen

Decimen está pensado sobre todo para administradores de sistemas, especialistas en seguridad de la información, desarrolladores y usuarios de bancos de ensayo. La herramienta es útil cuando hay que transferir un archivo pequeño desde un dispositivo que no se puede conectar a la red o cuando crear un canal de red separado no está justificado.

El enfoque puede ser útil al trabajar con computadoras aisladas y entornos de prueba. Decimen también resulta interesante como demostración práctica de un canal óptico unidireccional y de métodos de recuperación de datos ante pérdidas de cuadros.

Para la transferencia regular de grandes archivos la herramienta es menos adecuada. La limitación de 64 MiB, la dependencia de la cámara y la pantalla y el ancho de banda reducido respecto a una red convencional hacen de Decimen una solución especializada.

Cómo instalar y ejecutar

El usuario medio no necesita instalar el programa. La aplicación web ya preparada está disponible en decimen.app. En un dispositivo se selecciona el modo Send y el archivo o texto; en el otro se abre Receive, se permite al navegador acceder a la cámara y se apunta al flujo QR.

Tras la primera visita, la PWA almacena en caché los archivos necesarios, incluido el decodificador WASM, y puede funcionar sin red. En Android se puede añadir la aplicación mediante la función de instalación de Chrome; en iOS mediante «Agregar a la pantalla de inicio» en Safari.

Para ejecutar el código fuente se necesita Node.js 24 o superior:

git clone https://github.com/bashalarmistalt/decimen-optical-transfer.git
cd decimen-optical-transfer
npm install
npm run dev

Entre los comandos adicionales están:

npm run serve
npm run diagnostics
npm run benchmark
npm test
npm run build
npm run build:standalone
npm run build:all

npm run build:standalone crea dos archivos HTML autónomos. La página del emisor ocupa unos 55 KB, la del receptor alrededor de 1,3 MB. La mayor parte del tamaño del receptor la compone el decodificador WASM integrado, de unos 940 KB.

El receptor autónomo tiene una limitación. Al ejecutarlo vía file://, Chrome y Firefox de escritorio normalmente permiten el acceso a la cámara, mientras que Chrome y Safari móviles no proporcionan la cámara a un HTML local. Para un smartphone es más cómodo usar la PWA o abrir el receptor mediante HTTP(S).

Análogos y forks

El propio desarrollador menciona varios proyectos con una idea similar. divan/txqr apareció en 2018 y también combina códigos QR animados con fountain coding. El proyecto sz3/libcimbar prescinde de los códigos QR habituales en favor de un formato colorido de alta densidad. Otro proyecto, airgapped-qr-code-transfer, usa la transmisión en el navegador mediante fragmentos QR sucesivos.

Existe además un fork mantenido, tongatron/decimen-optical-transfer. El fork mantuvo la licencia MIT de la antigua base de código y eligió otros compromisos. El límite de archivo es de 2 MiB, pero agregó optimización JPEG, PNG y WebP antes de la transmisión, inserción de imágenes desde el portapapeles, línea de comandos e integraciones con gestores de archivos de Windows, macOS y Linux. El fork evoluciona de forma independiente y no es la versión actual del Decimen principal.

Ventajas y desventajas

Ventajas Desventajas
No se requiere un canal de red entre los dispositivos El flujo QR no está cifrado
No hacen falta cuentas ni emparejamiento de dispositivos Los archivos están limitados a 64 MiB
Los cuadros de recuperación compensan la pérdida de parte de los códigos QR La velocidad depende mucho de la cámara y la pantalla
Se puede usar vía navegador, la PWA o archivos HTML autónomos Los navegadores móviles restringen el acceso a la cámara para el receptor vía file://
Existe verificación SHA-256 de los datos recuperados No hay autenticación integrada del remitente
Admite varios códigos QR simultáneamente El wire format 0.5.x es incompatible con 0.4.x
Se puede exportar el flujo a APNG o a una secuencia PNG Hay un informe abierto sobre DoS por un cuadro especialmente formado
Cuenta con diagnóstico y ejecuciones de referencia reproducibles El protocol.md técnico ahora difiere de la implementación actual del fountain code

Licencia

El Decimen Optical Transfer actual se distribuye bajo la licencia AGPL-3.0-or-later. La transición tuvo lugar en la versión 0.4.0. Los lanzamientos hasta v0.3.0 inclusive se publicaron bajo MIT y mantienen esas condiciones anteriores.

La diferencia tiene relevancia práctica para los desarrolladores. AGPL contiene requisitos copyleft que no están en MIT. En el repositorio también hay componentes y fragmentos con otras licencias compatibles, y un NOTICE documenta su procedencia. Las organizaciones que planeen integrar la base de código actual en productos propios deben tener en cuenta la licencia de la versión concreta y no fiarse de lanzamientos antiguos con MIT o de forks externos.

Conclusión

Decimen Optical Transfer resuelve una tarea estrecha pero clara. La herramienta transfiere archivos mediante el canal físico «pantalla → cámara» y no requiere red directa entre dispositivos. La versión actual v0.5.3 admite archivos de hasta 64 MiB, transmisión con varios códigos QR, PWA sin conexión, compilaciones autónomas, exportación a APNG y PNG y una interfaz en 12 idiomas.

El carrusel sistemático con cuadros XOR de recuperación permite sobrevivir a pérdidas de la cámara sin canal de retorno ni solicitudes de reenvío. A la vez, para lograr altas velocidades se necesitan una pantalla adecuada, una cámara apropiada y una densidad de códigos QR bien ajustada.

Las limitaciones principales se derivan del propio modelo de transmisión. Decimen no cifra el flujo, es inferior a la red y al cable para grandes volúmenes de datos y depende de las condiciones físicas de captura. Además, en la versión actual sigue abierto un informe sobre DoS de la pestaña receptora y uno de los documentos técnicos aún describe la versión antigua del fountain code.

Para bancos de ensayo, computadoras aisladas y transferencias puntuales de archivos pequeños, Decimen ofrece un mecanismo operativo sin conexión de red. Como sustituto universal de la transferencia de archivos convencional el proyecto es menos práctico, pero para el canal óptico unidireccional el conjunto de funciones está bastante trabajado.

Alt text