Datos personales

Mi foto
Colonia Caroya, Córdoba, Argentina
Ingeniero en Sistemas de Información

05 octubre 2008

Esteganografía Digital


La Esteganografía Digital, básicamente consiste en ocultar un mensaje en un medio, de manera que no sea percibida su existencia. Esta técnica está muy emparentada con la criptografía y suelen usarse conjuntamente, aunque sus objetivos son distintos, en la criptografía se busca codificar y en la esteganografía el fin es ocultar.

Este arte tuvo sus inicios allá por el año 440 antes de Cristo, y siempre muy ligada a los fines militares. Empezó con métodos simples como rasurar la cabeza a alguien, tatuar el mensaje ahí y esperar que crezca el pelo, o la de ocultar el mensaje en la segunda letra de cada palabra, por ej.
Para la Segunda Guerra, ya se disponía de tecnología para poner microfilm en los puntos de las i's o los signos de puntuación en un carta.

Una técnica casera y bastante simple, es por ej, la de escribir una carta común y corriente, y luego escribir el mensaje secreto, en el espacio blanco de la carta, con jugo de limón, después la carta al recibir el calor de la luz de una vela, revelara el verdadero contenido.

Con la llegada de la informática, un mundo de nuevas y sostificadas posibilidades arribo, que no solo permiten ocultar los mensajes de una manera prácticamente perfecta sino que además permiten su rápida distribución.

Las técnicas digitales para estos propósitos son variadas, y consisten en agregar o integrar un documento digital sobre un archivo portador, por ej. un documento de texto, archivo de audio o imagen, por nombrar los más comunes e inocentes.

La forma más simple de hacerlo es "adosar" el documento secreto al archivo transportador. Realizar esta tarea es increíblemente sencilla, y describirla fue el motivo de este post. Para realizarla no necesitamos programas específicos o sofisticados, es mas con cualquier pc en que estemos podremos llevarla acabo.

Veamos un ejemplo de cómo hacerlo:
Creemos un escenario interesante, queremos enviarle un mensaje secreto a nuestro amigo Bin Laden, para invitarlo a comer un asado el próximo finde, obviamente no queremos que nuestros amigos del FBI intercepten esa invitación. Así que luego de meditar e investigar decidimos usar la Esteganografía.

Materiales necesarios:
  • 1 pc con algún Windows o DOS en su defecto...
  • 1 foto inocente, por ej una srta mostrando sus virtudes
  • 1 archivo de texto o word con nuestro mensaje
  • winrar instalado

Pasos:

1) Comprimimos el documento del mensaje con el winrar, sería recomendable, codificarlo con una contraseña segura, ya saben, algo de más de 12 caracteres, con mayúsculas, minúsculas, números y algún símbolo, obviamente el destinatario debe conocer esa clave. Esto será para integrar en cierto modo, la criptografía con la esteganografía.
2) En una ventana de comandos (sino saben abrirla: tecla win + r y ahi escriben cmd y presionan enter) escriben lo siguiente:
copy /b foto.jpg + mensaje.rar foto-msg.jpg

donde:
foto.jpg: es la foto inocente...
mensaje.rar: es el archivo comprimido con nuestro mensaje.
foto-msg.jpg: es el archivo resultante, el que contendrá el mensaje oculto.
copy /b: este comando genera una copia binaria de los dos archivos pasados como parámetros.

Y listo, tenemos nuestra foto "tuneada" listo para enviar por email a nuestro amigo bin.

Si prueban abrir el archivo resultante con el visor de imágenes de windows o su visor preferido veran que muestra la foto original, pero si abren esa imagen con el winrar, verán que les muestra el contenido del archivo comprimido, esto es totalmente transparente para el usuario.

Observaciones:
Como se imaginaran, al realizar este método el archivo con el mensaje oculto tendrá un tamaño igual a la imagen original mas el tamaño del archivo a ocultar, lo cual puede levantar muchas sospechas, por ej, si mandamos un jpg de 800x600 que mida 5mb, por eso es conveniente comprimir el archivo a ocultar para tratar de disimular mas el tamaño.
Este método por ser muy sencillo es mas fácil de detectar, por eso es conveniente codificar el archivo con una contraseña.


Otra alternativa más profesional con un resultado mas difícil de detectar, es la de modificar el bit menos significativo (LSB - less significant bits) de cada byte.

Veamos cómo es esto en una imagen...
Como sabemos una imagen está compuesta por pixeles, cada pixeles está formado por 3 bytes, uno para el rojo, azul y verde. El valor de cada byte da la intensidad del color y la suma de los tres colores da el valor de color que tendrá el pixel.

Un byte es un conjunto de 8 bits, que va del 0 al 255 (en binario 00000000 al 11111111), en binario tanto como en el sistema decimal, los dígitos que están mas a la izquierda tienen más "peso", es decir valor que los que están mas a la derecha.

Es decir si a 9874 le cambiamos el 9 por un 2, nos quedara:

2874

Si en lugar de cambiar el 9 hubiéramos cambiado el valor de más de la izquierda, nos quedaría:

9872

como verán el cambio es menos significativo es su valor numérico mientras más a la izquierda nos vamos.

¿Cómo metemos esto del bit menos significativo con los pixels y con la esteganografía?
Bien... unamos las partes que tenemos, como sabemos un pixel tiene 3 bytes, es decir 3 conjuntos de 8 bits, cada uno de esos conjuntos de bits da el valor de la intensidad del color. Si agregamos acá la idea del bit menos significativo, podemos sacar el bit de más a la derecha, con lo cual destinaremos 7 bits a determinar el color y dejaremos el ultimo para usarlo a nuestro gusto. Con lo cual tenemos 3 bit por pixel, como la unidad mínima de información es un byte, emplearemos 3 pixels por byte, en realidad un poco menos.




Este cambio obviamente producirá un deterioramiento en la calidad de la imagen, ya que 1 pixel con 3 octetos permite mostrar algo mas de 16 millones de colores, y con 3 conjuntos de 7 bits la cantidad de colores que se pueden representar son un poco mas de 2 millones. Lo bueno es que el ojo humano no es tan preciso con la cantidad de colores que puede distinguir, con lo que ver una imagen de 16millones y la misma en 2millones no representara una gran diferencia a nuestro sentido visual.

Como se estarán imaginando la cantidad total de bytes que podremos ocultar con este método está limitada por la cantidad de pixeles que tenga la imagen, con lo cual es muy recomendable usar una imagen con una alta resolución.

Otra ventaja de usar una imagen de alta resolución es que nos permitirá modificar solo algunos pixeles, siguiendo una especie de patrón, mientras más aleatorio parezca ese patrón, mas difícil será reconocer que se está usando el ultimo bit para otro fin...

Veamos un ej. en una imagen:

Y la imagen con sus bits modificados:


Como observan el cambio es casi imperceptible.

Esta técnica no solo es exclusiva del mundo de las imágenes, de una manera análoga se puede implementar con archivos de audios, aunque en este caso la diferencia si puede ser perceptible ya que se pueden sentir ruidos en el audio.

Otras técnicas más eficaces consisten en agregar espacios y tabulaciones a los textos, en los extremos de las líneas, considerando que la mayoría de los procesadores de textos no muestran esos espacios es realmente una técnica muy buena.

Hay otras técnicas muy avanzadas que se fundamentan en los "delays" en una comunicación, se codifica la información por medio de los retardos en los paquetes que se envían, algo como un código morse moderno.

Como dato curioso del uso cotidiano de esto, algunos fabricantes de impresoras como Xerox y Hewlett-Packard han programado algunas de sus impresoras para incluyan en la esquina de cada página un conjunto de puntos amarillos prácticamente imperceptibles a simple vista, en donde se detalla información como la fecha, hora, marca, modelo y nro. de serie de la impresora. Pueden ver una prueba de esto, junto con una aplicación web que les informara que dice ese patrón de puntos, en la siguiente pagina DocuColor Tracking Dot Decoding Guide

Otro uso que están dando las grandes compañías para proteger la propiedad intelectual de sus obras, es la de incluirles marcas de agua, para que sus creadores puedan demostrar su propiedad intelectual o para poder identificar por donde se filtran los contenidos.

Para ver código en C# que aplica técnicas del bit menos significativo, les recomiendo que visiten el siguiente enlace en codeproyect, donde se encuentra una serie de artículos muy bien explicados y con código para descargar, de la programadora alemana Corinna John. Pueden visitar su blog también. Podrán ver ejemplos para aplicar con imágenes, wave audios, midi, assemblies, archivos zip y hasta en cassetes de audio.

Si quieren usar esto sin tener que programar o compilar nada, en este sitio encontraran varios programas de criptografía y esteganografía

Como comentarios finales agrego que lo expuesto aquí es para fines "educativos", si quieren hacer cosas malas tengan en cuenta que The Big Brother tiene en cuentas estas cosas, como pueden ver en la siguiente page

Que tengan un lindo día...

Marce

1 comentario:

Pedro Aarón dijo...

Muy buena entrada Marce,

Buscando el la red encontré tu blog, y precisamente en el mio estoy escribiendo una entrada del método LSB, que aquí magistralmente explicaste :). Te felicito y te invito a visitar mi blog, el cual trata exclusivamente de watermarking (lo acabo de crear :D):

http://watermarkero.blogspot.com/

Saludos cordiales,

Pedro