viernes, 27 de marzo de 2009

El Método LSB ( parte 1 )

La forma más básica para esconder información en imágenes es utilizando el método LSB (del inglés Least Significant Bit, en español bit menos significativo). Desafortunadamente desconozco la referencia del primer trabajo en donde se menciona el uso de este método, si alguno de ustedes la conoce no dude en ayudarme a saberla.

Este método consiste en reemplazar los bits menos significativos de cada píxel con los bits de la información a ocultar.

Como la mejor forma para aprender es mediante un ejemplo, entonces veamos este método en acción.

Tomemos como el medio portador la imagen de Lena, el mensaje que ocultaremos tendrá una longitud de 2048 bits y seguirá el patrón siguiente:

Mensaje = 11111111 00000000 11111111 00000000 ...


Imagen de Lena, usada para ocultar el mensaje

Como se mencionó en la entrada un poco de imágenes, las imágenes están constituidas por una profundidad de color, es el caso de la imagen de Lena es una imagen de 8 bits. Es decir, cada píxel se representa con 8 bits, lo que provoca que la imagen sea de 256 colores (en este caso es en escala de grises) que van desde el negro (0 en decimal ó 00000000 en binario) hasta el blanco (255 en decimal ó 11111111 en binario).

El bit menos significativo (o lsb en minúsculas, para referirnos al bit menos significativo y no al método para ocultar información) determina la paridad de un número. El lsb es conocido también como el bit más a la derecha. En contra parte el bit más significativo o msb, representa el bit más a la izquierda. Por ejemplo en la imagen siguiente se muestra la representación binaria del número decimal 211, el lsb está marcado con color anaranjado y el lsb en color morado. El msb representa un valor decimal de 128 y el lsb un valor decimal de 1.

Representación binaria del número decimal 211, el lsb está marcado con color anaranjado


El plano lsb es la imagen binaria de 1 bit formada por todos los lsb de la imagen. La siguiente imagen representa el plano lsb de la imagen de Lena.

Plano lsb de la imagen de Lena


Ahora veamos los otros planos binarios de la imagen de Lena.

Planos binarios de la imagen de Lena


El método LSB consiste en modificar el plano lsb de la imagen portadora con la marca a ocultar. De esta forma, si sustituimos los bits del plano lsb fila a fila con la marca mencionada anteriormente (la del patrón de ocho ceros y ocho unos) el plano lsb resultante quedaría como se muestra en la siguiente imagen.
Plano lsb marcado

La imagen marcada, es decir la imagen con el plano lsb modificado, se muestra a continuación.
Imagen de Lena marcada usando el método LSB

Es importante notar que si vemos las dos imágenes jutas no podemos percibir cual es la marcada y cual es la original, puesto que sólo se cambió el valor de los píxeles en una unidad, y esto sucede en el peor de los casos. En la siguiente imagen se muestra la imagen de Lena original, la imagen marcada y finalmente la diferencia absoluta de las dos imágenes. En esta última imagen los píxeles de color blanco representan los píxeles que cambiaron de magnitud al realizarse el marcado.
Diferencia entre las imágenes de Lena original y marcada


Estas modificaciones hechas utilizando el método LSB son imperceptibles al ojo humano, sin embargo si se grafica el plano lsb se puede notar fácilmente que "hay algo extraño en la imagen" y no es por el hecho de que nosotros hayamos usamos una marca evidentemente visible anteriormente. Se podría pensar que el plano lsb tiene una naturaleza aleatoria, es decir que no tiene un patrón como los otros planos (i. e. los planos del bit 4,5,6,7 y 8) pero la realidad es otra, el plano lsb si tiene un patrón que depende de la imagen, aunque a simple vista no lo percibamos. Por ejemplo la siguiente figura muestra una imagen y su plano lsb. Aquí se puede notar a simple vista un patrón en el plano lsb.
Patrón en el plano lsb de la imagen Bird


Para evitar que la marca sea detectada a simple vista (esto se considera un ataque visual, como se mencionó en la entrada clasificaciones de las marcas de agua), muchos diseñadores no la esconden linealmente como lo hicimos en el ejemplo descrito, sino la esconden en posiciones dadas por un generador de números pseudoaleatorios, así la esparcen en toda la imagen incrementando la indetectibilidad.

En la siguiente entrada analizaremos más a fondo este método LSB y de igual forma mostraremos unas modificaciones del mismo. Por ejemplo, la modificación para ocultar una imagen dentro de otra, la modificación para detectar cambios hechos en la imagen marcada (integridad) y una modificación para pueda recuperar la imagen original de la imagen marcada (método reversible).

Que estén bien y estamos en contact...

PD. El código fuente (en matlab) del método explicados en esta entrada se enlista a continuación:
1. Método LSB que oculta un mensaje periódico en una imagen bmp.


9 comentarios:

  1. Oies... la continuación de este pa cuando... Nos dejas a medias tintas

    ResponderBorrar
  2. Muy interesante el artículo. Saludos.

    ResponderBorrar
  3. HOla! oye no tienes el mismo método (LSB) pero para la inserción de un mensaje en señales de audio?? si pudieras avisarme porfavor te lo agradecería demasiado......por cierto que buena página creaste muy buenos artículos!!

    ResponderBorrar
  4. Hola amigo, no tengo el método específico para audio... pero te puedo asegurar que es la misma temática: sustituir el bit LSB de la amplitud de la señal o también se puede en la frecuencia(tomando consideraciones adicionales). Ojo, debe ser audio plano sin compresión (p. ej. mp3), como he comentado la compresión puede eliminar la marca. Saludos

    ResponderBorrar
  5. Hola Pedro perolo que no entiendo es cómo hacerle en una señal de audio, osea mi pregunta es que si puedo uilizar el mismo código que tienes pero para una señal de audio??

    De antemano muchas gracias por responder!!

    ResponderBorrar
  6. Hola de nuevo, primero debes saber como se codifica una señal de audio...para encontrar las partes elementales (pj ej. píxeles, en las imágenes) y modificarlas usando LSB. Todo esto en señales de audio sin compresión. Lamento no poder explicarte a fondo pues no conozco como se representa el audio. Recomiendo que primero conozcas el medio que vas a utilizar como portador de la marca, en este caso audio. Saludos

    ResponderBorrar
  7. Hola amigos, una pregunta con respecto a un filtro de imagenes. Como puedo mostrar mediante una imagen solo los bist LSB que aparentemente se usaron para esconder un mensaje?? O sea quiero comparar y ver el comportamiento de dos imagenes (la primera imagen real y la seguna la estego-imagen) mostrarndo solo los bits LSB. Cual seria el algoritmo de filtrado de bits LBS en java? Gracias por tu tiempo....

    ResponderBorrar
  8. Es funcional para todo tipo de imagenes?...estoy realizando un proyecto de estenografia donde usare este metodo para el ocultamiento de informacion desde un file o vaya ocultare practicamente el archivo sino es que estoy mal usando este metodo para lo que lo quiero. Saludos

    ResponderBorrar