
Herramienta de almacenamiento esteganográfico y cifrado de archivos

tird y tirdFStird /tɪrd/ (acrónimo de "this is random data") es una herramienta de cifrado de archivos que minimiza los metadatos y oculta los datos cifrados.
Con tird, puedes:
tirdFS) dentro de archivos contenedores y dispositivos de bloque. A diferencia de VeraCrypt y Shufflecake, los contenedores tirdFS no contienen cabeceras; el usuario especifica las ubicaciones de los datos dentro del contenedor y es responsable de mantener esas ubicaciones separadas. Cualquier región de aspecto aleatorio de un archivo o dispositivo de bloque puede utilizarse como contenedor.tird ofrece negación plausible incorporada, incluso cuando los archivos cifrados se almacenan fuera de contenedores. También ayuda a resistir ataques coercitivos de divulgación de claves (criptoanálisis por coerción, xkcd 538).
[!ADVERTENCIA] Antes de usar
tird, lee la sección "Advertencias". La seguridad no depende solo de la herramienta, sino de tus acciones: almacenamiento seguro de claves, operar en un entorno seguro y evitar el modo de depuración con datos reales.
Se planea la estabilización del formato y una especificación formal para la v1.0.0.
No necesitas memorizar las opciones de la línea de comandos para usar tird. Esta herramienta cuenta con una CLI basada en indicaciones: simplemente iníciala, selecciona una opción del menú y responde las preguntas que seguirán.```
$ tird
MENU
———————————————————————————————————————————
0. Exit 1. Info & Warnings
2. Encrypt 3. Decrypt
4. Embed 5. Extract
6. Encrypt & Embed 7. Extract & Decrypt
8. Create w/ Random 9. Overwrite w/ Random
———————————————————————————————————————————
A0. SELECT AN OPTION [0-9]:
## Opciones de entrada
Hay 4 grupos de opciones de entrada: A (Acción), D (Datos), K (Claves), P (Proceder). Están numerados para facilitar la descripción.```
+——————————————————————+————————————————————————+
| A0. SELECT AN OPTION | A. Select an action |
+——————————————————————+————————————————————————+
| D1. INPUT FILE PATH | |
| D2. COMMENTS | D. Enter data, |
| D3. OUTPUT FILE PATH | data location, |
| D4. OUTPUT FILE SIZE | data size |
| D5. START POSITION | |
| D6. END POSITION | |
+——————————————————————+————————————————————————+
| K1. KEYFILE PATH | K. Enter values |
| K2. PASSPHRASE | related to |
| K3. TIME COST | key derivation |
+——————————————————————+————————————————————————+
| P0. PROCEED? | P. Confirm to continue |
+——————————————————————+————————————————————————+
Se puede encontrar una descripción detallada de estas opciones con ejemplos aquí.
La carga útil que se cifrará durante la creación del cryptoblob consiste en:
Especificar la carga útil en la interfaz de usuario se ve así:``` D1. FILE TO ENCRYPT (OPT): files.zip I: path: 'files.zip'; size: 2,824,230,648 B (2.6 GiB) D2. COMMENTS (DEFAULT='files.zip'): The X-Files, zip (секретные материалы) I: comments will be shown as ['The X-Files, zip (секретные материалы)']
## Material de introducción de claves
`tird` ofrece la opción de usar el contenido de archivos de clave y una frase de contraseña para derivar claves de un solo uso.
- **Archivos de clave (opcional):** Cero, uno o múltiples rutas de archivos de clave; el orden de las entradas no importa. Una ruta de archivo de clave puede ser:
- Un <ins>archivo normal</ins>. El contenido del archivo de clave será sometido a hash, y su resumen se usará para un mayor estiramiento y derivación de claves.
- Un <ins>dispositivo de bloque</ins>. Se maneja igual que un archivo de clave normal: el contenido se someterá a hash.
- Un <ins>directorio</ins>. Todos los archivos dentro del directorio serán sometidos a hash y usados como archivos de clave.
- **Frase de contraseña (opcional):** Hasta 2048 bytes después de la normalización [Unicode](https://www.unicode.org/reports/tr15/) (forma C); puede omitirse.
Especificar IKM en la interfaz de usuario se ve de la siguiente manera:```
K1. KEYFILE PATH (OPT): key
I: path: 'key'; size: 32 B
I: reading and hashing contents of 'key'
I: keyfile accepted
K1. KEYFILE PATH (OPT):
K2. PASSPHRASE (OPT):
K2. CONFIRM PASSPHRASE:
I: passphrase accepted
Para más detalles, consulta la especificación.
Aunque el contenido de un mensaje cifrado está protegido, su tamaño, su procedencia, su destino… no lo están. Los datos están ocultos, los metadatos son visibles. A veces, eso es todo lo que tu enemigo necesita para descubrir tus secretos.
Matamos personas basándonos en metadatos.
![]() Vs. ![]() |
|---|
tirdFS — Sistema de archivos esteganográfico impulsado por el usuariotird emplea una técnica que se describe de la siguiente manera:
Ocultar datos dentro de datos cifrados o dentro de datos aleatorios. El mensaje a ocultar se cifra, luego se usa para sobrescribir parte de un bloque mucho más grande de datos cifrados o un bloque de datos aleatorios (un cifrado irrompible como la libreta de un solo uso genera textos cifrados que se ven perfectamente aleatorios sin la clave privada).
Puedes cifrar archivos e incrustar criptoblobs en contenedores comenzando en posiciones arbitrarias. Después de escribir el criptoblob, deberás recordar su ubicación en el contenedor (las posiciones inicial y final), que se usarán más tarde para extraer los criptoblobs. De esta manera, puedes crear tirdFS — sistema de archivos oculto, sin cabecera, impulsado por el usuario dentro de un contenedor:
tirdFS no es un sistema de archivos montado con estructuras de metadatos internos. Es un modelo de almacenamiento oculto gestionado por el usuario construido a partir de criptoblobs colocados independientemente.
Cualquier archivo, disco o partición más grande que el tamaño mínimo de criptoblob (1160 B) puede ser un contenedor válido. Los criptoblobs pueden incrustarse en cualquier área.
Ejemplos de contenedores válidos incluyen:
Ejemplo de estructura de contenedor:``` +—————————+—————————————+ <— Position 0 of the container | | | | | Random data | | | | | +—————————————+ <— Cryptoblob1 start position | Header- | | | less | Cryptoblob1 | | | | | Layer +—————————————+ <— Cryptoblob1 end position | | Random data | | Cake +—————————————+ <— Cryptoblob2 start position | | | | | Cryptoblob2 | | | | | +—————————————+ <— Cryptoblob2 end position | | Random data | +—————————+—————————————+
**Encabezado gestionado por el usuario**
Un encabezado de texto `tirdFS` gestionado por el usuario podría verse así:```
[100000000:100345765] secret_video.mp4
[100345765:234765345] various_secrets.zip
[12654876456:14765345098] Epstein_files_part1.zip
Eso es, debería contener típicamente la ubicación de cada criptobloque en el contenedor más un breve comentario. Sin embargo, el usuario es libre de determinar cómo almacenar las posiciones y qué incluir en dicho encabezado.
La siguiente imagen visualiza lo difícil que es distinguir una entrada de datos aleatoria de otra y el proceso de incrustar criptobloques en un contenedor.
Contenedor vacío con datos aleatorios:

Un criptobloque incrustado en el contenedor:

Dos criptobloques incrustados en el contenedor:

Tres criptobloques incrustados en el contenedor:

Animación: visualización de la incrustación:

Llévalo a todas partes. Es tu derecho.
Por favor, observe la siguiente captura de pantalla.
Parece que este volumen de 16 GB contiene solo un archivo de 8.7 MiB. ¿Es realmente cierto? Quizás sí, quizás no.
El sistema de archivos nos dice que aquí solo hay un archivo. Pero ¿realmente solo hay un archivo en el volumen? No podemos determinarlo usando el sistema de archivos. De hecho, los datos pueden estar ubicados fuera del sistema de archivos y ser indetectables por las herramientas del sistema de archivos. Los 15.2 GiB de espacio marcados como libres pueden estar ocupados por un sistema de archivos oculto. Este espacio "libre" podría estar ocupado por datos cifrados ocultos.
¿Podemos refutar la existencia de estos datos? Sí, por ejemplo, examinando el nivel de entropía de este espacio libre usando binwalk. Una entropía baja indica una probable ausencia de datos ocultos. Una entropía alta no, por sí misma, prueba la presencia de datos cifrados ocultos. Las áreas con alta entropía pueden ser solo datos residuales o datos cifrados ocultos.
Si está interesado en ocultar datos fuera del sistema de archivos visible, entonces tird está a su servicio para proporcionar una Capa de Invisibilidad para sus archivos.
El cifrado con bloqueo de tiempo (TLE, por sus siglas en inglés) se puede utilizar para evitar que un adversario acceda rápidamente a los textos planos en caso de compromiso de la IKM (en caso de coacción del usuario, por ejemplo). En nuestra implementación, es en realidad una derivación de clave con bloqueo de tiempo basada en PoW. La opción de entrada "Time cost" especifica el número de pases de Argon2. Si especifica un número suficientemente alto de pases, llevará una cantidad significativa de tiempo realizarlos. Sin embargo, un atacante requerirá la misma cantidad de tiempo al usar hardware similar. La ejecución de Argon2 no se puede acelerar mediante paralelización, por lo que se espera que el tiempo empleado por un atacante sea aproximadamente el mismo que el empleado por el defensor.
Esta implementación de TLE funciona sin conexión, a diferencia de tlock.
Establezca el valor deseado de TIME COST:```
K3. TIME COST (DEFAULT=4): 1000000
I: time cost: 1,000,000
W: decryption will require the same "TIME COST" value!
**TLE verosímil:** El adversario no conoce el valor real del costo de tiempo, por lo que puedes tergiversar de forma verosímil el número de pasadas. El adversario no puede refutar tu afirmación hasta que intente descifrar el cryptoblob utilizando el valor de costo de tiempo especificado.
## Opciones de línea de comandos
`tird` no requiere opciones de línea de comandos para uso normal.```
$ tird --help
tird v0.30.0
A tool for encrypting files and hiding encrypted data.
Homepage: https://github.com/hakavlad/tird
Usage:
tird [--unsafe-debug] [--unsafe-decrypt]
Start without options for normal usage.
Options:
--help print this help message and exit
--unsafe-debug enable unsafe debug mode
--unsafe-decrypt release plaintext even if MAC verification
failed (dangerous)
Examples:
$ tird
$ tird --unsafe-debug
[!ADVERTENCIA] ¡El modo de depuración no está diseñado para usarse en producción!
Inicie tird con la opción --unsafe-debug para ver el funcionamiento interno mientras el programa se ejecuta.
Habilitar el modo de depuración muestra adicionalmente:
[!ADVERTENCIA] ¡En este modo, el texto plano devuelto puede haber sido modificado o sustituido por un atacante!
En el modo de descifrado inseguro, tird liberará texto plano incluso si la autenticación falla. Úselo solo si prioriza la disponibilidad sobre la integridad, cuando no pueda descifrar con éxito un criptoblob en modo normal.
tird no admite:
tird no proporciona:
tird no puede manejar (cifrar/incrustar) más de un archivo en una sola pasada. No se admite el cifrado de directorios y múltiples archivos.tird no desinfecta los metadatos del sistema de archivos (atime, mtime, ctime).tird no es muy alta (hasta 730 MiB/s en mis pruebas en hardware moderno).La criptografía puede ayudar, pero no lo salvará del mal uso, vulnerabilidades, ingeniería social o amenazas físicas.
tird no ha sido auditado de seguridad de forma independiente por humanos.tird es ineficaz en un entorno comprometido; ejecutarlo en tales casos puede causar filtraciones de datos desastrosas.tird sea efectivo cuando se usa con claves cortas y predecibles.tird no borra sus datos sensibles de la memoria después de su uso; las claves pueden persistir en la memoria después de la salida del programa.tird no ordena los resúmenes de los archivos clave y las frases de paso en tiempo constante.tird protege los datos, no al usuario; no puede evitar la tortura si está bajo sospecha.HKDF y una implementación rápida de ChaCha20)Argon2 y BLAKE2)tird(1)Mejorar la documentación.
No dude en hacer preguntas, dejar comentarios o proporcionar críticas en la sección Discusiones.