Autor/es: Jesús R. Peinado, Óscar Sánchez del Árbol, Carlos Martínez de la Cruz, Salvador Gutiérrez Salcedo, Alvaro Cantos Carrillo
Última revisión: Noviembre de 2010
Ver texto continuo



Introducción

La esteganografia es una tecnica criptografica por la cual se puede ocultar informacion u objetos en otros sin que se pueda percibir su presencia

Formato OGG

Ogg es un formato de archivo contenedor multimedia capaz de almacenar datos de vídeo, audio, subtítulos, secciones, escenas y meta-datos (autores, fechas de modificación, etc). Desarrollado de principio a fin por la fundación Xiph.org, es un formato libre de patentes, y orientado a la reproducción de códecs multimedia como Theora, Vorbis, FLAC, Speex o IceCast (desarrollados también por Xiph.org).

Por tanto, la elección del formato no ha sido a la ligera: el hecho de ser un formato libre, tener detrás una gran comunidad y una fundación en continuo movimiento, hace que la documentación sea suficientemente amplia y adecuada; además, la posibilidad de trabajar con un formato de compresión alto y orientado al streaming hace que el interprete (la reproducción) sea más flexible.

Estructura del archivo

Estructura lógica

La estructura lógica de un fichero ogg está estructurado en paquetes, vectores codificados en crudo, es decir, sin formato. ¿Por qué no lleva un formato? Digamos que así es mucho más simple trasmitir datos en streaming, debido a que el formato no se corrompe con facilidad.

Los paquetes se agrupan en páginas lógicas, que a su vez forman un bitstream lógico. Estos bitstream lógicos se agrupan en bitstream físicos, multiplexando a nivel de página los bitstream lógicos y añadiendo (de forma opcional) una cabecera que sirve como identificación.

Estructura fisica

Nos centraremos principalmente en la estructura física. Un fichero Ogg es al fin y al cabo un contenedor multimedia estructurado en páginas. Cada una de estas páginas, de tamaño variable, tiene una cabecera y los datos en bruto, sin estructura física (aunque como vimos anteriormente se estructura lógicamente en paquetes).

La cabecera de cada página tiene el siguiente formato.

Cabecera

  • 4 bytes, para la identificar que es una página de Ogg, y que siempre tienen el valor “OggS”.
  • 1 byte, de versión.
  • 1 byte, indicador de colocación dentro del bitstream.
  • 6 bytes, posición absoluta de los datos, que coincide con el total de muestras codificadas (incluyendo todos los paquetes de la página a la que corresponde la cabecera).
  • 4 bytes, número identificador del bitstream lógico.
  • 4 bytes, un contador de páginas (usado para comprobar que no se escapó ninguna página).
  • 4 bytes, CRC, comprobación de errores; se realiza sobre la totalidad de la cabecera y los datos de la página.

Indice

  • 1 byte, indica el número de paquetes de la página
  • En adelante, habrá un byte por cada paquete (habrá tantos bytes en este índice indica el byte anterior) que contiene el tamaño de cada paquete. El máximo, por tanto, que podrá contener cada paquete será 255 bytes, o lo que es lo mismo: FF.

Digamos entonces que tanto las páginas, los paquetes y las cabeceras de cada página, son de tamaño variable. Es decir, no hay una medida fija ni en el tamaño de las páginas, ni dentro de los paquetes o la estructura de estos, lo que hace que para saber la posición que se ocupa en cada lectura del archivo, sea necesario leer los indices de las páginas e ir realizando los cálculos, ya que la estructura de los datos de los paquetes de cada página están en crudo, es decir, de forma secuencial sin formato concreto.

Codec

Hemos descubierto que modificando físicamente el archivo a nivel de página e introduciendo nuevas páginas no es necesario contemplar el códec. Gracias a esto no tenemos que preocuparnos de los posibles efectos que tendrá la introducción de código en los nuevos archivos, ya que el códec los considerará basura y no los tendrá en cuenta en la reproducción.

Vorbis

Vorbis es un códec de audio perceptivo de fines generales previsto para permitir flexibilidad máxima del codificador, permitiéndole escalar competitivamente sobre una gama excepcionalmente amplia de bitrates. Ogg Vorbis es totalmente abierto, libre de patentes y de regalías; la biblioteca de referencia (libVorbis) se distribuye bajo una licencia tipo BSD por lo que cualquiera puede implementarlo ya sea tanto para aplicaciones propietarias como libres.

El uso de Ogg Vorbis ha crecido a gran velocidad en los últimos años desde su refinamiento hace unos seis años (en 2004). Aplicaciones de streaming audio como Spotify utilizan el formato Ogg en versión Premium, mientras que un buen número de sitios web, como Jamendo o el bloque de la fundación WikiMedia (Wikipedia, Wiki Commons, etc) llevan usando Vorbis desde sus inicios.

En la industria del videojuego también ha sido usado ampliamente para los eventos in-game en tiempo real, donde la velocidad de trasmisión de audio y su coherencia es vital.

En cuanto a los metadatos, Vorbis crea una cabecera en los paquetes codificados (para Ogg son código en bruto que almacena – como ya dijimos, Ogg simplemente almacena datos en bruto y es el reproductor quien interpreta) que contiene una serie de metadatos, llamados Vorbis Comments. Estos metadatos a nosotros no nos afectarán, puesto que no los tocaremos, pero es lícito indicar que son muy parecidos a los metadatos ID3 estándar del MP3. Al igual que ID3, los Vorbis Comments son un vector de octetos de tamaño indeterminado y codificadas en UTF-8, donde las etiquetas relativas al contenido van en formato “[ETIQUETA]=[VALOR]”.

Theora

Theora es un códec de vídeo de propósito general con bajo consumo de CPU. Esta basado en el códec de vídeo VP3 producido por On2 Technologies quien donó el código fuente del VP3.1 a la Fundación Xiph.org quién lo publicó bajo la licencia BSD revisada de 3 cláusulas.

Aunque VP3 es tecnología patentada, On2 ha renunciado irrevocablemente a todos los derechos y patentes que tenía sobre éste enseptiembre del 2001. En junio de 2002, On2 Technologies y la Fundación Xiph.org anunciaron una alianza para desarrollar Ogg Theora: la integración de VP3 con el proyecto Ogg y Vorbis.

El objetivo es la posibilidad de tener ficheros Ogg, donde Theora actúa como la capa de vídeo, mientras que Vorbis actúa generalmente como la capa de audio (Speex y FLAC también pueden actuar como capas de audio). Esto permite trabajar con audio y vídeo sin tener que maniobrar con formatos cerrados y/o de pago, es decir, teniendo una alternativa libre y competitiva a los formatos del grupo MPEG-4 del Consorcio MPEG.

Método

Consideraciones iniciales

Desde un principio nos centramos en la posibilidad de introducir el código a ocultar en nuevas páginas que crearemos entre las páginas ya creadas. Es decir, particionaremos el archivo a ocultar y cada fragmento lo meteremos en una nueva página que colocaremos entre dos páginas del archivo anfitrión.

Esto es posible porque como decíamos, no es necesario contemplar el códec de audio o video para introducir datos en el archivo. Esto se debe a que Ogg no lee una página si no los datos contenidos en este no tienen una cabecera Ogg (como la que definimos anteriormente); si no la cumple ni siquiera lo tiene en cuenta al formar el índice del archivo, con lo que podemos introducir trozos de código sin que se altere el video o el audio.

Los únicos efectos que tiene sobre el archivo son:

  • El tamaño del archivo se altera, por lo que si el tamaño del archivo o código introducido es alto, el tamaño se incrementará tanto que será perceptible.
  • La reproducción: si se introducen datos de forma compacta (es decir, trazas de código grandes en páginas nuevas o al final de páginas ya existentes) el reproductor lo notará, dando saltando un trozo de la barra de desplazamiento temporal de reproducción.

El primer problema trataremos de solucionarlo limitando el tamaño del archivo a introducir respecto del tamaño original del archivo anfitrión, y advirtiendo si el usuario que se notará si desea continuar. Así mismo intentaremos comprimir el archivo huésped para tratar de minimizar este problema.

El segundo problema solo podemos tratar de minizarlo haciendo que las páginas sean de tamaño mínimo y repartiendo bien esas páginas entre todas las que ya estaban en el archivo anfitrión. Así los saltos que den, serán mínimos y en un tamaño aceptable, serán imperceptibles.

Consideraciones finales

Pese a las intenciones relativas a la creación de páginas intermedias y realizar un reparto de las mismas, hemos encontrado problemas al implementar este método, puesto que los reproductores de audio / vídeo no analizaban correctamente el archivo Ogg y, variando el reproductor y el sistema operativo, o bien se reproducía el archivo pero sin ningún sonido, o el software reproductor colapsaba inmediatamente.

El código fuente adjunto introduce páginas de datos al final del archivo multimedia, algo que sí es capaz de ser reproducido por cualquier software. Usando este método, si aumentamos mucho el tamaño del archivo a ocultar hay cambios perceptibles en la barra de reproducción (justo al final), aunque el formato es descodificado sin problema. Ocultar archivos de poco tamaño no supone ningún problema perceptivo a la hora de reproducir el Ogg contenedor con los datos ya ocultos.

Aplicación

Con motivo del estudio de la posibilidad de realizar tecnicas esteganograficas sobre video en OGG, se ha desarrollado una aplicación para demostrar las posibilidades formadas a partir de conclusiones anteriores.

El código fuente ha sido desarrollado en C++ usando la librería gráfica multiplataforma Qt y sobre Mac OS X 10.5.8. La librería está disponible, de forma gratuita, en el siguiente enlace: http://qt.nokia.com/downloads Se adjunta también un ejecutable ("Bundle") ya compilado para Mac OS X.

Es necesario descargar el framework de Qt para la ejecución del software. Para desplegar el proyecto fácilmente (usando el IDE de Qt, Qt Creator) abrir el archivo EstaganOgg.pro con éste entorno.

Enlace de descarga.