Aquí os dejo un resumen de algunos de los truquillos que he aprendido para insertar información secreta en archivos digitales. Esto se conoce como esteganografía, no confundir con criptografía .
El estego-mensaje no tiene que estar necesariamente cifrado, aunque muchas veces así sea. El objetivo es insertar (embeber) en un archivo portador del formato que queramos (audio, video, texto…) el mensaje oculto, de manera que alguien que tuviera el archivo portador podría no saber ni siquiera de la existencia del mensaje insertado. Hay dos tipos de técnicas esteganográficas principales:
+ Esteganografía pura: No requiere una clave. Se basa en la idea de que, en un canal inseguro pinchado, el que lo tenga en escucha desconoce el algoritmo de inserción empleado. No es muy recomendable dado que, para empezar, existen programas para reconocer algoritmos de inserción que hayan sido empleados sobre archivos.
+Esteganografía con clave: En esta vertiente el algoritmo de inserción se parametriza con una clave previamente conocida por ambas partes de modo que si un tercero se hiciera con el archivo, tendría más dificultades para extraer la información al desconocer la clave. (Para eso se puede usar bruteforce y un diccionario). Este es el tipo más común.
La herramienta que voy a mostrar es steghide (sudo apt-get install steghide). Es bastante común y su uso es sencillo:
Para esconder por ejemplo un archivo de texto llamado “contraseñas.txt” en una imagen llamada “wallpaper4.jpg” habría que hacer:
~$ cd <carpeta que los contenga>
~$ steghide embed -ef contraseñas.txt -cf wallpaper.jpg
Y para extraerlo de nuevo:
~$ steghide extract -sf wallpaper.jpg -xf archivo
Donde nos volverá a pedir el passphrase
Pero, ¿cómo funcionan estos programas que insertan información oculta? Los algoritmos tienen sus diferencias pero la idea principal es esta:
Si el mensaje que nosotros queremos ocultar es, en bits: 00100001 debemos sustituir el bit menos significativo a 8 bytes del archivo portador. Una vez el algoritmo escoge estos 8 bytes tenemos:
01110011 01101111 01100010 01100001 01100100 01101111 00001101 00001010
Y a su LSB (less-significant bit o bit menos significativo, el que esté más a la izquierda en cada byte) es sustituido por el que le corresponda del mensaje a ocultar. Quedando:
01110010 01101110 01100011 01100000 01100100 01101110 00001100 00001011
El receptor extraería esos bits y los volvería a juntar de cierta manera. Nótese que el archivo original y el final no tienen por qué sufrir ninguna modificación, al fin y al cabo, se podrían escoger bytes cuyos less-significant bits coincidieran con cada bit a ocultar. Por eso buscar la imagen original en Internet podría ser inútil, de todos modos una buena herramienta para ello es tineye.
Una posible manera de encontrar información oculta es con StegDetect
Su uso es sencillo. Como dice en el ejemplo del GitHub:
for img in `find /path/to/images/ -iname “*jpg“`; do ./stegdetect -tF $img; done
Si en cambio preferís ocultar vuestra información en un archivo de audio podéis usar por ejemplo MP3Stego
También podéis guardarlos en textos con pleno sentido sintáctico y semántico con el Proyecto Stelin
Un saludo, Zildj1an