Desempolvado: Esteganografía básica

Ya, sé que tengo esto un poco abandonado.

Ahora presento un post que escribí hace unos años, yo era joven, inocente, imberbe y programaba en C/C++ 🙂

Concretamente el post lo publiqué el día 13 de mayo de 2007, en el blog soloenviernes.com de mi colega y compañero vruiz en el cual yo colaboraba.

 

Sin mucho rollo, aquí lo pego tal cual lo colgué en su día, que pese a su antigüedad sigue siendo igual de interesante.

— 

Estos días he estado trasteando con esta fascinante ciencia/arte de ocultar datos en información aparentemente “inofensiva”, sin embargo no he encontrado mucho escrito sobre el tema.

Concretamente me he interesado en la ocultación de texto e imágenes dentro de otras imágenes, algo que me resultó bastante curioso.

Paso a explicar estos métodos, el referente a imágenes lo saqué de esta página de Wikipedia y el segundo, el de ocultación de texto es una copia del anterior pero con unas modificaciones hechas por mi, no se si existe o lo he inventado yo por que no he visto nada refente a este método.

Los métodos consisten basicamente en ocultar información tras el “ruido” de imágenes RGB, para ello no podemos usar formatos de imagen con pérdidas, por eso los formatos que yo he usado son PNG y PPM, el primero para colgar las imágenes en Internet y el segundo para modificar las imágenes ya que no utiliza ningún tipo de compresión y el código RGB está escrito en “bruto”, además el año pasado hicimos una biblioteca en una práctica que trabajaba con dicho formato entre otros y que puedo volver a utilizar.

Todos sabemos en las imágenes RGB cada píxel viene definido por tres bytes (rojo, verde y azul), por ejemplo tenemos los siguientes valores que corresponden a un píxel de una imagen.

Píxel en hexadecimal: 3E D2 97

En binario: 00111110 11010010 10010111

El método se basa en que el valor de los últimos y menos significativos bits es imperceptible al ojo humano, es decir, nosotros veríamos igual el píxel anterior que este: 00111101 11010001 10010100

donde he cambiado los dos últimos bits, pues bien, con todos los últimos bits de todos los píxeles de una imagen tendremos un gran juego para escribir cualquier mensaje o incruso incrustar imágenes, algo asombroso.

Es lo bonito de éste método de esteganografía, ya que no modifica el tamaño de la imagen ni deja marcas sospechosas dentro de la misma.

Esto también depende de los bits de profundidad, ya que no será lo mismo modificar los 2 últimos bits que los 6 últimos, un nivel de profundidad alto puede provocar sombras y cosas “extrañas” en la imagen, por eso nosotros utilizaremos 3 ó 2 últimos bits.

Entonces, ¿cómo se ocultarían imágenes? Muy fácil, teniendo las dos imágenes en formato “bruto” modificamos los últimos bits de la imagen portadora y les ponemos el valor de los primeros de la imagen que vamos a ocultar, por ejemplo con 2 bits de profundidad:

Un píxel de la imagen portadora: 00111110 11010010 10010111

Un píxel de la imagen a ocultar: 10100110 00101001 11110011

El nuevo píxel quedaría: 00111110 11010000 10010111

Para el proceso inverso simplemente cogemos esos 2 bits y los ponemos al comienzo del nuevo byte y todo lo demás a 0:

El píxel de la imagen portadora: 00111110 11010000 10010111

El píxel de la imagen revelada: 10000000 00000000 11000000

La verdad es que se pierde bastante definición en la imagen ocultada y no todas las imágenes dan el mismo resultado, sin embargo, es bastante curiosa esta forma de ocultar información.

Esta bonita estampa oculta un secreto
Esta bonita estampa oculta otra imagen con una profundidad de 2 bits.
Imagen oculta
Imagen ocultada tras el paisaje mediante esteganografía

 

 

 

 

 

 

 

 

Ahora paso a describir como trabajaría el método para el texto, imagine una cadena de caracteres como una secuencia de bits, por ejemplo:

La cadena ABC en binario sería: 01000001 01000010 01000011, suprimiendo los espacios: 010000010100001001000011

Para ocultar el texto sólo tenemos que almacenar la secuencia de bits de forma consecutiva en los últimos bits de los bytes del fichero portador, ejemplo almacenando la secuencia 010000 (principio de la secuencia anterior) con 2 bits de profundidad:

Un píxel de la imagen portadora: 00111110 11010010 10010111

Secuencia: 010000, sepando de 2 en 2: 01 00 00

El nuevo píxel queda: 00111101 11010000 10010100

De esta forma podremos almacenar una cadena de texto bastante grande en una imagen, concretamente en una imagen de dimensión 200×200 que contiene 200×200=40000 píxeles con 3 valores por píxel podremos almacenar 120000/8=15000 caracteres y sólo modificando el último bit de cada valor RGB, lo que constituye un texto bastante extenso.

Quijote
Esta imagen oculta el primer párrafo del Quijote con una profundidad de 1 bit.

Como ejemplo he desarrollado dos aplicaciones ppm_steg y ppm_desteg utilizando la biblioteca que desarrollamos el año pasado en la asignatura MP2 de la UGR, imagenES para E/S de imágenes PPM.

Dejo aquí el enlace al código que incluye un LEEME bastante completo.

Una cosa más; si ocultásemos un texto encriptado con GPG o cualquier otro sistema de encriptación, entonces se convirtiría en un método para transmitir información totalmente seguro, ¿no creeís?

También tengo que decir que hay rumores de que grupos terroristas como Al-Qaeda utilizan estos sistemas para transferir información burlando a los sistemas de espionaje de Internet.

Espero que os haya gustado esta breve exposición sobre este apasionante tema.

Saludos.

Un gran número de parejas jóvenes que se enfrentan a varios problemas de salud, tales personas pueden comprar medicamentos en línea sin orden. Antibióticos de penicilina muy populares que combaten las bacterias. Estos remedios no tratan una infección viral por ejemplo un resfriado común. Vamos a hablar por teléfono de numerosas drogas existe. Kamagra es un remedio usado para tratar varias quejas. ¿Qué sabes sobre todo “Comprar Kamagra Oral Jelly“? Actualmente muchos hombres buscan la frase exacta “comprar kamagra 100mg” en Internet. (Leer más “Kamagra Oral Jelly“). Debido a que algunos de los problemas sexuales son emergencias médicas, es bueno conocer los síntomas. Ciertas personas que usan este medicamento generalmente no tienen efectos secundarios graves Kamagra. El farmacéutico necesita resolver qué dosis es la mejor en su caso. Si el medicamento se usa según sea necesario, es poco probable que esté en un horario de dosificación.

  • Los enlaces estan cerrados
  • Comentarios (2)
    • Ricardo
    • 10 noviembre 2011 11:14pm

    Tu siempre serás un imberbe, me alegra que vuelvas y continues dandole caña que todos queremos y debemos aprender mucho de ti.

    To flama hermano!!!

    • dugo
    • 14 noviembre 2011 11:23am

    Muchas gracias Ricardo por pasarte por aquí y dejar tu huella :))

    Bienvenido seas!

    Un abrazo!!

Los comentarios estan cerrados.