sábado, 4 de julio de 2009

El Método LSB ( parte 2 )

Recapitulando, el método LSB se caracteriza por lo siguiente:
  1. La información se oculta en los bits menos significativos.
  2. No es un método robusto, puesto que si la imagen marcada es distorsionada se pierde información .
  3. Si se analiza visualmente el plano LSB, se puede notar que "hay algo extraño" (ataque visual), lo que puede provocar que un atacante distorsione la imagen para eliminar la información.
Como dice el tercer punto, cuando se marca una imagen con el método LSB se puede notar a simple vista la distorsión generada al modificar los bits menos significativos como se mostró en la entrada anterior. En dicha entrada se ocultó un mensaje periódico que en la realidad sería muy raro tenerlo. Lo que haremos a continuación es ocultar texto en la imagen. Cada letra del texto será convertido a su valor ASCII (de 8 bits), de esta forma el mensaje que ocultaremos será una serie de números de 8 bits. El mensaje que ocultaremos es la famosa poesía del maestro Mario Benedetti (que recientemente falleció) llamada "no te salves". A continuación escribo un extracto de dicha poesía:

No te salves
Mario Benedetti

No te quedes inmóvil
al borde del camino
no congeles el júbilo
no quieras con desgana
no te salves ahora
ni nunca
no te salves

...

La imagen marcada con la poesía y su plano LSB se muestran a continuación:

Lena marcada con una poesía de Benedetti

Como se puede apreciar existe un patrón de líneas verticales debido a la codificación ASCII que usamos, puesto que muchas letras comparten ciertos bits, como las letras minúsculas que pertenecen a un pequeño rango de la codificación ASCII. La poesía escondida en la imagen consta de 762 Bytes. Si ocultamos 5 veces la poesía en la imagen podremos observar mejor el patrón de líneas verticales generado:

Patrón vertical generado en el plano LSB al ocultar texto

Para evitar este patrón generado al ocultar el texto en la imagen podemos ocultar la marca de manera aleatoria en el plano LSB. Antes de continuar con esta modificación les enlistaré las principales modificaciones que se pueden hacer al método LSB.

Entre las principales modificaciones del método LSB encontramos:
  1. Ocultar la información aleatoriamente en el plano LSB para evitar un ataque visual.
  2. Ocultar la información en bordes de la imagen evitando zonas homogéneas para evitar ataques visuales.
  3. Usar mas planos LSB para ocultar información.
  4. Utilizar el método LSB para detectar cambios hechos en la imagen.
  5. Utilizar el método LSB como un método reversible para extraer la imagen original de la marcada.
La primer modificación consiste en ocultar aleatoriamente los bits del mensaje en la imagen. El camino que tomaremos es el desordenar aleatoriamente la marca. La forma de hacerlo es después de tener el tren de bits de la marca se procederá a desordenarlo usando una llave. Dicha llave será necesaria para reordenar la marca después de extraerla de la imagen marcada. A continuación observaremos la imagen marcada y el plano LSB de la misma. Para ello ocultamos la misma poesía de Benedetti descrita anteriormente.

Lena marcada con un mensaje aleatorio

Nos podemos dar cuenta que un ataque visual no surtiría efecto si ocultamos la marca aleatoriamente puesto que no nos podemos percatar de algún patrón o algo extraño que se vea en el plano LSB. La siguiente imagen muestra la diferencia notable de no usar y de usar una marca aleatoria.

Comparación de los planos LSB marcados usando marcas originales y aleatorias

Otra forma de hacer esta modificación es distribuir la marca aleatoria en todo el plano LSB.

Esta primera modificación evita un ataque visual, pero existe un tipo de ataque estadístico llamado prueba Chi-cuadrada que puede detectar la presencia de la marca dentro la imagen marcada siempre y cuando la marca sea ocultada de forma aleatoria.

En la siguiente entrada describiremos la prueba Chi cuadrada, posteriormente continuaremos con las otras cuatro modificaciones del método LSB restantes.

Saludos a todos.

PD. El código fuente (en matlab) de los métodos explicados en esta entrada se enlistan continuación:
1. Método LSB que oculta un mensaje periódico en una imagen bmp (descrito en la entrada anterior).
2. Método LSB que oculta un texto en una imagen bmp.
3. Método LSB que oculta un texto aleatoriamente en una imagen bmp.

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.


miércoles, 4 de marzo de 2009

Instación de FFmpeg en Mac OS X

Esta entrada es un parentesis entre la entrada anterior y la que pondré después (la de la explicación del Método LSB para ocultar información en imágenes)... La posteo porque ya tenía dicha información escrita y pues como no he escrito nada, no quise dejarlos sin leer un rato jeje...

De esta forma, les describiré la instalación de FFmpeg en Mac OS X y los pasos necesarios para hacerlo y los recursos adicionales utilizados.

Es importante notar que FFmpeg es una colección de software libre que puede grabar, convertir y hace streaming de audio y vídeo (usada en windows, Linux, Mac OS u otros sistemas operativos)...Ojo, podemos utlizar unas librerias de FFmpeg para manipular nuestros videos desde programación en C(libavcodec y libavformat). Para más información acerca de FFmpeg pueden dar clic aqui.

Otra libreria libre y open-source utilizada para la manipulación de video (en Java) es Xuggle... esta libreria es nuevecita de paquete pués la lanzaron este mismo año. Hay que destacar que Xuggle utiliza FFmpeg para realizar dicha labor.

Primero, instalarmos FFmpeg en Mac OS X 10.5.6 en una Intel MacBook Pro. La fuente de información de este post viene en esta página: Installing and using FFmpeg on Mac OS X.

Lo que se pretende hacer más adelante es utilizar las librerias de FFmpeg para poder manipular cada unos de los frames de un video (esconderle información) y regresarlos al video mismo.Para ello, se necesita instalar son las herramientas de desarrollo de apple. Principalmente instalar el XCode 3.1 o superior, viene en el DVD incluido con la Mac o se puede descargar de la página herramientas de desarrollo de apple

A continuación instalaremos FFmpeg y complementos.

Prerequisitos: LAME

Librerias para el manejo de MP3, útil al manipular videos flv. FFmpeg no incluye un codificador MP3, debido a eso usaremos LAME. Los pasos para la instalación bajando los codigos fuentes son los siguientes:

1. Crear un directorio de trabajo en home:

mkdir ~/lame
cd ~/lame


2. Descargar los fuentes de SourceForge. El archivo tiene un nombre como lame-398-2.tar.gz o algo similar. Guardarlos en el nuevo directorio creado (paso 1).

3. Decomprimir los fuentes, usando este comando (hay que estar dentro de la carpeta lame):

tar xvzf lame-398-2.tar.gz

4. La descompresión crea una nueva carpeta: lame-398-2 en la que hay que entrar y seguir con los tres comando típicos en una instalación. Para ello, hay que escribir estos comandos

cd lame-398-2
./configure
make
sudo make install


Cada comando toma cerca de un minuto para completarse. Hay que estar atentos por los errores que se generen, pero por lo general LAME está libre de errores de instalación.

Instalación de FFmpeg en Mac OS X 10.5.6

Instalaremos la versión mas reciente de FFmpeg. (Las versiones 3.1 o superior de Xcode tienen incluido subversion, no es necesario instalar Fink). Los pasos para la instalación son:

1. Crear un directorio de trabajo

mkdir ~/ffmpeg
cd ~/ffmpeg


2. Descargar la versión más actual de FFmpeg vía svn (en nuestro caso se obtuvo la revisión 17451).

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg

3. A continuación, configure y make

./configure --enable-libmp3lame --enable-shared --disable-mmx
make
sudo make install

El parámetro --disable-mmx no se requiere en Power PC. Si se deja en una Intel Mac, probablemente se obtengan algunos errores de compilación, pero esto proveera velocidad.

Felicidades hemos instalado FFmpeg en nuestra Mac. Con esto ya podemos manipular audio y videos (ver tutorial) y mejor aún podemos utilizar las librerias que lo hacen.

Para verificar la instalación correcta basta con abrir la cosola y escribir

ffmpeg

La salida debe ser parecida a esta

FFmpeg version SVN-r17451, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --enable-libmp3lame --enable-shared --disable-mmx
libavutil 49.14. 0 / 49.14. 0
libavcodec 52.16. 0 / 52.16. 0
libavformat 52.29. 1 / 52.29. 1
libavdevice 52. 1. 0 / 52. 1. 0
built on Feb 19 2009 02:52:53, gcc: 4.0.1 (Apple Inc. build 5484)
At least one output file must be specified


Un comando para ver la información de un video llamado video.avi es:

ffmpeg -i video.avi

Después seguiremos con este rollo del manejo de FFmpeg y sus librerias,
Saludos a todos.


miércoles, 18 de febrero de 2009

Un poco de imágenes

Antes de iniciar la explicación del método LSB para ocultar información en una imagen, es conveniente hablar de teoría básica de imágenes digitales. En esta entrada se describirán los aspectos básicos como: tipos de imágenes, resolución, profundidad, modelos de color, etc.

Una imagen digital es una matriz de dos dimensiones (filas y columnas). Cada elemento de la matriz representa un color. Cada elemento es llamado píxel. Este nombre viene de la contracción de las palabras en inglés picture element (elemento de imagen).

píxel=picture element

Nota. Este tipo de contracciones son llamadas portmanteaus. Otros ejemplos son: emoticon, internet, billón, wikipedia, etc.

De esta forma, una imágen está compuesta de píxeles (ojo...se acentúa la i).

La resolución de una imágen digital (tamaño) es la cantidad de píxeles que hay en una imágen. Así, podemos encontrar imágenes de 256 × 256, 640 × 480, 1024 × 768 píxeles, etc. Aquí, la resolución está dada por las filas y columnas de la imagen. Otra forma de expresar la resolución de la imágen es utilizando la cantidad explicita de píxeles en la imágen (multiplicando filas con columnas) en millones de píxeles o megapíxeles (Mpx). De esta forma, existen imágenes de 1 megapíxel, 2 megapíxeles,...,3.1 megapíxeles, etc. Por ejemplo:

Una imagen con resolución de 640 x 480 píxeles se dice que tiene 0.3 Mpx (640 × 480 = 307,200 = 0.307,200 millones de píxeles).

Una imagen con resolución de 2048 x 1536 píxeles se dice que tiene 3.1 Mpx (2048 × 1536 = 3,145,728 = 3.145,728 millones de píxeles).


Un píxel es un elemento de la imágen y cuya magnitud representa un color. Dicha magnitud es en realidad un número entero el cual puede ser representado por un número fijo de bits. El número de bits (o profundidad de la imagen) determina cuántos colores o gamas de gris pueden ser mostrados. Por ejemplo, en una imagen de 8-bits se utilizan 8 bits para cada pixel, permitiendo mostrar 2 elevado a 8 (256) colores diferentes o gamas de gris.

Siendo más específicos, la siguiente imagen (Lena) tiene una resolución de 256 × 256 píxeles y una profundidad de 8 bits en escala de grises. Es decir sólo se puede representar 256 colores, los cuales van desde el negro (magnitud 0) hasta el blanco (magnitud 255), un colo gris tendría una magnitud cercana a 128.

Imagen de Lena

Un acercamiento a una porción de la imagen de Lena (su ojo izquierdo) se muestra en la siguiente figura, en ella podemos apreciar cada píxel en detalle y el valor de cada uno.

Acercamiento a una porción de la imagen de Lena

Para que un píxel represente multiples colores (y no solamente escala de grises) normalmente se utilizan más bits, generalmente 24. Esto permite tener una cantidad de 2 elevado a la 24 colores, es decir, 16,777,216 opciones de color.

Con tantos colores como saber ¿cuál es cuál?, para ello se utilizan los modelos de color. El modelo de color más utlizado es el modelo RGB, otros modelos utilizados son el CYMK, RYB, etc.

Un paréntesis. En esta página se muestran diversos modelos de color. Además se puede descargar un software muy interesante también. Se las recomiendo si quieren profundizar más al respecto.

En el modelo RGB (del inglés Red, Green, Blue; "rojo, verde, azul"), RGB para simplificar, cada color es representado mediante la mezcla por adición de esos tres colores. Por lo general cada uno de ellos tiene una profundidad de 8 bits, es decir que pueden tomar un valor entre 0 y 255 (un total de 256 colores). Con lo que se pueden obtener 256 × 256 × 256 = 16,777,216 colores.

Para indicar con qué proporción mezclamos cada color, se asigna un valor a cada uno de los colores primarios, de manera que el valor 0 significa que no interviene en la mezcla y, a medida que ese valor aumenta, se entiende que aporta más intensidad a la mezcla.

Por lo tanto, el rojo se obtiene con (255,0,0), el verde con (0,255,0) y el azul con (0,0,255), obteniendo, en cada caso un color resultante monocromático. La ausencia de color (lo que nosotros conocemos como color negro) se obtiene cuando las tres componentes son 0, (0,0,0).

La combinación de dos colores a nivel 255 con un tercero en nivel 0 da lugar a tres colores intermedios. De esta forma el amarillo es (255,255,0), el cyan (0,255,255) y el magenta (255,0,255).

Obviamente, el color blanco se forma con los tres colores primarios a su máximo nivel (255,255,255).

El conjunto de todos los colores se puede representar en forma de cubo. Cada color es un punto de la superficie o del interior de éste. La escala de grises estaría situada en la diagonal que une al color blanco con el negro.
Hasta el momento hemos hablado de imágenes fijas o rasterizadas (llamadas también bitmap, imagen matricial o pixmap). Este tipo de imágenes, como se mencionó anteriormente, son representadas por una rejilla (raster) de píxeles y cuyas características principales son el tamaño y la profundidad.

Sin embargo existen otro tipo de imágenes: las imágenes vectoriales. Éstas son formadas por objetos geométricos independientes (segmentos, polígonos, arcos, etc.), cada uno de ellos definido por distintos atributos matemáticos de forma, de posición, de color, etc. Por ejemplo un círculo de color rojo quedaría definido por la posición de su centro, su radio, el grosor de línea y su color. El interés principal de los gráficos vectoriales es poder ampliar el tamaño de una imagen a voluntad sin sufrir el efecto de escalado que sufren las imágenes rasterizadas. Asimismo, permiten mover, estirar y retorcer imágenes de manera relativamente sencilla.


La imagen de la izquierda es un ejemplo en el que se pueden comparar las imágenes vectoriales (columna de la izquierda) con las imágenes rasterizadas (columna de la derecha) al ampliar las respectivas imágenes. Como se puede comprobar, a medida que aumenta el zoom las imágenes de la izquierda mantienen su calidad, mientras que los de la derecha van revelando paulatinamente los píxeles que conforman la imagen. Las imágenes vectoriales pueden ser escaladas ilimitadamente sin perder su calidad. Los dos ejemplos de ampliación al 300% y al 600% ilustran especialmente bien esta propiedad de las imágenes vectoriales: los contornos de las figuras geométricas (franjas blancas detrás de la letra A) no aumentan proporcionalmente en la figura en el caso de la imagen rasterizado.

Con esta breve introducción a imágenes digitales quedan establecidas la bases necesarias para entender el medio en donde ocultaremos información. Sólo nos queda el utilizar las técnicas para esconder información dentro de ellas. Los métodos que se tratarán en este blog utilizaran imágenes fijas.

En la siguiente entrada veremos cómo ocultar información en una imagen rasterizada utilizando la técnica LSB.

Como nota final, de ahora en adelante llamaremos a las imágenes rasterizadas simplemente como imágenes.

Que estén bien :)


lunes, 2 de febrero de 2009

Clasificaciones de las marcas de agua

Existen muchas clasificaciones de la marcas de agua pero las principales se muestran a continuación

De todas estas, nos centraremos en la clasificación por su uso específico. De esta forma, las marcas de agua se pueden usar para evitar detección del mensaje incrustado. Para lograr este objetivo la incrustación del mensaje debe distorsionar poco al medio portador, esto se hace para no levantar sospecha alguna de que hay algo oculto. Por ejemplo, si se esconde información en una imagen y la imagen marcada resulta muy distorsionada, entonces se generarán sospechas de que la imagen ha sido modificada provocando que la imagen sea analizada para ver si existe información dentro de ella. Entonces, para evitar la detección del mensaje incrustado se deben evitar distorsiones en el medio marcado. A las técnicas de marcas de agua encargadas de esto se llaman técnicas de ocultamiento de información.

Las marcas de agua se pueden usar para evitar la eliminación del mensaje incrustado para ello se utilizan las llamadas marcas de agua robustas. Este tipo de marcas de agua resisten ciertos ataques hechos al medio marcado, de esta forma se utilizan para esconder información de protección de derechos de autor y de copia, entre otros.

Las marcas de agua frágiles y semi frágiles son utilizadas para evitar falsificaciones hechas a los medios marcados. Una característica de este tipo de esquemas es, al contrario de las marcas de agua robustas, que no resisten ataques o distorsiones hechas al medio marcado. Si el medio marcado es modificado entonces la marca se pierde, lo que constituye una posible falsificación.

Como podemos ver las cada uno de estos tipos de marcas de agua son utilizados por aplicaciones específicas:
  • El ocultamiento de información es utilizada por aplicaciones en las que se desea mantener la información incrustada en secreto. Es decir, estas aplicaciones requieren un bajo impacto perceptal (pocas distorsiones) para evitar sospechas.
  • Las marcas de agua robustas son utilizadas por aplicaciones que se necesita resistir distorsiones en el medio marcado.
  • Las marcas de agua frágiles y semi frágiles son usadas por aplicaciones que verifican la integridad u originalidad del medio marcado, para ello no resisten distorsiones hechas a los medios marcados.
----------------
Antes de continuar.....Hablemos de ataques
Los ataques se clasifican en:
  • Ataques activos: Distorsionan o modifican el medio marcado para eliminar el mensaje incrustado o evitar que la función de extracción lo encuentre. Ejemplos de estos ataques son: en imágenes: Compresiones son pérdida(JPEG,GIF), filtrados, cambio de contraste, brillo, histogramas, modificaciones geométricas (rotaciones, translaciones, espejo,etc) entre otras.
  • Ataques pasivos: Analizan el medio marcado para determinar la existencia de un mensaje, el tamaño del mismo o simplemente para extraerlo. Ejemplos de estos son los ataques visuales y los ataques estadísticos (Chi-cuadrada).
Más adelante haremos ejemplos de estos ataques.
----------------

Los requerimientos básicos de una aplicación de marcas de agua son tres:
  1. Capacidad: Es la cantidad máxima de información que puede ser ocultada en un medio.
  2. Robustez: Es la capacidad que tiene un algoritmo de marcas de agua para poder extraer el mensaje incrustado del medio marcado después de que éste último haya sido atacado.
  3. Impacto perceptual: Un algoritmo de marcas de agua es verdaderamente imperceptible si no se puede distinguir a simple vista las diferencias entre el medio marcado y el medio original. Aunque esta capacidad es en origen subjetiva, existen métricas para evaluarla. Como ejemplo se tiene a la relación señal a ruido (PSNR), el error cuadrático medio (EMS), la correlación, el error absoluto máximo (MAE), etc. Nótese que para poder evaluar esta capacidad es necesario comparar al medio marcado con el medio original. Como normalmente se distribuye el medio marcado sin el medio portador es suficiente que las modificaciones en el medio marcado pasen desapercibidas para que el algoritmo de marcas de agua utilizado sea considerado como imperceptible.
De esta forma una aplicación hecha para verificar la integridad de imágenes médicas (para evitar modificar ultrasonidos, imágenes de rayos X, etc.) requiere un bajo impacto perceptual, una poca robustez y poca capacidad, es decir se ubicaría en la región más azul (cercana al cruce de ejes) de la gráfica siguiente. Esta gráfica muestra la relación entre estos requerimientos básicos.


Por otro lado, una aplicación para proteger imágenes satelitales (derechos de autor), necesita ser resistente a diferentes esquemas de compresión con pérdida (es decir que la imagen comprimida no es la misma que la imagen original, puesto que existió una perdida en los píxeles e. g. JPEG). Se necesita esta resistencia pues los posibles ladrones de las imágenes, por lo general, saben de la existencia de la marca (mensaje oculto), entonces ellos proceden a tratar de eliminarla modificando el medio marcado, evitando dejarlo muy distorsionado ya que no les serviría. Este tipo de aplicaciones robustas impactan perceptualmente al medio marcado pues se utiliza mucha redundancia de información(repetir muchas veces la misma marca) y métodos que guardan información distorsionando mucho al medio. Hay que notar que la capacidad de este tipo de esquemas es mínima, pues la redundancia decrementa la capacidad. La ubicación de estos esquemas en la gráfica anterior es cercana a la zona amarilla y roja.


Bueno... ya basta de choro mareador (bla bla bla) en la siguiente entrada realizaremos un esquema de marcas de agua para imágenes llamado LSB (least significant bit).

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

sábado, 31 de enero de 2009

Esteganografía vs. Criptografía


La esteganografía y criptografía provienen de vocablos griegos similares, las dos buscan ocultar un mensaje importante de un posible atacador (alguien que desee conocer la información original sin permiso) pero llevan a cabo dicho ocultamiento de forma muy diferente.

La manera más fácil de entender la diferencia de la criptografía y la esteganografía es entendiendo el problema del prisionero (Gustavus J. Simmons, 1983), el cual es:

¿Cómo pueden comunicarse dos prisioneros (e. g. para acordar un plan de fuga) si están en celdas separadas y todos los mensajes que intercambian pasan a través de un guardián?

Primero, la abreviatura e. g. proviene del latín exempli gratia que significa "a modo de ejemplo" o simplemente "por ejemplo". Aclarado lo anterior, la situación es que dos prisioneros se quieren escapar pero el guardián lee todos los mensajes que se manden, así que deben arreglárselas para llevar a cabo el escape. Para hacerlo más interesante a los prisioneros les llamaremos Michael y Linc, mientras que el guardián se llamará Bellick (cualquier parecido con la serie prison break es mera coincidencia). Un diagrama de esta situación se muestra e la siguiente figura


De esta forma, si Michael le manda a Linc el mensaje: "El escape es el sábado tengo todo arreglado...", Bellick descubrirá su plan de escape, lo cual provocaría la destrucción del mensaje y una tremenda putiza , para que se les quiten esas ideas locas de la cabeza.


Pero como todos sabemos que Michael es un erudito y conoce de la criptografía entonces lo que hace es cifrar el mensaje que le envía a Linc (claro esta!, Linc conoce como descifrar el mensaje) para que Bellic no lo entienda. Pero Bellick al ver el mensaje cifrado, sospecha y lo destruye, evitando nuevamente su escape . Y como se imaginarán, Bellick les dará una putiza para saber que se andan tramando.



Ojo!...encriptar y desencriptar no es lo mismo que cifrar y descifrar, esas dos primeras palabras tienen que ver con criptas.



Otra alternativa que puede tomar Michael es utilizar la esteganografía para esconder el mensaje, pero ahora lo haría de una manera tal que dicho mensaje se escondería dentro de otro mensaje menos importante, es decir un medio portador inocuo. Así, Michael le manda a Linc el siguiente mensaje:

Bellick al leer el mensaje piensa que no hay nada extraño y lo deja pasar a Linc. Sin embargo, esta nota tiene un mensaje oculto el cual se puede observar en la siguiente imagen

Con esto, Michael y Linc planean el escape de la prisión sin levantar sospecha alguna. Ahora imaginemos un escenario pero ahora en nuestros días. Bellick es un Hacker famoso y está analizando todos los mensajes que envían Michael y Linc. Si se utiliza la criptografía Bellick trataría de romper dicha codificación para obtener la información oculta, en cambio si se utiliza la esteganografía Bellick no sabría que existen mensajes encubiertos en dicha comunicación, manteniendo el secreto a salvo. Es importante mencionar que un sistema estaganográfico o de marcas de agua utiliza la criptografía (cifrando el mensaje que se oculta) para obtener una mayor seguridad, por si logran romper el esquema de marcas de agua.


Con este ejemplo se puede notar la diferencia sutil de como ocultan la información estás dos disciplinas. Podemos concluir que el objetivo de la esteganografía es pasar desapercibida y el de la criptografía es evitar ser decodificada (o descifrada).

Antes de terminar, existe un tipo de esteganografía que soporta distorsiones en el medio marcado, a ésta se le conoce como esteganografía robusta. Por ejemplo, imaginemos que el cabrón de Bellick se le ocurre cambiar unas palabras del mensaje marcado (el que tiene información oculta). Si utilizáramos el método anterior nuestro mensaje oculto se perdería, mientras que si utilizáramos un método robusto, nuestro mensaje puede resistir este ataque de modificación.

Muchos autores llaman a la esteganografía robusta como marcas de agua. Hay que notar algo muy importante, tanto la esteganografía y las marcas de agua son métodos que ocultan información dentro de un medio... en principio son iguales, de hecho nosotros las tratamos como semejantes, pero muchos autores las toman como diferentes por la capacidad de resistencia ante ataques.

En la siguiente entrada hablaremos de una pequeña clasificación de la esteganografía.

viernes, 30 de enero de 2009

Watermarkero, ¿qué diablos es eso?

Un watermarkero es una persona que ha hecho algoritmos de watermarkingWatermarking es el nombre de técnicas que ocultan mensajes dentro medios. En español, esas técnicas son conocidas como marcas de agua. Así, cuando nos encontremos con términos como "método de marcas de agua", "esquema de marcas de agua", "algoritmo de marcas de agua", "sistema de marcas de agua" o simplemente "marcas de agua" sabremos que se refieren a métodos que ocultan información en un medio.

El término watermarkero no existe en nuestro español, pero al ver que no hay uno que designe a dichas personas me he tomado el atrevimiento de crearlo. Antes de continuar, mi nombre es Pedro Aarón Hernandez Ávalos y soy un watermarkero desde hace unos años (desde 2007).


Las marcas de agua describen técnicas para esconder un mensaje dentro de un medio. El mensaje puede ser variado: número de serie, texto, imagen, bits, etc. Cualquier medio puede ser un mensaje, les adelanto que normalmente se ocultan bits de datos, nosotros le daremos el sentido de información a esos datos. De igual manera, el medio portador (en donde se ocultará el mensaje) puede ser una imagen, un video, un clip de audio, texto, etc. Así, podemos concluir que podemos esconder un medio dentro de otro medio.


Otros nombres de las técnicas de marcas de agua son: técnicas esteganográficas, técnicas de ocultamiento de información (information hiding) o técnicas de incrustamiento de datos (data embedding).


Antes de continuar, tengo que aclarar que la forma antigua (y actual, pero menos utilizada) de llamar a las marcas de agua es esteganografía. Esta palabra tiene las raíces griegas:
steganos = esconder, encubrir
graphos = escribir

Lo cual forma el significado de "escritura encubierta o escondida". Esta palabra antigua tiene casi el mismo significado de otra palabra muy conocida: criptografía. La cual proviene de los vocablos griegos:
Kryptos = ocultar
graphos = escribir

esto junto significa "escritura oculta". Pero no hay que confundirlas, porque cada una de estas disciplinas tiene formas de ocultar la información muy específicas. Por ejemplo, la criptografía oculta información al distorsionar un mensaje, lo deja ilegible. De esta forma se evita que un atacante pueda conocer la información original. 

La esteganografía y la criptografía son técnicas diferentes que comparten el significado sus nombres.

En la siguiente entrada del blog les mencionaré, con un ejemplo muy intuitivo, la diferencia entre la esteganografía y la criptografía. 

Estamos en contacto.
P.