Yohanner Carrete Marrero - Dspace@uclv

   EMBED

Share

Preview only show first 6 pages with water mark for full document please download

Transcript

Universidad Central “Marta Abreu” de Las Villas Facultad de Ingeniería Eléctrica Departamento de Telecomunicaciones y Electrónica TRABAJO DE DIPLOMA Diseño de un Algoritmo Esteganográfico Robusto ante la Compresión JPEG Autor: Yohanner Carrete Marrero Tutor: Msc. Samuel Montejo Sánchez Santa Clara 2009 "Año del 50 aniversario del triunfo de la Revolución" Hago constar que el presente trabajo de diploma fue realizado en la Universidad Central “Marta Abreu” de Las Villas como parte de la culminación de estudios de la especialidad de Ingeniería en Telecomunicaciones y Electrónica, autorizando a que el mismo sea utilizado por la Institución, para los fines que estime conveniente, tanto de forma parcial como total y que además no podrá ser presentado en eventos, ni publicados sin autorización de la Universidad. Firma del Autor Los abajo firmantes certificamos que el presente trabajo ha sido realizado según acuerdo de la dirección de nuestro centro y el mismo cumple con los requisitos que debe tener un trabajo de esta envergadura referido a la temática señalada. Firma del Autor Firma del Jefe de Departamento donde se defiende el trabajo Firma del Responsable de Información Científico-Técnica i PENSAMIENTO “Sólo se ve bien con el corazón; lo esencial es invisible a los ojos…” Antoine de Saint Exupery. ii DEDICATORIA A mis padres, a mi hermano, a mi abuela y a toda mi familia que me han apoyado incondicionalmente en cada momento de mi vida. A todos ustedes…. iii AGRADECIMIENTOS A mi tutor Samuel, a mis amigos Yohansy, Yulien y Daineris, que sin su ayuda no hubiera sido posible, a todos mis amigos y profesores que han intervenido de muchas formas en mi desarrollo intelectual y profesional… ¡Muchas gracias…! iv TAREA TÉCNICA 1. Realizar un estudio detallado de las principales técnicas esteganográficas existentes y hacer un análisis detallado de los parámetros fundamentales que las caracterizan. 2. Estudiar las técnicas de compresión de imágenes más utilizadas. 3. Profundizar en el software MATLAB, para usarlo en el diseño e implementación de un mecanismo esteganográfico. 4. Encontrar una técnica adecuada que permita recuperar la información perdida ante la compresión JPEG. 5. Utilizar técnicas de codificación, que mediante el uso de redundancia incremente la robustez del esteganograma ante el ruido. 6. Diseñar un conjunto de pruebas que puedan ser aplicados a la estegoimagen y al esteganograma con el objetivo de validar el algoritmo. 7. Confrontar los resultados durante el período de pruebas con los obtenidos por otros mecanismos esteganográficos ya existentes. 8. Documentar la investigación y la herramienta estaganográfica implementada, para facilitar la comprensión por parte de los interesados en el tema, extendiendo así su valor teórico-practico. Firma del Autor Firma del Tutor v RESUMEN En la presente investigación se implementa con el empleo de la herramienta MATLAB un esquema de enmascaramiento de datos usando imágenes digitales, donde el mensaje secreto es ocultado en el dominio de la DCT, pudiendo este mensaje ser extraído desde la estegoimagen, aún después de realizar una compresión JPEG. Además de la robustez ante la compresión, la distorsión causada por el ocultamiento de datos es mínima, ya que el PSNR del esteganograma es mayor que 30 dB. Para aumentar los niveles de robustez y seguridad del mensaje secreto al transmitirse por un canal de comunicación no ideal, introducimos un codificador de Hamming (7,4), capaz de corregir errores simples. vi TABLA DE CONTENIDOS PENSAMIENTO .....................................................................................................................i DEDICATORIA .................................................................................................................... ii AGRADECIMIENTOS ........................................................................................................ iii TAREA TÉCNICA................................................................................................................iv RESUMEN .............................................................................................................................v INTRODUCCIÓN ..................................................................................................................1 Estructura del informe: .......................................................................................................3 CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN…................................................................................................................5 1.1 Generalidades...............................................................................................................5 1.1.1 Definición .............................................................................................................5 1.1.2 Objetivo ................................................................................................................5 1.1.3 Evolución ..............................................................................................................5 1.2 Esteganografía en la era digital...................................................................................6 1.2.1 Bases de la esteganografía actual..........................................................................6 1.2.2 Estegosistemas: descripción y características.......................................................7 1.3 Compresión de imágenes ..........................................................................................13 1.3.1 Características de la imagen ...............................................................................13 1.3.2 Redundancia........................................................................................................14 1.3.3 Clasificación .......................................................................................................15 1.4 Codificación en palabras binarias y detección de error ............................................17 1.4.1 Detección y corrección de errores ......................................................................17 1.4.1.1 Método de Hamming ...................................................................................18 1.4.1.2 Código de Hamming (7,4): Características..................................................19 vii 1.5 Puntos fundamentales del capítulo ...........................................................................22 CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG.........................................................................................23 2.1 Compresión en JPEG ................................................................................................24 2.1.1 Características Generales del Estándar ...............................................................24 2.1.2 Esquema compresor JPEG:.................................................................................24 2.2 Herramienta MATLAB.............................................................................................34 2.3 Descripción del algoritmo propuesto........................................................................35 2.3.1 Proceso de inserción ...........................................................................................38 2.3.2 Proceso de extracción .........................................................................................41 2.4 Conclusiones del capítulo .........................................................................................42 CAPÍTULO 3. ANÁLISIS DE LOS RESULTADOS ......................................................43 3.1 Criterios de evaluación .............................................................................................43 3.2 Ataque Compresión JPEG ........................................................................................45 3.3 Ataque Ruido Impulsivo...........................................................................................50 3.4 Conclusiones del método ..........................................................................................52 CONCLUSIONES Y RECOMENDACIONES ...................................................................53 Conclusiones.....................................................................................................................53 Recomendaciones .............................................................................................................54 REFERENCIAS BIBLIOGRÁFICAS .................................................................................55 GLOSARIO DE TÉRMINOS ..............................................................................................59 ANEXOS ..............................................................................................................................61 Anexo I Historia de la esteganografía.........................................................................61 Anexo II Codificación de texto ....................................................................................62 Anexo III Función BER.................................................................................................65 viii Anexo IV Función Imperceptibilidad............................................................................66 Anexo V Proceso de inserción del algoritmo esteganográfico.....................................67 Anexo VI Proceso de extracción del algoritmo esteganográfico...................................73 INTRODUCCIÓN 1 INTRODUCCIÓN A través de los años, la historia ha proporcionado innumerables situaciones en las cuales la información ha tenido que atravesar un territorio hostil para alcanzar su destino. Por este motivo, se han utilizado muchos métodos ingeniosos para ocultar la información, entre los que se destaca la esteganografía, un arte antiguo que consiste en ocultar información, de forma tal que solo el emisor y el receptor conozcan de la existencia del mensaje oculto. En la actualidad, la comunicación por Internet se ha convertido en parte integral de la infraestructura del mundo contemporáneo. La información llega en numerosas formas y es usada en muchas aplicaciones. Las tecnologías digitales nos dan nuevas maneras para aplicar técnicas esteganográficas, tales como el ocultamiento de información en imágenes digitales. El principal objetivo de los sistemas esteganográficos y en especial de la esteganografía en imágenes digitales, es garantizar la total imperceptibilidad del mensaje oculto. Con este propósito se han desarrollado diversas técnicas con alto grado de complejidad y éxito, pero ninguna es totalmente invulnerable debido al continuo desarrollo de técnicas de estegoanálisis, orientadas a quebrantar la seguridad de estas y a la extracción del mensaje oculto. Generalmente las técnicas esteganográficas espaciales permiten una alta capacidad de inserción y una baja imperceptibilidad, sin embargo son vulnerables a ligeras modificaciones de la imagen como la compresión y a la extracción de la información por personas no autorizadas. Debido a la gran importancia que ha adquirido el estudio de esta ciencia en la actualidad, este trabajo surge con motivo de documentar y realizar una descripción del diseño e INTRODUCCIÓN 2 implementación de un algoritmo esteganográfico capaz de ocultar información en imágenes digitales de forma imperceptible, segura y que sea robusto ante la compresión de imágenes, en especial la compresión JPEG, uno de los formatos de imágenes digitales comprimidas más usado en nuestros días. Situación Problémica: ¿Cómo implementar un mecanismo estaganográfico lo suficientemente robusto ante la compresión de imagenes JPEG?. Objetivos General: Diseñar, implementar y validar un mecanismo esteganográfico robusto ante la compresión de imágenes JPEG. Objetivos específicos: 1. Estudiar las técnicas de esteganografía digital con imágenes. 2. Realizar un análisis de las características fundamentales de los estegosistemas, para definir pautas de clasificación y comparación de los esquemas que intervienen. 3. Investigar las técnicas de compresión de imágenes más usadas. 4. Analizar cantidad de información que se pierde en el proceso de compresión de imágenes digitales, específicamente la compresión JPEG. 5. Estudiar métodos de codificación que permitan recuperar información perdida o cambiada e incrementen la robustez del esteganograma ante el ruido; tomando en cuenta la razón de código y su incidencia en la capacidad de inserción. 6. Diseñar un algoritmo que permita ocultar información en imágenes y que cumpla con los niveles de seguridad y robustez requeridos, para que no se pierda la información oculta ante la compresión de la imagen. 7. Implementar el método diseñado con la ayuda de la herramienta MATLAB y validar la aplicación, poniéndola a prueba, con el objetivo de verificar su potencialidad. INTRODUCCIÓN 3 8. Documentar tanto la investigación como la herramienta de enmascaramiento de la información implementada, extendiendo así su valor teórico-práctico. Interrogantes Científicas: ¿De qué manera influye la compresión de imágenes en las técnicas esteganográficas espaciales? ¿Cuánta información se pierde al comprimir una imagen? ¿Qué codificador se debe utilizar que me permita recuperar la información perdida durante la compresión? ¿Cómo diseñar un método que sea robusto a la compresión de imágenes? ¿Qué criterios utilizar para validarlo? Estructura del informe: El informe estará estructurado en introducción, capitulario, conclusiones, recomendaciones, referencias bibliográficas, glosario de términos y anexos. En la introducción se reflejará la importancia y la necesidad del surgimiento del tema abordado, y además los objetivos y metas planteadas para la realización del trabajo. El capítulo 1 mostrará el estado del arte de la esteganografía digital como ciencia, clasificando y caracterizando los estegosistemas existentes. Además, se realiza una introducción al estudio de la compresión de imágenes digitales y a la codificación digital. En el capítulo 2 se describe la técnica de compresión JPEG y su influencia en la pérdida de información de las imágenes, se describe el proceso de codificación utilizado y el diseño del algoritmo esteganográfico realizado, como particular solución de la problemática tratada en el trabajo. En el capítulo 3 se valida el algoritmo esteganográfico implementado mediante el análisis de resultados obtenidos luego de la realización de ataques a los esteganogramas, como la compresión JPEG y la inserción de ruido impulsivo. Las conclusiones reflejan los logros obtenidos con el diseño del algoritmo esteganográfico, mediante el cumplimiento de los objetivos trazados. INTRODUCCIÓN 4 Las recomendaciones se realizan teniendo en cuenta las limitaciones del método descrito, para contribuir con su perfeccionamiento en posteriores investigaciones del tema. Se realizó una recopilación de toda la bibliografía consultada y siguiendo las normas establecidas se incluyen las referencias bibliográficas haciendo un listado de estas, con ayuda de la herramienta endnote. En el glosario de términos se incluyen los significados de las siglas y términos tratados en el trabajo. En los anexos se encuentran la historia de la esteganografía, algunas características sobre el tema de la codificación binaria de texto y las funciones implementadas en el MATLAB que fueron utilizadas para la realización de pruebas al algoritmo en el capítulo 3. CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN CAPÍTULO 1. 5 GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 1.1 Generalidades 1.1.1 Definición La esteganografía, que significa literalmente “escritura encubierta”, es el arte y la ciencia de ocultar información de modo que solo sea percibida por quien la envía y la recibe. Su nombre proviene del griego “Steganos” (cubierto) y “graphein” (escribir) [1]. 1.1.2 Objetivo Su utilización más amplia se encuentra en las comunicaciones seguras y transmisiones secretas, de allí su aplicación en agencias militares y de inteligencia. Además, es utilizada por civiles para el envío de mensajes privados en el intercambio personal y aunque los usos típicos de la estenografía son para el espionaje industrial o militar, uno de sus objetivos más reconocidos es la protección de derechos del autor (copyright) para ficheros de audio, video e imágenes digitales [2]. El objetivo de la esteganografía moderna, de forma general, es incrementar la seguridad de los enlaces de comunicaciones, haciendo imperceptibles para los intrusos los mensajes transmitidos y brindándoles una mayor seguridad a los canales de transmisión. 1.1.3 Evolución A través de la historia, la esteganografía ha sido empleada utilizando diversos métodos y variantes para ocultar la información .Ya desde los tiempos de la antigua Grecia (año 474 ACC), la historia cuenta como se ocultó un mensaje enviado hacia Esparta [3-5] (ver más información del tema en el Anexo I). CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 6 Actualmente, con el uso de los computadores y el intercambio de información a través de medios informáticos, se ocultan mensajes en archivos que a simple vista son comunes y corrientes, como fotografías o archivos de música, pero que con un software adecuado podría obtenerse un mensaje que se encuentre oculto dentro de esos archivos. Las técnicas de esteganografía se vuelven más eficientes si los mensajes ocultos en las imágenes se encuentran encriptados. De esta forma, no solo habría que detectar los archivos que contengan posibles mensajes, sino que también habría que decodificar tales mensajes para volverlos legibles [3, 6]. En los últimos años, la esteganografía ha ganado gran interés, debido en parte a la sospecha de que esta tecnología pudiera estar siendo utilizada por los terroristas para comunicar los planes de próximos ataques [1]. Aunque tales afirmaciones no han sido plenamente confirmadas, este tema ha sido muy discutido en la comunidad de las tecnologías de la información. 1.2 Esteganografía en la era digital 1.2.1 Bases de la esteganografía actual Los avances en computación nos proporcionan medios para calcular rápidamente los cambios necesarios en la ocultación de un mensaje, e Internet proporciona los medios necesarios para transportar grandes cantidades de información a cualquier punto del planeta. La esteganografía actual se basa en esconder datos binarios en los bits menos significativos de un fichero. Los bits que componen el mensaje a ocultar se introducen (bien sea añadiéndolos, o realizando operaciones aritméticas con los datos originales) en el archivo ya existente, procurando que el fichero resultante después de realizar los cambios tenga un alto parecido con el original [4, 7-9]. La esteganografía digital se basa en dos principios [5]: ¾ Los ficheros que contienen imágenes o sonido digitalizados pueden ser alterados de alguna forma sin que pierdan su funcionalidad. CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 7 ¾ La imposibilidad de los seres humanos de distinguir pequeños cambios en el color de las imágenes o la calidad del sonido, lo cual hace posible el uso de objetos que contienen información redundante, como por ejemplo un archivo de sonido de 16 bits o una imagen de 24 bits. Intenta, como la esteganografía clásica, mantener el método y el objeto original en secreto, para evitar comparaciones entre este y el objeto con el mensaje insertado. 1.2.2 Estegosistemas: descripción y características La esteganografía moderna en el proceso de ocultamiento de la información utiliza un medio digital como un archivo de transporte, el estegomedio, donde será ocultada la información. Los diferentes tipos de estegomedios más utilizados son [2, 7, 10]: • Archivos de imagen, sonido, texto, video. • Archivos ejecutables. • Páginas Web. • Campos no usados de paquetes de redes (TCP/IP). • Espacios no usados de discos. • Particiones escondidas. A este estegomedio se le conoce también como contenedor o cubierta y tiene la característica de que ser un contenedor aparentemente inocente que no despierte ninguna sospecha. Cuando el mensaje secreto es ocultado en el contenedor a través de una técnica esteganográfica, se obtiene un esteganograma que contendrá el mensaje oculto en el archivo de transporte o cubierta. Este proceso se muestra en la figura 1, la cual muestra el contenedor y el mensaje secreto que puede o no hacer uso de técnicas de cifrado para darle una mayor protección a la información. Una vez que los datos han sido ocultados, la información puede ser transferida a través de medios de comunicación inseguros. Una vez en el canal, aunque ninguna persona sospechara la existencia del mensaje, este está expuesto a cualquier ataque. Finalmente, para recuperar el mensaje secreto se aplica el proceso inverso [11]. CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 8 Figura 1: Proceso esteganográfico En este trabajo será usada una imagen digital (secuencia determinada de bits). Una fotografía digital es un conjunto de píxeles (picture elements), codificados mediante ceros y unos que forman un mapa de bits. Por tanto, como cualquier secuencia binaria, puede ser objeto de la aplicación de algoritmos de compresión, preferentemente con poca pérdida de calidad, minimizando el tamaño del fichero y el tiempo requerido para su presentación en páginas Web. Los formatos JPG y GIF son los más utilizados en compresión de fotografías digitales [11]. Las características de un estegosistema representante de un algoritmo esteganográfico específico, nos permiten evaluar la calidad del mismo, dándonos una medida de su eficiencia. Las mismas se usan para hacer comparaciones entre los métodos existentes y establecer pautas de superioridad o deficiencias, estas son [2, 12]: Imperceptibilidad: mide la capacidad que posee un algoritmo esteganográfico de insertar datos ocultos en un medio, de forma tal que no se puede distinguir por el sistema visual humano (HVS: Human Visual System) las diferencias entre el medio con el mensaje oculto (esteganograma) y el medio original (el estegomedio). Aunque esta capacidad es en origen subjetiva, existen métricas de distorsión o de distancias para evaluarla [2, 13]. Como ejemplo se tiene a la relación señal a ruido (SNR: Signal To Noise Ratio), el error cuadrático medio (MSE: Mean Squared Error), la correlación, el error absoluto máximo (MAE: Maximum Absolute Error). Nótese que para poder evaluar esta capacidad es necesario comparar al esteganograma con el estegomedio. Como normalmente se distribuye el esteganograma sin el medio portador original, es suficiente que las modificaciones en el esteganograma pasen desapercibidas para que el algoritmo esteganográfico utilizado sea considerado como imperceptible. CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 9 Las principales métricas objetivas para medir la distorsión entre dos medios, específicamente en imágenes (donde X es la imagen original de tamaño M y X’ la imagen con el mensaje oculto de tamaño N) son [14, 15]: 1. Error cuadrático medio (MSE): Esta medida de distorsión es la más simple de calcular, se define como: MSE = 1 M *N M N ∑∑ ( X (i, j ) − X ′(i, j )) 2 (1-1) i =1 j =1 Para aumentar la imperceptibilidad del mensaje oculto es necesario disminuir los valores de MSE. 2. Error raíz cuadrático medio (RMSE: Root Maximum Absolute Error): Esta medida de distorsión es la raíz cuadrada del error cuadrático medio o MSE, se utiliza para darle mayor peso a los errores MSE pequeños. Al igual que el error MSE, la imperceptibilidad del mensaje oculto se aumenta si se disminuye el valor del error RMSE. Esta se calcula de la siguiente manera: RMSE = MSE (1-2) 3. Relación señal a ruido (SNR): Esta medida de distorsión es la más popular, se calcula de la siguiente forma [14, 16]: M N ⎡ ( X (i, j ))2 ⎤⎥ ∑∑ ⎢ i =1 j =1 ⎥ dB SNR = 10 log10 ⎢ M N ⎥ ⎢ ⎢ ∑∑ ( X (i, j ) − X ′(i, j )) ⎥ ⎦ ⎣ i =1 j =1 Entre más grandes sean los valores SNR más imperceptible es el mensaje. (1-3) CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 10 4. Relación señal a ruido pico (PSNR: Peak Signal To Noise Ratio): Al igual que la SNR, los valores más grandes de PSNR indican una mejor imperceptibilidad del mensaje. Se calcula de la siguiente manera: ⎛ Max 2 PSNR = 10 log 10 ⎜⎜ ⎝ MSE ⎞ ⎛ Max ⎞ ⎟⎟ = 20 log 10 ⎜ ⎟dB ⎝ RMSE ⎠ ⎠ (1-4) donde Max es la magnitud máxima de un píxel, por ejemplo si se estuvieran comparando imágenes de 8 bits, Max toma el valor de 255. Los valores PSNR mayores de 30dB son considerados aceptables e indican que la diferencia entre las imágenes no es distinguible por el HVS [14, 16, 17]. MAE = max( X − X ′ ) (1-5) Al igual que el error MSE, entre más pequeño es el error MAE, mejor es la aproximación de los dos medios. 6. Correlación Cruzada ( Corr ): Esta métrica mide la similitud del medio original con el medio marcado, los valores que puede tomar van de 0 a 1. Estos valores indican el porcentaje de parecido entre los dos medios. Entre mayor sea el valor, la calidad del esteganograma será mejor. Tal medida se calcula de la siguiente manera: M Corr = N ∑∑ X ( i =1 j =1 M N i, j ) ∑∑ X ( i =1 j =1 X (′i , j ) (1-6) i, j ) 2 CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 11 Robustez: Expresa el número de modificaciones o ataques al que puede ser sometido el medio antes de que pierda la información oculta (antes de que el ruido del canal o un adversario destruya o modifique la información escondida) [10, 12, 14]. Se mide como la razón de error de bit (BER: Bit Error Ratio).Un número sustancial de bits erróneos es dado típicamente por 0.15 [14]. BER = Número _ Bits _ Erróneos Número _ Bits _ total _ transmitid os (1-7) Muchas técnicas intensifican la robustez de sus mensajes implementando un codificador de control de error cíclico para la detección de errores en la transmisión y la recuperación de los bits perdidos del mensaje [15, 18]. Métricas para evaluar la robustez [14]: La robustez de un esquema esteganográfico puede ser evaluada aplicando diferentes clases de distorsiones o modificaciones al esteganograma, tales ataques deben ser de interés o relevantes para el tipo de aplicación en donde se vaya a utilizar el esquema esteganográfico. La robustez puede ser evaluada midiendo la probabilidad de extraer el mensaje después de que el esteganograma haya recibido un ataque, es decir, se evalúa midiendo la precisión, la cual es la relación del mensaje extraído con el mensaje originalmente incrustado en el estegomedio. Ejemplos de ataques en imágenes digitales son los siguientes: compresiones, transformaciones geométricas, filtrados, conversiones digital-analógico (D/A) y analógicodigital (A/D), modificaciones del histograma. Comúnmente un algoritmo esteganográfico carece de robustez en contra ataques, tales como una simple compresión o una pequeña modificación del histograma, si dicho ataque hace que se pierda el mensaje oculto. Sin embargo, esta aparente debilidad hace que la aplicación de este tipo de algoritmos sea útil para asegurar la integridad del estegomedio [14]. CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 12 Capacidad de inserción: se refiere a la cantidad de información que puede ser incrustada en determinado estegomedio sin degradar su calidad, es decir, es el tamaño máximo del mensaje que se puede ocultar sin que el estegomedio muestre variaciones ante el HVS [12]. La capacidad se puede medir en bytes de información respecto al estegomedio, determinándose, de esta forma, el número de bits insertados en un byte o píxel (para el caso de imágenes a color) de la cubierta. La cantidad de información que se requiera ocultar en la imagen depende de la aplicación en donde se vaya a utilizar. Existe una regla general en cuanto a la cantidad de información que se oculta en un medio, entre más se oculte más se modifica el medio y menos robusto es el medio marcado. Como es de esperarse, todos los requerimientos básicos están relacionados entre sí [12, 14]. Por ejemplo, un algoritmo esteganográfico en imágenes con mucha capacidad tiende a distorsionar la imagen, por lo que se vuelve perceptible, a la vez que la robustez se ve afectada, ya que entre más información se guarde en la estegoimagen, más difícil es garantizar la extracción del mensaje después de que haya sido atacada. Seguridad: mide la dificultad de detección de la información escondida. La seguridad va a aumentar con el nivel de dificultad del proceso de cifrado esteganográfico y se puede incrementar con procesos criptográficos incluidos en cada uno de los algoritmos realizados. La seguridad de las técnicas esteganográficas digitales reside en la posesión exclusiva por los propietarios de los datos que se pretende ocultar de una clave que controla el proceso de inserción y extracción de los datos ocultos [2]. Un sistema esteganográfico se considera seguro cuando un oponente que entienda su funcionamiento, es decir, los algoritmos de inserción o extracción, pero no disponga de la clave, no pueda obtener evidencia alguna o indicios de la existencia de datos ocultos. CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 13 1.3 Compresión de imágenes 1.3.1 Características de la imagen Una imagen digital es un arreglo rectangular de puntos arreglados en m filas por n columnas. La expresión m × n es llamada la resolución de imagen, y el punto es llamado píxel (excepto en el caso de imágenes de fax y de compresión de video, donde nos referiremos a ellas como pels). Para el propósito de la compresión de Imagen es útil distinguir entre los siguientes tipos de imagen [19]. 1) Una imagen bi-nivel (o monocromática). Esta es una imagen donde los píxeles pueden tener uno o dos niveles, normalmente referidos como blanco y negro. Cada píxel es en este caso representa un píxel para este tipo de imagen simple. 2) Una imagen en escala de grises. Un píxel en este caso puede tener uno de los n valores de 0 a n-1, indicando uno de los 2 n matices de los grises (o matices de algún otro color). 3) Una imagen de tonos continuos. Este tipo de imagen puede tener similares colores (o escalas de grises). Cuando píxeles adyacentes difieren por una unidad exactamente, es difícil para el ojo humano poder percibir esta diferencia de color. Como consecuencia, tal imagen puede contener áreas con colores que parecen variar continuamente cuando el ojo se mueve a lo largo del área. 4) Una imagen en tono discreto (también llamada una imagen gráfica o imagen sintética) es normalmente una imagen artificial. Esta puede tener pocos colores o muchos colores, pero no tiene el ruido y las manchas de una imagen natural. Los objetos artificiales, el texto y los dibujos delineados tienen los límites bien definidos y por consiguiente contrastan con el resto de la imagen (el fondo). Los píxeles adyacentes en una imagen de tono discreto frecuentemente son idénticos o varían significativamente en valor [19, 20]. Tal imagen no permite una alta tasa de compresión con los métodos de pérdidas, ya que las pérdidas de algunos píxeles pueden generar en una carta ilegible. Los métodos de compresión para imágenes de tono continuo frecuentemente hacen cambios perceptibles en los límites abruptos de una imagen de tono discreto, además, son necesarios métodos especiales para lograr una compresión eficiente de estas imágenes. Nótese que una imagen CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 14 de tono discreto puede ser altamente redundante, ya que el mismo patrón o carácter puede aparecer muchas veces en una imagen. 5) Una imagen parecida a una caricatura es una imagen de color que consiste de áreas uniformes. Cada área tiene un color uniforme, no obstante las áreas adyacentes tienen colores diferentes. Esta característica puede ser explotada para obtener una mejor compresión. Intuitivamente, es claro que cada tipo de imagen puede ofrecer redundancia, pero ellas son redundantes en diferentes formas. Por lo tanto, cualquier método de compresión dado no se ejecuta bien con todas las clases de imágenes y por lo tanto existen diferentes métodos de acuerdo al tipo de imagen. Hay métodos de compresión para imágenes binivel, para imágenes de tono continuo y para imágenes de tono discreto. Hay métodos que intentan desintegrar una imagen en partes de tono continuo y tono discreto y así comprimirlas cada una por separado. 1.3.2 Redundancia Las técnicas de compresión son posibles porque los conjuntos de datos normalmente contienen redundancias. En el caso de una imagen, dicha redundancia existe en forma de pautas de repetición y otras formas de información de brillo común entre varios píxeles de la imagen. El objetivo de la compresión de la imagen reside en caracterizar estas redundancias y codificarlas de una forma distinta que requiera menos datos que la original. Existen tres tipos de redundancia en las imágenes digitales [21]: ● Redundancia de código: El código de una imagen representa el cuerpo de la información mediante un conjunto de símbolos. La eliminación del código redundante consiste en utilizar el menor número de símbolos para representar la información. Las técnicas de compresión por codificación de Huffman y codificación aritmética utilizan cálculos estadísticos para lograr eliminar este tipo de redundancia y reducir la ocupación original de los datos. ● Redundancia entre píxeles: La mayoría de las imágenes presentan semejanzas o correlaciones entre sus píxeles. Estas correlaciones se deben a la existencia de estructuras similares en las imágenes, puesto que no son completamente aleatorias. De esta manera, el CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 15 valor de un píxel puede emplearse para predecir el de sus vecinos. Las técnicas de compresión Lempel-Ziv implementan algoritmos basados en sustituciones para lograr la eliminación de esta redundancia. ● Redundancia visual: El ojo humano responde con diferente sensibilidad a la información visual que recibe. La información a la que es menos sensible se puede descartar sin afectar la percepción de la imagen. Se suprime así lo que se conoce como redundancia visual. La eliminación de la redundancia está relacionada con la cuantificación de la información, lo que conlleva una pérdida de información irreversible. Además de JPEG, hay otras técnicas de compresión como EZW o SPIHT, que hacen uso de la cuantificación. 1.3.3 Clasificación Existen dos enfoques bien diferenciados, compresión de imágenes sin pérdida y con pérdida de información [22]. En el caso de la compresión de imágenes sin pérdida de información, tras el proceso de decodificación, la imagen reconstruida es idéntica a la imagen original. Los métodos más usados en la compresión sin pérdida son el RLE (RunLength encoding), los métodos de diccionarios basados en Liv-Zempel y los métodos basados en predicción. En RLE, cada píxel se codifica mediante una tupla de la forma (valor, número de repeticiones), con lo que se codifica de forma eficiente ristras de un mismo valor. Este sistema funciona bien para imágenes donde haya grandes bloques de un mismo color. Los métodos basados en LZ codifican de forma eficiente los patrones existentes en una imagen. Un ejemplo de un formato basado en LZ (concretamente en el LZW) es el GIF. Los métodos basados en LZ y RLE comprimen muy bien imágenes donde haya grandes bloques de un mismo color, pero comprimen muy mal imágenes de varias tonalidades. De hecho, GIF limita el número de tonos posibles a 256, para que de esta forma se pueda obtener una compresión aceptable. Para poder representar con una calidad aceptable una fotografía, se necesita usar una amplia gama de colores (en torno a 24 bpp, con los que se obtienen unos 17 millones de colores distintos). El problema de usar estos métodos con imágenes de varios tonos es que estas no suelen presentar ningún patrón o repetición (ya que hay pequeñas variaciones). Aunque aparentemente en una imagen haya grandes bloques con un mismo color, esto puede no ser cierto. Por ejemplo, la ristra 50, 51, 47, 52, CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 16 49, 50, 49, 51 no se comprimiría nada mediante RLE, a pesar de que sea percibida por el ojo humano como si se tratase de una ristra del mismo color. El otro método sin pérdida de información está basado en la predicción. En este método se hace una predicción del valor de un píxel con los valores de los píxeles adyacentes y se codifica la diferencia. De esta forma, si el modelo de predicción es bueno, las diferencias serán pequeñas y podrán ser codificadas con menos bits. Este método sin pérdida es mejor que los anteriores en la compresión de imágenes de varios tonos. Por ejemplo, la ristra anterior 50, 51, 47, 52, 49, 50, 49, 51, se convertiría en 50, 1, -4, 5, -3, 1, -1, 2, y podría ser codificada de forma eficiente usando un método estadístico (como Huffman). Este es el método usado en la compresión en JPEG sin pérdidas. El problema es que al trabajar sin pérdida de información, el grado de compresión que se puede llegar a obtener es bastante limitado (límite de Shannon) [22]. Por lo general, el grado de compresión obtenido mediante estos métodos en imágenes de tonos continuos se sitúa en torno al 50%. Este índice de compresión puede no llegar a ser suficiente, teniendo en cuenta que una imagen normal ocupa cerca de un mega. Para obtener unas tasas de compresión mayores, se tiene que recurrir a los métodos con pérdida de información, donde la imagen reconstruida no tiene porque ser idéntica a la original. Esto puede parecer no apropiado, pero en el caso de las imágenes no lo es. Cuando se trabaja con texto, la variación de un solo bit es fácilmente percibida por una persona. En el caso de las imágenes, una pequeña variación no tiene porqué ser percibida por el ojo humano. En JPEG, la fisiología del ojo humano juega un papel muy relevante. Los métodos con pérdida de información se basan en eliminar no solo la correlación espacial, sino también la información que sea irrelevante para el ojo humano. La pérdida de información no es un problema siempre que la imagen reconstruida sea percibida por el ojo humano como si se tratase de la original. Hay que apuntar que los métodos con pérdida y sin pérdida se complementan muy bien. Una imagen donde hay muchos bloques de un mismo color se logrará una alta tasa de compresión sin afectar la calidad de la imagen con estos métodos basados en RLE o LZ, pero se comprimirá con pérdidas distinguibles en la calidad de la CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 17 imagen si se usa un método como JPEG. En cambio, una imagen con varios tonos, se comprimirá de forma eficiente con JPEG y no con RLE o LZ [20, 22]. 1.4 Codificación en palabras binarias y detección de error Los sistemas digitales procesan la información codificada en palabras binarias, constituidas por conjuntos ordenados de ceros y unos. Esta información puede ser cuantitativa (es decir, una cantidad expresada por un número) o cualitativa (referida a la distinción entre diversas posibilidades o cualidades) [23, 24]. Una cuestión importante respecto a la transferencia de información es la fiabilidad o ausencia de error en ella. En la transmisión o almacenamiento de la información, pueden producirse errores que afecten a uno o varios bits de algunas palabras binarias; por ello, es necesario disponer de mecanismos que faciliten la detección de errores y, si fuera posible, permitan corregirlos. Tales mecanismos se basan en añadir dígitos adicionales (redundancia), para efectuar comprobaciones sobre la información recibida. El concepto de distancia mínima (número de bits en que difieren dos palabras de un código) es básico en el desarrollo de códigos detectores de error. Hamming introdujo un método simple para construir códigos de distancia mínima 4 (basados en la utilización de paridades parciales) que permiten detectar hasta tres errores y efectuar corrección cuando hay uno solo de ellos [23]. 1.4.1 Detección y corrección de errores En los procesos de almacenamiento, transmisión y escritura de datos se pueden producir errores. Con la detección de errores aseguramos la integración de la información y con la corrección hay una tolerancia al fallo. Actualmente, los códigos de Hamming son fundamentales en la teoría de la codificación y tienen una gran cantidad de aplicaciones prácticas. En concreto, los códigos correctores de errores tienen un papel esencial en la vida cotidiana y son usados por modems, memorias e incluso en comunicaciones vía satélite [25, 26]. CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 18 1.4.1.1 Método de Hamming En el año 1950, el profesor Richard W. Hamming publicó un artículo sobre detección y corrección de errores [27]. Este trabajo supuso el comienzo de una nueva área de investigación dentro de la teoría de la información. El código Hamming es clasificado como un código en bloque porque tiene como entrada un grupo (bloque) de k bits de datos, a los cuales se le agrega un grupo de m bits de paridad de acuerdo a reglas preestablecidas, dando como salidas un grupo de n bits comúnmente llamado palabra de código. Asimismo, se dice que es lineal porque satisface la condición de que cualquier par de palabras-código al ser sumadas en módulo 2, producen otra palabra-código existente dentro del conjunto empleado para codificar los posibles mensajes. Además se dice que es sistemático porque los bits de paridad se agregan sin alterar la posición de los bits del mensaje [28]. Para un código lineal de bloque (n, k) se pueden ordenar los bits de paridad a la derecha y los del mensaje a la izquierda (y viceversa) como se muestra a continuación [25, 28, 29]: Tabla 1.1: Código lineal de bloque m0 , m1, m2 , m3 ,....mk −1 b0 , b1,....bn −k −1 Bits de código Bits de paridad Los códigos Hamming comúnmente son empleados en aplicaciones donde ocurre un solo error por bloque, como por ejemplo en el proceso de escritura y lectura de una memoria RAM. Una familia de estos códigos se muestra a continuación y tiene los siguientes parámetros [28]: CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 19 Tabla 1.2: Familia de códigos Hamming Tamaño del bloque n = 2m − 1 bits Bits de paridad m; (m ≥ 3) bits Tamaño del mensaje k bits Distancia mínima d min ≥ 2t + 1 bits Errores a corregir t bits Como se observa en los parámetros, el número de errores t que se pueden corregir por bloque de palabra-código está relacionado con la distancia mínima de Hamming, donde esta distancia es la menor de las distancias entre dos combinaciones binarias cualesquiera pertenecientes a dicho código y viene dada por el menor número de bits que hay que cambiar en una de ellas para obtener la otra [26, 29, 30]. Asimismo, debido a la propiedad de linealidad, la distancia Hamming mínima se puede obtener con el peso mínimo de los vectores no ceros. A su vez, el peso Hamming es obtenido con el número de bits que difieren los vectores de las palabras-código con respecto al vector de puros ceros. En base a estas definiciones se concluye que un código binario debe tener al menos la distancia mínima igual a 1 para garantizar que una combinación no represente a varias cantidades o valores [28]. 1.4.1.2 Código de Hamming (7,4): Características El código de Hamming (7,4), visto como un código algebraico, puede construirse usando una matriz llamada Matriz Generadora G: y decodificarse usando una Matriz Decodificadora H [31-35]: La matriz G realiza una transformación de k-uplas de información en n-uplas de palabras codificadas, donde n= k+m, siendo m =3 (bits de paridad), k = 4 (bits de datos) y n= 7 (bits de la nueva palabra codificada). Para obtener las dimensiones de G y de H, usamos la relación [32, 34]: CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 2m ≥ k + m + 1 20 (1-8) con G:[k, n] y H:[m, n]. El signo igual se alcanza solo para una máxima eficiencia (código perfecto). Una matriz generadora es [32, 33]: ⎡1 ⎢0 [G] = ⎢ ⎢0 ⎢ ⎣0 0 0 0 1 1 1⎤ 1 0 0 1 1 0⎥⎥ 0 1 0 1 0 1⎥ ⎥ 0 0 1 0 1 1⎦ (1-9) y la matriz de control de paridad correspondiente (de decodificación) es [32, 33]: ⎡1 [H ] = ⎢⎢1 ⎢⎣1 1 1 0 1 0 1 0 0 1 1 1 0 0 1 0 0⎤ 0 ⎥⎥ 1 ⎥⎦ (1-10) Por ejemplo, dados los vectores de información I= (i 0 , i 1 , i 2 , i 3 ) Entonces La palabra código se obtiene multiplicando el vector del mensaje (I) por la matriz generadora (G) como se muestra [32, 34]: [i 0 i1 i 2 ⎡1 ⎢0 i 3 ]⎢ ⎢0 ⎢ ⎣0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 0 1 1 0 1 1⎤ 0⎥⎥ = [i 0 1⎥ ⎥ 1⎦ i1 i 2 i3 c0 c1 c 2 ] = [c ] (1-11) CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 21 La palabra código [c] es generado del transmisor o el regenerador y con esto finaliza la operación de codificación de canal en el lado transmisor de un sistema de comunicaciones [32, 33]. Detección de error en el lado receptor En la transmisión c puede sufrir modificaciones que lo transformen en otra palabra de código y [33]. y=c ⊕ e (1-12) Donde: e es el vector de error, tiene un uno en la posición de error y cero en el resto ⊕ significa suma módulo 2. En el receptor, el descifre comienza con el cálculo del síndrome [s], a fin de determinar si un error está presente. El síndrome tiene dimensiones 1 × 3 (n -k) y puede ser cualquiera de secuencias 2n-k (incluso la secuencia todo-cero). Este se obtiene multiplicando la palabra de código recibida por la traspuesta de la matriz H: Y (1, 7) × H T (7, 3) = S (1, 3) (1-13) Finalmente, con el síndrome obtenido s= (s 1 , s 2 , s 3 ) y el patrón de errores más comunes (e) se identifica la posición del error. Por ejemplo, el patrón de errores, matriz e y su síndrome, matriz S para un código (7,4) son mostrados en la Tabla I [28]. Tabla 1.3. Patrón de errores más comunes y el síndrome para un código (7,4). Patrón de errores (e) Posición de los bits 1 0 1 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 3 0 0 0 1 0 0 0 0 4 0 0 0 0 1 0 0 0 5 0 0 0 0 0 1 0 0 6 0 0 0 0 0 0 1 0 7 0 0 0 0 0 0 0 1 Síndrome s 0 1 1 1 0 1 0 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 0 1 CAPÍTULO 1. GENERALIDADES DE LA ESTEGANOGRAFÍA, COMPRESIÓN Y CODIFICACIÓN 22 Al síndrome s = 000, le corresponde el valor de e = 0000000, lo cual significa para el lado receptor que no hubo error en la transmisión, mientras que 111, indica que hay un error en la posición uno de la palabra-código y así sucesivamente el resto de las combinaciones del síndrome indican un error en la posición donde e vale uno. Posteriormente, para la corrección se suma 1 en módulo 2 en la posición indicada por el patrón de errores (e) [25]. 1.5 Puntos fundamentales del capítulo Con el desarrollo del presente capítulo se abordó el tema de la esteganografía en imágenes digitales, profundizando en el análisis de las características esenciales de los sistemas esteganográficos, tales como la inserción de la información en la estegoimagen y el dominio en que la realizan; así como los requerimientos de capacidad, seguridad, robustez y fundamentalmente la imperceptibilidad, dado que el cumplimiento de esta última característica garantiza el éxito de un sistema esteganográfico. Se analizaron además las principales formas de compresión para las imágenes digitales que existen, así como las características esenciales de las imágenes, que determinan el tipo de compresión a utilizar en estas, de forma tal que no se afecte en gran medida la calidad de las imágenes. Se abordó el tema de la codificación de palabras binarias y la detección de error, en específico la codificación mediante el método de Hamming, código capaz de corregir errores simples en cada bloque y que tiene gran utilidad en las comunicaciones a distancia por canales ruidosos. CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG CAPÍTULO 2. 23 DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG Existen diferentes métodos que permiten ocultar información en imágenes digitales. El método LSB (Least Significant Bit) es quizás el más simple y sencillo de utilizar. Este, en la mayoría de los casos, proporciona una alta capacidad de inserción y una baja perceptibilidad, sin embargo, es vulnerable a ligeras modificaciones de la imagen como la compresión y a la extracción de la información por personas no autorizadas. Otros métodos más robustos para ocultar información en imágenes hacen uso del dominio de la transformada ya sea la DFT (Discrete Fourier Transform), la transformada DCT (Discrete Cosine Transform) o la transformada DWT (Discrete Wavelet Transform) para transformar una imagen en el dominio espacial al dominio espectral y así ocultar el mensaje secreto en áreas significativas de la imagen. En general, los métodos en el dominio espacial tienden a proporcionar mayor capacidad de inserción que los métodos en el dominio de la frecuencia, sin embargo, los métodos en el dominio de la frecuencia son más robustos contra ataques, tales como compresión, recorte o algún otro procesamiento de imagen [11]. En este capítulo presentamos un algoritmo esteganográfico, el cual usa una imagen digital como encubridora de datos. Este algoritmo incluye una cuantización de coeficientes a través de la transformada discreta coseno DCT para poder insertar el archivo secreto en los bits menos significativos de la cuantización de los coeficientes DCT. El sistema propuesto puede recuperar el mensaje oculto con pocas pérdidas (aun cuando la imagen encubridora sufra la compresión JPEG), si el canal de comunicación es ideal. Sin embargo, los canales de comunicación no son ideales, por lo que el mensaje extraído incluirá algunos bits erróneos. En consecuencia, para incrementar la robustez del mensaje secreto al transmitirse por un canal de comunicación no ideal, introducimos un codificador de Hamming (7,4). CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 24 2.1 Compresión en JPEG JPEG es un estándar de compresión de imágenes con pérdida. Dicho estándar fue creado en el año 1992 por un grupo independiente, llamado JPEG (Joint Photographic Experts Group), fundado en el año 1986. El estándar fue aprobado finalmente en 1994 convirtiéndose en un estándar ISO [21]. 2.1.1 Características Generales del Estándar El JPEG se caracteriza por lograr un alto grado de compresión en las imágenes sin causar por ello un descenso en la calidad perceptible en la mayoría de las fotografías. Además, se puede justar el grado de compresión. Si se especifica una compresión muy alta, se perderá una cantidad significativa de calidad, pero se obtendrán ficheros de pequeño tamaño. Con una tasa de compresión baja se obtiene una calidad muy parecida a la del original y un fichero mayor. Esta pérdida de calidad se acumula. Esto significa que si comprime una imagen y la descomprime, se obtendrá una calidad de imagen, pero si vuelve a comprimirla y descomprimirla, se obtendrá una pérdida mayor. Cada vez que se comprima y descomprima la imagen, esta perderá algo de calidad. Hoy en día el último estándar existente es el JPEG 2000. Tiene como característica la posibilidad de comprimir sin distorsión o pérdida. Emplea nuevas tecnologías como la transformada Wavelet en lugar de la DCT y la codificación aritmética en lugar de Huffman [21]. 2.1.2 Esquema compresor JPEG: En la figura 2.1 se pueden ver todos los pasos a seguir en la compresión JPEG. El primer paso (solo para imágenes en color), es pasar del espacio de colores RGB al de luminancia (intensidad) y crominancia (información del color). El ojo humano no es demasiado sensible a la crominancia, lo que permite hacer un submuestreo (en los componentes de la crominancia), obteniendo una compresión de en torno a 50% de la imagen original [22]. Después se divide en bloques de 8x8. Luego se aplica la transformada del coseno a cada bloque. Tras aplicar la transformada, se obtienen unos pocos coeficientes importantes, y otros menos relevantes. Los coeficientes irrelevantes son eliminados en el paso de cuantización. Finalmente, se aplica un algoritmo de RLE combinado con Huffman para codificar de forma eficaz los valores descartados. Hay que destacar que el último paso que CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 25 aparece en el esquema (en el que se pasa a un fichero), no está especificado en el estándar. A continuación, veremos cada paso en detalle [21]. Figura 2.1: Esquema compresor JPEG Transformar RGB a YCbCr. Aclaremos una serie de parámetros importantes para comprender este apartado: ● Y: Luminancia ● Cb, Cr: Valores de Crominancia La transformación se hace con las siguientes fórmulas [21, 22]: Y = 0.3R + 0.6G + 0.1B (2-1) U = B −Y (2-2) V = R −Y (2-3) Cb = U + 0 .5 2 (2-4) Cr = V + 0 .5 1 .6 (2-5) CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 26 Con esta transformación conseguimos separar la información de brillo (Y) de la información del color (Cb, Cr). Aprovechamos así la mayor sensibilidad del ojo humano a cambios en la cantidad de brillo frente a cambios en el color. Submuestreo de los componentes CbCr. Ya que el ojo humano es menos sensible a los cambios de color podemos aproximar de forma opcional los valores de crominancia de todo el bloque por los valores de una parte del mismo. Así podemos reducir el tamaño de la información de crominancia [21, 22]. Tabla 2.1 Submuestreo de los componentes CbCr Y1 Y2 Y3 Y4 Cr1 Cr2 Cb1 Cb2 Y5 Y6 Y7 Y8 Cr3 Cr4 Cb3 Cb4 Y9 Y10 Y12 Y12 Y13 Y14 Y15 Y16 Generación de bloques 8x8 para el procesamiento. Un inconveniente de la DCT es que tiene un elevado coste computacional. Para acelerar el proceso de cálculo, la imagen se divide en bloques de 8x8, ya que el cálculo de la DCT resulta más eficiente. En el caso de que la dimensión de la imagen no sea múltiplo de 8, se usan bits fantasma de relleno para poder tener bloques de 8x8 en los extremo. Cada bloque de 8x8 se llama unidad de datos. Trabajar con bloques tiene ciertos inconvenientes. Para obtener un grado de compresión óptimo con este método, sería necesario aplicar la DCT a la totalidad de la imagen. Con ello se conseguiría eliminar mucha más información redundante, ya que todos los píxeles de la imagen están relacionados entre si en mayor o menor medida. El problema es que aplicar la DCT a la totalidad de la imagen es que supone un gran número de cálculos. Por ello, se opta por trabajar a nivel de bloque. Uno de los problemas que trabajar a nivel de CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 27 bloque es que no se elimina la correlación existente entre los píxeles adyacentes que estén en bloques distintos. Dos píxeles adyacentes en bloques distintos, antes de aplicar la DCT tendrán valores parecidos, pero debido a la pérdida de información, tras aplicar la IDCT pueden surgir algunas diferencias. Cuando se trabaja con poca calidad, estás diferencias llegan a ser importantes, y pueden causar la desagradable sensación visual de que la imagen está dividida en bloques [21]. Aplicación de la DCT a cada bloque de píxeles. Lo que se realiza en este paso es transformar los valores originales que están el dominio del espacio a valores pertenecientes al dominio de la frecuencia. Cuantización. Cada una de las matrices de 8x8 se divide por una tabla de factores de cuantización, con la intención de reducir la información relativa a las altas frecuencias, que son menos perceptibles por el ojo humano. En esta fase es donde se produce la mayor parte de la pérdida de información de JPEG. Esto es lo que nos permite alcanzar grandes ratios de compresión de las imágenes. Codificación Se emplean el código Huffman y Run-Length Encoding para compactar la información, aprovechando el gran número de ceros presentes en las matrices después del proceso de cuantización. Agregación el "header info" y factores de cuantización. El formato JPEG almacena en la cabecera del archivo cierta información útil para la descompresión de la imagen, tales como el tamaño en píxels, píxels/pulgadas, tipo de imagen y tablas usadas en los procesos de cuantización y codificación [21]. Transformada DCT (Transformada del Coseno Discreta). Características Generales. Es una transformada basada en la Transformada de Fourier Discreta, pero utilizando únicamente números reales, es decir, se trata de una transformada real debido a que los vectores base se componen exclusivamente de funciones coseno muestreadas. La DCT toma un conjunto de puntos de un dominio espacial y los transforma en una representación CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 28 equivalente en el dominio de frecuencias. Además, minimiza algunos de los problemas que surgen con la aplicación de la DFT a series de datos. La Transformada Discreta del Coseno cuenta con una buena propiedad de compactación de energía, que produce coeficientes incorrelados, donde los vectores base de la misma dependen solo del orden de la transformada, y no de las propiedades estadísticas de los datos de entrada. La decorrelación de coeficientes es muy importante para la compresión, ya que así, el tratamiento de cada coeficiente en un momento posterior puede realizarse independientemente unos de otros, sin que se pierda eficiencia de compresión. Otro aspecto importante de la DCT es la capacidad de cuantificar los coeficientes utilizando valores de cuantificación que se eligen de forma visual [22]. Esta transformada ha tenido un gran éxito en el campo del tratamiento digital de imagen, debido a que, para los datos de una imagen convencional, se tiene una alta correlación entre elemento. Otro motivo de utilizar la transformada del coseno en lugar de la de Fourier, de mayor uso y aplicación, radica en que la primera puede codificar mejor funciones lineales con menos componentes. Propósito de la DCT. El propósito de la DCT es el de procesamiento de las muestras originales. Se trabaja con las frecuencias espaciales que se recogen en la imagen original. Estas frecuencias espaciales son muy relativas al nivel de detalle que presenta dicha imagen. El espacio de las altas frecuencias corresponde a los niveles más altos de detalle, mientras que las bajas frecuencias corresponden a los niveles más bajos de detalle [21]. La DCT es aplicada sobre cada matriz de 8x8 valores de píxeles y nos devuelve una matriz de 8x8 con los coeficientes de la frecuencia. Es decir, se utiliza para codificar los valores de la imagen, devolviendo un campo de valores transformados que serán una serie de coeficientes que multiplicarán a funciones coseno para reconstruir la imagen. El DC o componente de continua es el valor que se corresponde con el promedio de todos los valores de la imagen, siendo el primer componente o coeficiente que aparece en la matriz, resultado de la aplicación de la transformada. Los demás valores reciben el nombre de componentes AC. CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 29 La Transformada Discreta del Coseno da como resultado valores reales, como mencionábamos anteriormente. Por este motivo, el paso de la aplicación de la DCT tiene problemas para ser revertido. En una computadora no existen números reales, sino números en punto flotante, donde se comenten errores por redondeo, por lo que al realizar el paso inverso a la aplicación de la transformada habrá una pérdida de datos. Debido también a uso de valores reales por parte de la DCT, puede resultar muy costoso en cuanto a tiempo de procesamiento se refiere. En el intento de reducir este tiempo de procesamiento se suele emplear una representación de números en punto flotante utilizando números enteros, por lo que nuevamente se producen errores de redondeo, pero se logra una reducción importante en el tiempo necesario para la compresión [22]. La Transformada Discreta Coseno Directa e Inversa está definida como sigue [21, 36, 37]: DCTuv = N −1 N −1 ⎡ (2 x + 1)uπ ⎤ ⎡ (2 y + 1)vπ ⎤ cos ⎢ Cu C v ∑∑ Pxy cos ⎢ ⎥ ⎥ 2N ⎣ 2N ⎦ ⎣ 2N ⎦ x =0 y =0 1 ⎧ 1 ⎪ Cu , C v = ⎨ 2 ⎪⎩ 1 para u, v = 0 (2-6) (2-7) otro caso donde N es el tamaño del bloque cuadrado, en este caso como los bloques de la imagen son de 8x8 píxeles, N será igual a 8 y 'u' y 'v' son cada uno de los elementos del bloque que van desde 0,1,2,...N, en este caso, como los bloques tienen un tamaño de 8, 'u' y 'v' irán desde 0,1,2,...,7 y serán cada una de las componentes de una matriz de 8x8, donde la coordenada (0,0) será la esquina superior izquierda. Luego aplicando esta transformación a cada elemento que compone la matriz de 8x8, obtenemos otra matriz de 8x8 elementos que son los coeficientes de las frecuencias. Un ejemplo de lo mencionado sería el que se muestra a continuación. Tenemos como bloque inicial de 8x8 [21]: CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG ⎡52 ⎢ 63 ⎢ ⎢62 ⎢ ⎢ 63 ⎢67 ⎢ ⎢79 ⎢85 ⎢ ⎣⎢87 55 59 59 58 61 65 71 79 30 61 66 70 61 64 73⎤ 55 90 109 85 69 72⎥⎥ 68 113 144 104 66 73⎥ ⎥ 71 122 154 106 70 69⎥ 68 104 126 88 68 70⎥ ⎥ 60 70 77 68 58 75⎥ 64 59 55 61 65 83⎥ ⎥ 69 68 65 76 78 94⎦⎥ Como paso siguiente se le resta 128 a cada uno de los elementos de la matriz para que queden números entorno al 0, entre -128 y 127. ⎡ − 76 ⎢ − 65 ⎢ ⎢ − 66 ⎢ ⎢ − 65 ⎢ − 61 ⎢ ⎢− 49 ⎢ − 43 ⎢ ⎢⎣ − 41 − 73 − 69 − 69 − 70 − 67 − 63 − 57 − 49 − 67 − 73 − 60 − 57 − 60 − 68 − 64 − 59 − 62 − 38 − 15 −6 − 24 − 58 − 69 − 60 − 58 − 19 16 26 −2 − 51 − 73 − 63 − 67 − 43 − 24 − 22 − 40 − 60 − 67 − 52 − 64 − 59 − 62 − 58 − 60 − 70 − 63 − 50 − 55⎤ − 56⎥⎥ − 55⎥ ⎥ − 59⎥ − 58⎥ ⎥ − 53⎥ − 45⎥ ⎥ − 34⎥⎦ A continuación se procede a la aplicación DCT a la matriz anterior. Se aplica un redondeo de cada elemento al número entero más cercano [21]. 56 − 20 ⎡− 415 − 30 − 61 27 ⎢ 4 13 − 22 − 61 10 −7 ⎢ ⎢ − 47 7 77 − 25 − 29 10 ⎢ 34 − 15 − 10 6 ⎢ − 49 12 ⎢ 12 2 − 7 − 13 − 4 − 2 ⎢ 3 2 1 −6 −2 ⎢ −8 ⎢ −1 0 0 −2 −1 − 3 ⎢ 0 0 −1 − 4 −1 ⎢⎣ 0 −2 0 ⎤ − 9 5 ⎥⎥ 5 − 6⎥ ⎥ −2 2 ⎥ −3 3 ⎥ ⎥ 4 2⎥ 4 − 1⎥ ⎥ 1 2 ⎥⎦ CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 31 Si nos fijamos, el número más grande de toda la matriz resultado es el situado en la esquina superior izquierda siendo este el coeficiente DC antes mencionado. Cuantificación En JPEG se usa cuantificación uniforme. Cada matriz transformada está ordenada según las diferentes frecuencias, estando los componentes de frecuencias más bajas más cerca de la esquina superior izquierda de la matriz, y frecuencias más altas hacia la esquina inferior derecha. Por la propiedad de compactación de la energía de la transformada DCT, la información se concentrará en los valores de la esquina superior izquierda de la matriz. Además, puesto que el sistema visual humano es más sensible a variaciones de baja frecuencia, estos valores contienen la mayor parte de la información perceptible por el ojo. Por estos motivos, interesa preservar la información de los coeficientes de la parte superior izquierda de la matriz, dando menos importancia al resto. Para aprovechar estas características y lograr buenos ratios de compresión, se utilizan matrices de cuantificación para ponderar los coeficientes originales. Los valores originales obtenidos de la transformada se dividen por los valores de la matriz de cuantificación, logrando así ponderar los más importantes, y reduciendo considerablemente los que son poco perceptibles [22]. Una matriz de cuantificación suele tener valores altos para los componentes de alta frecuencia, y valores bajos o medios para valores de baja frecuencia. Con esto se consigue que gran parte de los valores de la matriz se vuelvan cero, lo que facilita mucho su compresión, además de reducir la amplitud de los demás valores, lo cual será bastante útil en la codificación. Se usan distintas matrices para las capas de luminancia y crominancia. El estándar JPEG permite el uso de matrices personalizadas para esta tarea, pero proporciona dos que se usan en la mayoría de los casos. Estas matrices se han obtenido mediante diversos estudios psicovisuales y consiguen unos resultados satisfactorios para la compresión de imágenes fotográficas. Se puede incrementar el ratio de compresión multiplicando estas matrices de cuantificación por un factor constante, al costo de perder calidad de imagen. Análogamente, podemos incrementar la calidad de la imagen resultante dividiendo la matriz por un factor constante, incrementando el tamaño de la imagen [37]. CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 32 Codificación Ya se ha dicho que los valores de la esquina superior izquierda de la matriz son más importantes, y el primer valor, el que más. En una muestra de 8x8 píxeles del mismo color, será el único valor distinto de cero. Por esa misma razón se procesan de distinto modo ese valor, y el resto de los valores de la matriz. A ese primer valor de la matriz se lo conoce como coeficiente DC, y al resto se los conoce como coeficientes AC. Los coeficientes DC de cada uno de los bloques de 8x8 se codifican mediante DPCM, guardando el coeficiente DC del primer bloque, y el resto como la diferencia entre el primer coeficiente DC, y el coeficiente del bloque en cuestión, como estos coeficientes son relativamente altos y la diferencia entre ellos no es demasiado, conseguimos guardar los mismos valores utilizando menos bytes. Para que la compresión sea aún mejor, se utiliza codificación Huffman con los tamaños de los coeficientes DC. Cada coeficiente DC se guarda como un par Size/Amplitud, siendo Size el tamaño en bits necesario para codificar la Amplitud del coeficiente DC ya codificado mediante DPCM. El valor de Size no se guarda tal cual, si no que se utiliza una tabla de códigos Huffman para los diferentes valores que puede tomar. El estándar JPEG propone una tabla para los tamaños de los coeficientes DC, aunque sería posible utilizar otras. Existe una tabla Huffman diferente para los coeficientes DC de la Luminancia y para los coeficientes AC de la crominancia. Los coeficientes AC se codifican mediante Run-Length coding, que aprovecha la gran cantidad de coeficientes de valor cero de la matriz para ahorrar en el tamaño final del archivo. En primer lugar, la matriz se despliega en un vector ordenando los coeficientes en zig-zag, tal como se muestra en la figura 2.2, ordenando los coeficientes por frecuencia, con lo que conseguimos que los valores de la esquina inferior derecha queden hacia el final, acumulando gran parte de los coeficientes iguales a cero [21]. CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 33 Figura 2.2: Orden de los coeficientes Una vez ordenados de este modo los coeficientes, empezamos el Run-Length Enconding. Para esta codificación, cada valor se guarda como un par (run/length, amplitud), el valor de runlenght nos indica la cantidad de coeficientes iguales a cero que preceden al coeficiente que vamos a codificar y el tamaño en bits necesario para codificar su amplitud. Por ejemplo, para una secuencia como esta [21]: 12, 3, 0, 0, 7, 0, 5, 0, 0, 0, 0, 26…... la codificación Run-Length sería la siguiente: (0/4,12), (0/2,3), (2/3,7), (1/3,5), (4/5,26)..... Siendo el valor Run la cantidad de ceros antes del valor a codificar, y el valor Length el mínimo tamaño en bits necesario para codificar ese valor. Los valores Run y Length pueden variar entre 0 y 15, y algunos de los valores están reservados, como el 15/0 y el 0/0. Como el valor Run está limitado a 15, no se puede representar con él una cadena de más de 15 ceros, para eso se utiliza el código 15/0, que significa que hay 15 ceros seguidos de otro coeficiente que también es cero. De este modo se pueden representar cadenas de ceros todo lo largas que se quieran. El código 0/0 sirve para indicar que a partir del último valor codificado, hasta el final del bloque todos los coeficientes son cero, como los ceros se acumulan al final con este código CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 34 nos ahorramos mucho espacio. Este código se conoce como EOB (End of Block). Una vez que se ha codificado mediante Run-Length, se utiliza codificación Huffman. Cada código run/length tiene asignado en una tabla su correspondiente código Huffman. Se utilizan tablas distintas para la Luminancia y la Crominancia. El estándar JPEG propone unas tablas, pero se podrían crear otras. De este modo guardamos el código Huffman del código Run-Length, seguido por el valor de la amplitud, codificado con el número de bits indicado en el Run-Length, y aplicando complemento a 1 (negar todos los bits) en caso de ser un valor negativo [21]. 2.2 Herramienta MATLAB MATLAB (“MATrix LABoratory”) es un programa para realizar cálculos numéricos con vectores y matrices [38]. Como caso particular, puede también trabajar con números escalares, tanto reales como complejos, con cadenas de caracteres y con otras estructuras de información más complejas. Una de sus capacidades más atractivas es la de realizar una amplia variedad de gráficos en dos y tres dimensiones. MATLAB además es un gran programa de cálculo técnico y científico que tiene un lenguaje de programación propio y para ciertas operaciones es muy rápido, cuando puede ejecutar sus funciones en código nativo con los tamaños más adecuados para aprovechar sus capacidades de vectorización. Constituye una de las aplicaciones más útiles que existen para poner a punto métodos numéricos en distintas asignaturas de ingeniería. Por ser una herramienta de alto nivel, el desarrollo de programas numéricos con MATLAB puede requerir hasta un orden de magnitud menos de esfuerzo que con lenguajes de programación convencionales, como Fortran, Pascal, C/C++, Java o Visual Basic [38]. En cualquier caso, el lenguaje de programación de MATLAB siempre es una magnífica herramienta de alto nivel para desarrollar aplicaciones técnicas, fácil de utilizar y que aumenta significativamente la productividad de los programadores respecto a otros entornos de desarrollo. Este lenguaje de programación dispone de un código básico y para el trabajo con imágenes, y contiene varias librerías especializadas (toolboxes), que permiten leer, modificar y crear imágenes en formatos RGB, interpretándolas como una matriz CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 35 tridimensional, es decir, tres matrices bidimensionales representantes de los colores rojo, verde y azul, facilitando de esta forma el trabajo con las imágenes [38]. Todas estas características hacen que MATLAB sea la herramienta adecuada para el método esteganográfico a implementar, tanto por el desarrollo y la variedad de sus funciones, que especialmente en el proceso de codificación del mensaje secreto, necesitan de una ejecución rápida que incluye lectura, recorrido y análisis del fichero gráfico portador del mensaje; así como por la facilidad que brinda en el trabajo con los bits de información, a nivel de píxel en todo el dominio espacial y espectral de la imagen. 2.3 Descripción del algoritmo propuesto El siguiente algoritmo esteganográfico utiliza una imagen digital como encubridora de datos en escala de grises. Si la imagen es a color (RGB), se considera como matrices de profundidad 3, por lo que el píxel esta formado por 3 valores entre 0 y 255 (24 bits) representantes del nivel de luminancia de cada color, y al transformarla en escala de grises obtendremos una matriz bidimensional de píxeles con valores entre 0 y 255 [19]. El mensaje oculto será un texto en código ASCII y para ocultarlo es necesario convertirlo en una secuencia de números binarios (ceros y unos), pues el trabajo a nivel de bits se simplifica significativamente [23]. Este algoritmo se divide en dos partes esenciales: el proceso de inserción y de extracción del mensaje oculto que se muestran en la figura 1 y 2 respectivamente y serán explicados con más detalle más adelante: Proceso de inserción: 1. La imagen es dividida en bloques de 8x8 píxeles para acelerar el proceso de cálculo de la DCT, en el caso de que la imagen no sea múltiplo de 8, se usan bit de relleno para poder obtener bloques de 8x8 en los extremos. 2. Trabajando de izquierda a derecha y de arriba hacia abajo, se aplica la DCT a cada bloque, transformando sus valores del dominio espacial al dominio de las frecuencias. 3. Cada bloque es dividido usando una matriz de cuantificación que esta dada con relación al factor de calidad de compresión deseado. CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 36 4. Se codifica el mensaje secreto utilizando un código de Hamming (7,4) con el objetivo de incrementar la robustez del mensaje oculto y corregir algún error, en caso de que se pierda algún bit del mensaje secreto debido a la compresión de la imagen en JPEG. 5. El mensaje codificado se inserta en el DC y en los primeros 9 AC de cada bloque de 8X8 y teniendo en cuenta que si es un “1” el bit del mensaje secreto a ocultar, el valor absoluto del DC o AC en el que se va a insertar el “1” se convierte en impar y si es un “0” el bit a ocultar entonces se convierte en par el DC o el AC correspondiente. 6. A cada bloque se le aplica la IDCT para hacer una reconstrucción de la imagen obteniendo así nuestro esteganograma. Proceso de extracción: 1. El esteganograma es dividido en bloques de 8x8 píxeles. 2. Trabajando de izquierda a derecha y de arriba hacia abajo, aplicamos la DCT a cada bloque del esteganograma. 3. Se extraen el valor modular correspondiente al AC y a cada uno de los primeros 9 AC de cada bloque de 8X8, si este valor es impar, indica que corresponde a un “1” el valor del bit del mensaje secreto que estamos extrayendo y si es par corresponde a un “0” y así sucesivamente hasta obtener todos los bits del mensaje secreto codificado. 4. Los bits obtenidos del paso anterior se hacen pasar por el decodificador de Hamming (7,4) obteniendo como resultado nuestro mensaje secreto, el cual después de convertido en código ASCII podemos leer en pantalla. CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG Figura 2.3 Proceso de Inserción del Mensaje Secreto. 37 CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 38 Figura 2.4 Proceso de Extracción del Mensaje Secreto 2.3.1 Proceso de inserción En este proceso el algoritmo esteagnográfico se encarga de la introducción del mensaje oculto en la imagen utilizada como cubierta y en es donde se realizan los análisis más extensos y comparaciones para la toma de decisiones de sus procesos, así como conversiones, trabajo con matrices y se introduce un codificador para aumentar la robustez del mensaje insertado; por lo que requiere de un mayor tiempo de ejecución. Para garantizar la robustez ante la compresión JPEG es necesario ocultar los datos en áreas significativas de la imagen, de forma tal que al ser comprimida esta con un factor de calidad igual o mayor que la matriz de cuantización que usaremos en el proceso de ocultamiento del mensaje, este se pueda recuperar sin ninguna pérdida. El primer paso, una vez obtenida la imagen a color, consiste en convertirla a escala de grises para obtener la matriz de luminancia con las características explicadas anteriormente. Después al igual que en JPEG dividimos esta matriz en bloque de 8X8 para acelerar el CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 39 proceso del cálculo de la DCT, dado que la imagen encubridora puede ser de cualquier tamaño y se demoraría notablemente el cálculo de la DCT en una matriz con grandes dimensiones. En caso de que las dimensiones de la imagen no sean múltiplos de 8 se usan bits de relleno para realizar el proceso. Para realizar este paso utilizamos la función del MATLAB: “blkproc”, ver más detalles en el Anexo V. Posteriormente trabajando de izquierda a derecha y de arriba hacia abajo, se aplica la DCT a cada bloque del esteganograma, con el objetivo de transformar del domino espacial al dominio de la frecuencia, que es donde será ocultado el mensaje, porque como se explicó en el epígrafe 2.1.2 Esquema del compresor JPEG, la DCT nos brinda una alto valor de compactación de la energía, quedando ubicados los valores significativos de las frecuencias de cada bloque ,que son los más significativos ante modificaciones para el HVS, ubicados en la parte izquierda superior y los menos significativos en el resto del bloque. Cada una de estas matrices de 8x8 se cuantifica mediante la aplicación de una matriz máscara que se muestra a continuación: ⎡1 ⎢1 ⎢ ⎢1 ⎢ 1 mask = ⎢ ⎢0 ⎢ ⎢0 ⎢0 ⎢ ⎣⎢0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0⎤ 0⎥⎥ 0⎥ ⎥ 0⎥ 0⎥ ⎥ 0⎥ 0⎥ ⎥ 0⎦⎥ donde podemos apreciar que la matriz resultante después de la cuantización va a conservar los 10 valores de las frecuencias que se encuentren en la parte izquierda superior donde se encuentren los “1” y el resto de los valores con menor importancia se despreciaran y se pone en su lugar un cero. Brindándole al algoritmo propuesto una robustez equivalente a una compresión JPEG con una tasa mayor o igual al 40%. El mensaje secreto se convierte a binario y se le adiciona una bandera al final con el objetivo de minimizar la sencillez del proceso de extracción del mensaje oculto como se explicará más adelante. El mensaje oculto además se codifica mediante un código Hamming (7,4), con ayuda de la funciones del MATLAB “hammgen y encode” (ver más CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 40 detalles en Anexo V), brindándole así una tolerancia al error, de 1 bits por cada bloque de 7 bits incrustados en la imagen. Aumentándole de esta forma la robustez al mensaje y evitando así pérdidas de algunos de los bits de este, en caso de tener que afrontar canales de comunicaciones ruidosos el esteganograma. Posteriormente el mensaje codificado se inserta en el DC y en los primeros 9 AC de cada bloque, que se corresponden con las posiciones de los “1” en la matriz mostrada en (2-6). Esto se logra mediante un proceso de comparación y redondeo, teniendo en cuenta que si es un “1” el valor del bit del mensaje secreto a ocultar, el valor absoluto del DC o AC en el que se va a insertar el “1” se convierte en impar y si es un “0” el bit a ocultar, entonces se convierte en par el DC o el AC correspondiente. Para redondear el valor se tiene en cuenta no afectarlo significativamente, dado que si se varía notablemente, se afectaría la imperceptibilidad del mensaje oculto, parámetro fundamental de todo sistema esteganográfico. Para lograrlo se multiplica por 100 cada valor de frecuencia de todos bloques cuantizados y se redondean sus valores, garantizando así que sean robustas ante compresión las posiciones donde se ocultaron los bits del mensaje oculto, y que a la vez exista una compensación entre la robustez obtenida y la imperceptibilidad sacrificada. Si se multiplicara por un número menor se obtendría una robustez aun mayor pero se modificaría perceptiblemente la imagen porque existirá una diferencia considerable en la modificación del valor del píxel correspondiente; y escoger valores menos significativos para ocultar los bits del mensaje, lo que se conseguiría multiplicando por un número mayor que 100 degradaría la robustez del algoritmo al resultar una imagen que perdería la información ante el ruido del canal o cualquier proceso de recorte , filtrado o compresión con factores de calidad (Qf) pequeños, entre muchos otros por los cuales se hace pasar la imágenes digitales. El paso anterior con el proceso de redondeo nos brinda la ventaja además de no tener que convertir la matriz de la imagen a binario para ocultar el mensaje en los bits menos significativos, realizando la inserción con un menor coste computacional y en un menor tiempo requerido. CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 41 Después a cada bloque se le aplica la IDCT para hacer una reconstrucción de la imagen mediante la función del MATLAB “blkproc” que fue utilizada al transformar al dominio de las frecuencias, obteniendo así nuestro esteganograma con un alto parecido a la imagen original. 2.3.2 Proceso de extracción El proceso de extracción del mensaje oculto es más sencillo, pues este consiste de forma general en leer los datos que se encuentran en posiciones específicas de la imagen donde fue ocultado el mensaje secreto y decodificar dicho mensaje para extraerlo correctamente. Este proceso requiere de un menor número de transformaciones en la imagen y cálculos con matrices, por lo tanto el coste computacional y el tiempo de demora serán más pequeño. El primer paso es dividir el esteganograma salvado del proceso de inserción descrito anteriormente en bloques de 8X8 píxeles y de igual forma que en el proceso anterior trabajando de izquierda a derecha y de arriba hacia abajo, aplicamos la DCT a cada bloque del esteganograma. Después se multiplican por 100 cada uno de los valores de todos los bloques de 8X8 de la imagen y se extraen el valor modular correspondiente al AD y a cada uno de los primeros 9 AC, mediante un proceso de comparación se analiza si el valor extraído es impar, indica que corresponde a un “1” el valor del bit del mensaje secreto que estamos extrayendo y si es par corresponde a un “0” y así sucesivamente se van obtienen los bits del mensaje secreto codificado. Cada 14 bits extraídos, estos se decodifican formándose una palabra binaria de 8 bits, la cual se compara con la bandera utilizada en el algoritmo de inserción del mensaje oculto, y en caso de corresponderse se detiene el proceso de extracción del mensaje, de lo contrario se siguen extrayendo bits hasta obtener el mensaje completo. Una vez obtenidos los bits del paso anterior, se hacen pasar por el decodificador de Hamming (7,4), mediante la funciones “hammgen y decode” (ver más información en el Anexo VI); y obteniendo como resultado nuestro mensaje secreto, el cual después de convertido en código ASCII podemos leer en pantalla. CAPÍTULO 2. DISEÑO DE UN MÉTODO ESTEGANOGRÁFICO ROBUSTO ANTE LA COMPRESIÓN JPEG 42 2.4 Conclusiones del capítulo El esquema esteganográfico diseñado e implementado en MATLAB v7.0 es un método de sustitución, desarrollado en el dominio frecuencial y que además selecciona áreas significativas de la imagen que son menos afectadas al aplicar compresión JPEG a la imagen para ocultar su mensaje secreto. Por ello, este algoritmo posibilita un alto nivel de robustez ante la compresión JPEG, sin afectar significativamente la imperceptibilidad del esteganograma. En comparación con muchos métodos espaciales que generalmente poseen una mayor capacidad de empotramiento de la información oculta y una mayor imperceptibilidad, este algoritmo sacrifica niveles de imperceptibilidad y capacidad de inserción, para lograr una mayor robustez contra ataques tales como: compresión o recorte de la imagen y ruido en el canal. ANÁLISIS DE LOS RESULTADOS CAPÍTULO 3. 43 ANÁLISIS DE LOS RESULTADOS Este capítulo se validará el método esteganográfico propuesto en el capitulo 2 mediante la aplicación de algunos ataques y el análisis de los resultados alcanzados. Para la realización de pruebas a este algoritmo implementado en MATLAB, se utilizaron cuatro imágenes con diferentes tamaños y contenidos de detalle, con el objetivo de probar la eficiencia del mismo en varios casos. Los resultados obtenidos se evaluaron teniendo en cuenta la robustez, imperceptibilidad y capacidad de inserción de cada uno de los esteganogramas obtenidos. 3.1 Criterios de evaluación Un sistema esteganográfico tiene que generar un esteganograma suficientemente inocente, ya que no debe de levantarse ninguna sospecha sobre la existencia del mensaje oculto. Por lo tanto, el grado de distorsión o imperceptibilidad del esteganograma respecto a la imagen original es un asunto muy importante. Una medida de distorsión comúnmente usada y explicada anteriormente es el PSNR (relación señal a ruido pico) del esteganograma con respecto a la imagen original, como se muestra en (3.1) y (3.2). 255 2 PSNR = 10 * log 10 MSE M MSE = N ∑∑ ( X (i, j ) − X ′(i, j )) i =1 j =1 M *N (3-1) 2 (3-2) ANÁLISIS DE LOS RESULTADOS 44 Donde X y X ′ son la imagen encubridora y el esteganograma, respectivamente, y M , N son el tamaño de ambas imágenes. Además de la imperceptibilidad, la capacidad de ocultamiento es sumamente importante. Manteniendo una distorsión pequeña posible, todos sistemas esteganográficos buscan aumentar la capacidad de ocultamiento. La capacidad de ocultamiento para un sistema esteganográfico cuando la cubierta es una imagen, se mide en número de bits de mensaje secreto por píxel (bpp), como se muestra en (3.3). Capacidad _ de _ Ocultamiento = Número _ de _ Bits ( M s ) Número _ de _ Bits ( I c ) (3-3) Donde M s es el mensaje oculto e I c la imagen encubridora. Generalmente, cuando un esteganograma se transmite por un canal ideal y no recibe ningún tipo de modificación, tal como compresión, el mensaje oculto debe de recuperarse al 100%. Sin embargo cuando el canal de transmisión no es ideal (introduce alguna cantidad de ruido o recibe alguna modificación), no se puede recuperar al 100% el mensaje oculto. El error de recuperación del mensaje oculto se mide generalmente tasa de bits erróneo "Bit Error Rate" (BER) y se calcula en (3.4). BER = Número _ Bits _ Erróneos Número _ Bits _ total _ transmitid os (3-4) Los tres asuntos mencionados anteriormente forman contrapartes cuando se trata de aumentar capacidad de ocultamiento, sacrificaría el grado de imperceptibilidad y robustez, mientras se trata de aumentar robustez del sistema, sacrificarían capacidad o imperceptibilidad y viceversa. Este algoritmo de ocultamiento de datos se evalúa desde diferentes puntos de vista, usando varias imágenes (Lenna, Pirámides, Mona Lisa, Tigre), figura 3.1. ANÁLISIS DE LOS RESULTADOS (a) (b) (c) 45 (d) Figura 3.1 Imágenes pruebas. (a) Lenna, (b) Mona Lisa, (c) Pirámide, (d) Tigre El esteganograma resultante del proceso de inserción de cada una de las imágenes será sometido a los siguientes ataques: 1. Compresión JPEG. 2. Ruido Impulsivo (Salt & Pepper). Después de haber atacado el esteganograma, pasaremos a la parte de extracción del mensaje oculto, midiendo la eficiencia del algoritmo en base a tres criterios: 1. Imperceptibilidad (PSNR). 2. Robustez (BER) 3. Capacidad de Inserción. 3.2 Ataque Compresión JPEG Del análisis de la tabla 3.1, que muestra la tasa de bit erróneo (BER) cuando el esteganograma sufre compresión JPEG con diferentes factores de calidad ( Q f ), podemos decir que el algoritmo propuesto es robusto ante la compresión JPEG, que emplea un factor de calidad mayor o igual a 70% para todas las imágenes usadas, e incluso para un 75 % de las imágenes pruebas. Además, coincide que para un factor de calidad de Q f =40%, el mensaje oculto se recupera sin errores; sin embargo, al comprimir la imagen con un factor de calidad menor que 40%, el número de errores extraído del mensaje aumenta significativamente, y la distorsión causada por la compresión es muy grande ANÁLISIS DE LOS RESULTADOS 46 ( PSNR ≤ 30dB ) para parecer una imagen inocente en la transmisión, como se muestra la tabla 3.2 de distorsión del esteganograma para distintos valores de factor de calidad. Si observamos los valores de BER y PSNR para la imagen “Pirámides.jpg” en específico, notaremos que es la que menos distorsión sufre para iguales factores de calidad. En cambio, el mensaje oculto que se encuentra empotrado en esta posee mayor número de errores al extraerlo que los del resto de las imágenes para valores de Q f pequeños. De las tablas 3.1 y 3.2, determinamos que la matriz de cuantificación M 70 es una buena selección para comprimir las imágenes esteganografiadas con el algoritmo propuesto, considerando que una compresión JPEG con Q f =70% ocasiona una distorsión mínima que puede ser tolerada por el sistema visual humano. Además, el mensaje extraído carece de errores. Tabla 3.1 Tasa de bits erróneo (BER) cuando el esteganograma sufre compresión JPEG con diferentes factores de calidad. Calidad de BER (%) Compresión (%) Lenna Mona Lisa Pirámides Tigre Qf = 100 0 0 0 0 Qf =90 0 0 0 0 Qf =80 0 0 0 0 Qf =70 0 0 0 0 Qf =60 0 0 0.5814 0 Qf =50 0 0 1.0714 0 Qf =40 0 0 1.1628 0 Qf =30 1.0714 1.25 0.71429 0.89286 Qf =20 5.7143 10.714 8.2143 Qf =10 Qf =0 - ANÁLISIS DE LOS RESULTADOS 47 Tabla 3.2 Distorsión del esteganograma cuando este sufre compresión JPEG con diferentes factores de calidad. Calidad de Compresión (%) Qf = 100 Qf =90 Qf =80 Qf =70 Qf =60 Qf =50 Qf =40 Qf =30 Qf =20 Qf =10 Qf =0 Lenna 32.7 32.617 32.481 32.675 32.17 31.365 31.196 31.069 30.531 30.366 29.094 PSNR (dB) Mona Lisa Pirámides 32.833 33.003 32.593 32.968 32.593 33.016 32.842 32.947 32.202 32.828 31.275 32.574 30.939 32.6 30.869 32.31 30.551 31.659 30.852 32.506 30.398 31.728 Tigre 32.346 32.251 31.834 32.352 31.321 30.325 29.9 29.8 29.554 29.315 28.439 En las figuras 3.2 y 3.3 se muestran graficados todos los valores correspondientes a las tablas 3.1 y 3.2. Figura 3.2 Tasa de bits erróneo (BER) cuando el esteganograma sufre compresión JPEG con diferentes factores de calidad. ANÁLISIS DE LOS RESULTADOS 48 Figura 3.3 Distorsión del esteganograma cuando este sufre compresión JPEG con diferentes factores de calidad. La tabla 3.3 muestra mensajes extraídos de un esteganograma comprimido por JPEG con factores de calidad mayores o iguales que 40% y menores que 40%, respectivamente. El proceso de inserción y extracción del mensaje secreto se realizó en una PC con las siguientes características: Celeron (R), CPU con 2.40GHz y 256 MB de RAM. La imagen utilizada fue la de Lenna (512X512 píxel) que se muestra en la figura 3.4 a). El texto oculto es un fragmento del libro “El principito” de Antoine de Saint Exupery. Para una imagen con estas características (512X512 píxel) el algoritmo diseñado permite ocultar un mensaje máximo de 2925 caracteres, parámetro que especifica el programa al introducirle la estegoimagen. El proceso de inserción de dicho mensaje lo realizó en un tiempo de 6.031 segundos y el proceso de extracción en un tiempo de 5.687 segundos. Si utilizamos en cambio una imagen de Lenna más pequeña con resolución de 131X131 píxel, podemos ocultar como máximo un mensaje de 191 caracteres, pero en un tiempo mucho menor, de 0.563 segundos y extraerlo en 0.547 segundos, realizándolo en la misma PC. ANÁLISIS DE LOS RESULTADOS 49 Tabla 3.3 Mensaje recuperado con Q f ≥ 40% y con Q f < 40% Mensaje recuperado Mensaje recuperado Q f ≥ 40 BER=0 Q f < 40 BER=1.2868 % Solo se ve bien con el corazón; lo esencial es invisible a los ojos. Sólo sí¨ve bien con el corazûî» lo esencial es invisible a los ojos. La tabla 3.3 muestra el mensaje recuperado después del ataque de compresión JPEG aplicando diferentes matrices de cuantificación en el proceso de inserción y detección. Cuando el factor de calidad de la compresión es mayor o igual a 40%, el mensaje oculto se recupera completamente (BER=0). Sin embargo, cuando el factor de calidad se reduce a valores menores que 40% (la tasa de compresión aumenta), el mensaje oculto no se puede recuperar completamente (BER=0.012868) y se pierden un 1.29 % de los bits totales del mensaje oculto. En la figura 3.4 se muestran la imagen original y la imagen con el mensaje oculto (esteganograma) para una calidad de compresión Q f = 40% y podemos observar que la distorsión en el esteganograma debido a la inserción del mensaje secreto es muy pequeña e imperceptible para el HVS. ANÁLISIS DE LOS RESULTADOS (a) 50 (b) Figura 3.4 (a) Imagen original, (b) Esteganograma para una compresión JPEG con Q f = 40% . 3.3 Ataque Ruido Impulsivo Con base a los resultados que se muestran en la gráfica 3.5 y 3.6, se concluyó que el algoritmo es vulnerable a los taques de ruido impulsivo con densidad de ruido mayor o igual al 0.2 %, dado que la imagen atacada con una densidad mayor o igual que 0.2 % tiene una PSNR menor a 30 dB, la cual ya no es una imagen inocente para ser imperceptible al HVS y además el sistema propuesto después de este ataque recupera el mensaje oculto con mayor valor de 0.005. Tabla 3.4 Tasa de bits erróneo para diferentes porcentajes de ruido impulsivo. Porcentaje de Ruido Impulsivo (%) 0 0.2 0.4 0.6 0.8 1.0 1.2 BER (%) Lenna Mona Lisa Pirámides 0 0 0 4.2279 5.3309 3.4926 8.4559 16.176 8.6397 20.735 21.395 29.983 25.588 26.113 30.221 26.28 26.98 36.684 34.449 38.432 40.863 Tigre 0 7.7206 10.294 15.581 18.05 24.081 28.352 ANÁLISIS DE LOS RESULTADOS 51 Tabla 3.5 Distorsión del esteganograma para diferentes porcentajes de ruido impulsivo. Porcentaje de Ruido Impulsivo (%) 0 0.2 0.4 0.6 0.8 1.0 PSNR(dB) Lenna Mona Lisa Pirámides 32.7 32.833 33.003 29.105 29.287 29.261 27.333 27.192 27.535 25.902 25.921 25.026 24.862 24.876 24.923 24.095 24.086 24.006 Tigre 32.346 28.931 27.203 25.813 24.974 24.114 Figura 3.5 Tasa de bits erróneos (BER) para diferentes densidades de ruido impulsivo. ANÁLISIS DE LOS RESULTADOS 52 Figura 3.6 Distorsión del esteganograma para diferentes densidades de ruido impulsivo. 3.4 Conclusiones del método El algoritmo implementado en el capítulo anterior fue diseñado para ser robusto ante ataques JPEG. La robustez contra ataques de compresión JPEG puede variar dependiendo de la matriz de cuantificación que se use en el algoritmo. Esto quiere decir que si se usa una matriz de cuantificación con un factor de calidad 40% en el algoritmo, el esteganograma podrá resistir compresiones JPEG con factores de calidad desde un 100% hasta un 40%. La transparencia del mensaje oculto y tasa de bits ocultos dependen ligeramente de las imágenes encubridoras, ya que imágenes con mayor detalle, tales como 'Tigre’ se puede ocultar más información que en imágenes planas, tales como ‘Pirámides’ y la distorsión numérica (PSNR) se disminuye cuando aumenta la tasa de bits ocultos, lo cual se puede observar en la gráfica 3.3 donde la imagen ‘Tigre’ es la que posee menor PSNR y la imagen ‘Pirámides’ es la que posee mayor PSNR y por tanto es la más imperceptible. Para ataques de ruido impulsivo, en el sistema propuesto el mensaje oculto no se recupera completamente. Considerando el nivel de distorsión que causa a la imagen y la calidad del canal de comunicación, se puede concluir que el sistema propuesto es moderadamente robusto. CONCLUSIONES Y RECOMENDACIONES 53 CONCLUSIONES Y RECOMENDACIONES Conclusiones Con el desarrollo del presente trabajo: ¾ Se incluyó un estudio del estado del arte de la esteganografía, principalmente la esteganografía en imágenes digitales, así como su amplia variedad de aplicaciones. ¾ Se analizaron las características fundamentales de las estegosistemas, como son: la imperceptibilidad del mensaje oculto, la capacidad de empotramiento, la seguridad y la robustez ante la compresión de imágenes digitales. ¾ Fueron examinadas las técnicas de compresión de imágenes digitales más utilizadas, en específico la compresión JPEG, determinándose las posibles pérdidas de calidad e información visual en las imágenes digitales sometidas a dicha compresión y se ubicacaron los píxeles menos afectados en el la imagen durante el proceso de compresión. ¾ Se determinó que el método de Hamming (7,4) puede ser utilizado en la implementación de un algoritmo esteganográfico, teniendo en cuenta su razón de código e incidencia en la capacidad de inserción. ¾ Fue diseñado un método esteganográfico que cumple eficientemente con el enmascaramiento de información en imágenes digitales: aportando los niveles requeridos de robustez ante la compresión JPEG, dado que el proceso de inserción del mensaje oculto se realiza en el dominio de la DCT y en los píxel con menos probabilidad de pérdidas de información; sin afectar notablemente la imperceptibilidad del esteganograma. CONCLUSIONES Y RECOMENDACIONES 54 ¾ La validación y documentación del método estudiado permitió la verificación de sus potencialidades, la comparación con otros métodos existentes y el incremento de su valor teórico-práctico. Recomendaciones Aunque el presente trabajo cumplió exitosamente los objetivos planteados, las siguientes recomendaciones pueden orientarnos a la búsqueda de un desempeño más exitoso de la implementación del método esteganográfico: ¾ Continuar el estudio de las características de las imágenes y de la compresión JPEG, que nos permita realizar una metodología para la selección de la estegoimagen adecuada para un proceso esteganográfico determinado. ¾ Continuar el estudio de otras formas de realizar la selección de los píxel donde se oculta el mensaje secreto. ¾ Investigar como poder seleccionar los bloques de 8X8 que posean mayor energía despues de ser aplicada la DCT a la imagen , con el obetivo de ocultar el mensaje secreto solamente en píxeles específicos de estos bloques; y garantizar así que los bloques donde se oculten la información sean los menos afectados por la compresión. ¾ Continuar el estudio de otros métodos más eficientes de codificación, que permitan detección y corrección de errores, con el objetivo de aumentar la capacidad de incrustación del mensaje. ¾ El tamaño de las estegoimagenes utilizadas incide significativamente en la demora del proceso esteganográfico implementado, por lo que el mismo representa un reto continuo para versiones posteriores de la actual implementación. REFERENCIAS BIBLIOGRÁFICAS 55 REFERENCIAS BIBLIOGRÁFICAS [1] D. Master, Introducción a la Esteganografía 25 pages., 2004.Disponible en: http://www.hpn-sec.net/death/articles/int_esteg/Estega.pdf [2] A. R. Garnacho, J. M. E. Tapiador, and J. C. H. Castro, "Esteganografía, Esteganálisis e Internet," Instituto "Juan Velázquez de Velasco" de Investigacion para la Seguridad y la Defensa. Carlos III de Madrid., 2007.Disponible en: http://commons.wikimedia.org/wiki/File:Estegosistema.JPG [3] F. Diatel, "Esteganografía y Marcas de agua," 2002.Disponible en: http://asignaturas.diatel.upm.es/seguridad/trabajos/trabajos/curso%2001%2002/este ganografia.pdf [4] A. P. Carlos and S. H. Eduardo, "Desarrollo de Técnicas de Esteganografía," Universidad Nacional de Trujillo Escuela Académico Profesional de Informática, 6 pages, 2004 [5] Á. T. Rodríguez, "Sistema Esteganográfico para Imágenes JPEG2000," Universidad Autónoma de Barcelona. Escuela Técnica Superior de Ingenieria, 59 pages, 2008.Disponible en: http://www.recercat.net/bitstream/2072/13807/1/PFC+Alex+Torres+Rodriguez.pdf [6] L. J. C. Ardita, "Esteganografía," CYBSEC. Fundamentos de Seguridad Informática, Escuela Politécnica del Ejército, vol. Maestria en Gerencia de Sistemas, 23 pages, 2005.Disponible en: http://www.cybsec.com/Stegano.pdf [7] R. G. Cárdenas, "Esteganografía língustica," Segundo Congreso de Seguridad en Cómputo ULSA 2007, 7-9 de marzo 2007.Disponible en: http://zeus.lci.ulsa.mx/congreso07/Presentaciones/Roberto%20G%F3mez%20%20Esteganografia.pdf [8] H.-C. Wu, N.-I. Wu, C.-S. Tsai, and M.-S. Hwang, "Image Steganographic Scheme Based on Pixel-Value Differencing and LSB Replacement Methods," IEEE Proceding -Vis. Image Signal Process, vol. 152, pp. 611-615, October 2005.Disponible en: http://ieeexplore.ieee.org/iel5/2200/32472/01515999.pdf REFERENCIAS BIBLIOGRÁFICAS 56 [9] G. A. Isaza, C. A. Espinosa, and S. M. Ocampo, "Análisis de Técnicas Esteganográficas y Estegoanálisis en Canales Encubiertos, Imágenes y Archivos de Sonido," Vector, vol. 1, pp. 29-38, enero-diciembre 2006.Disponible en: http://vector.ucaldas.edu.co/downloads/Vector1_3.pdf [10] K. M. Sullivan, "Image Steganalysis: Hunting & Escaping," Electrical and Computer Engineering, University of California. Santa Barbara, 178 pages, 2005.Disponible en: http://vision.ece.ucsb.edu/publications/05ThesisSullivan.pdf [11] C. L. V. Bautista, J. C. L. Hernández, M. N. Miyatake, and H. M. P. Meana, "Esteganografía en una Imagen Digital en el Dominio DCT," Científica. Instituto Politécnico Nacional, vol. 11, pp. 169-176, 24-Febrero 2007.Disponible en: http://redalyc.uaemex.mx/redalyc/pdf/614/61411403.pdf [12] A. G. Garrido, S. M. T. Llanera, M. E. G. Ramos, and S. O. Alías, "Marcas de Agua: Firma Digital," 2006.Disponible en: http://www.sav.us.es/formaciononline/asignaturas/asigpid/apartados/textos/recursos /firmadigital03/doc.pdf [13] L. M. Marvel, C. T. Retter, and J. Charles G. Boncelet, "A Methodology for Data Hiding Using Images," IEEE Latin America Transactions1998.Disponible en: http://www.research.telcordia.com/society/TacCom/papers98/30_07i.pdf [14] P. A. H. Avalos, "Algoritmo Robusto de Marcas de Agua Usando Similitudes Basado en la Codificación Fractal," Instituto Nacional de Astrofísica, Optica y Electrónica, 104 pages, 2008.Disponible en: http://ccc.inaoep.mx/~cferegrino/Publicaciones/Tesis MSc Pedro Hernandez Avalos.pdf [15] V. H. Guzmán, C. C. Ramos, M. N. Miyatake, and H. P. Meana, "Algoritmo de Marca de Agua Basado en la DWT para Patrones Visualmente Reconocibles," IEEE Latin America Transactions, vol. 4, pp. 255-265, June 2006.Disponible en: http://ieeexplore.ieee.org/iel5/9907/4472117/04472122.pdf?arnumber=4472122 [16] J. L. Hernández, C. V. Bautista, M. N. Miyatake, and H. P. Meana, "Algoritmo Esteganografico Robusto a Compresión JPEG Usando DCT," 2005.Disponible en: http://tlapixqui.izt.uam.mx/septcol/pags/resumenes/Contrib8_Cripto_M-Nakano.pdf [17] G. V. Ginneken, T. Christiaensen, W. Vloeberghs, and T. Dams, "Survey of Quantization Index Modulation Techniques in Digital Watermarking.," Digital Watermarking2004.Disponible en: http://www.asci.tudelft.nl/General_Information/AnnualReport2004.pdf [18] V. V. C. S. I. Limited, "Multiresolution Watermark Based on Wavelet Transform for Digital Images," 2005.Disponible en: http://www.mathworks.com/matlabcentral/fileexchange/3508?controller=file_infos &download=true [19] J.Ruiz, "Compresión de Imagen," Universidad Distrital Francisco Jose de Caldas, 75 pages, 2004.Disponible en: http://www.udistrital.edu.co/comunidad/profesores/jruiz/jairocd/texto/uit/compimag e.pdf REFERENCIAS BIBLIOGRÁFICAS 57 [20] A. R. G. Aguilar, "Modelos Visuales en el Análisis de la Calidad de imagen," Departamento de Ingeniería Electrónica. Instituto de Óptica “Daza de Valdés” (C.S.I.C.), Universidad Politécnica de Madrid. Escuela Técnica Superior de Ingenieros de Telecomunicación, 2006.Disponible en: http://optica.csic.es/papers/pfc_ana.pdf [21] I. C. Cortizo, J. L. Castro, N. L. Sambade, and I. N. Gómez, "Estándar de Compresión de Imagen JPEG," 2006-2007.Disponible en: http://www.des.udc.es/~adriana/Perifericos/Trabajos2006/Trabajo1_jpeg_apuntes.p df [22] J. U. Moltó, "Compresión de imágenes mediante JPEG," 2006 [23] T. P. Santamaría, "Electrónica Digital," Dpto. de Ing. Electrónica y C., Universidad de Zaragoza, 9 pages, 1998.Disponible en: http://unizar.es/euitiz/areas/aretecel/docencia/digitel/digitelib.htm [24] J. Adiego, M. A. M. Prieto, and P. d. l. Fuente, "Edge-Guided Natural Language text Compression," Depto. de Informática, Universidad de Valladolid, 14-25 pages, 2007 [25] R. Apolloni and S. Molina, "Códigos Correctores de Errores," Cátedra de Teoría de la Información, 1998.Disponible en: http://www.unsjcuim.edu.ar/portalzonda/congreso/papers/1998/CON12.PDF [26] A. A. Davydov and L. M. Tombak, "An alternative to the Hamming code in the class of SEC-DED codes in semiconductor memory," Information Theory, IEEE Transactions on, vol. 37, pp. 897-902, 8 de junio 2004 [27] R. W.Hamming, "Error detecting and error correcting codes," The Bell System Technical Journal, vol. XXVI, pp. 147-160, April 1950.Disponible en: http://users.ece.utexas.edu/~touba/research/jlpe05.pdf [28] R. A. Escamilla, "Códigos para Detección y Corrección de Errores en Comunicaciones Digitales," Ingenierías, vol. Vol. VII, pp. 51-55, OctubreDiciembre 2004.Disponible en: http://ingenierias.uanl.mx/25/25_codigos.pdf [29] I. Honkala and A. Tiet¨av¨ainen, "Codes and number theory," in Handbook of Coding Theroy, Eds. Amsterdam, vol. II, 1141-1194 pages, 2004 [30] E. Aldabas, M. Corbalán, and J. M. Cisa, "Introducción a los Códigos de Hamming," Escuela Universitaria de Engenieria Técnica Industrial de Terrassa,, 111 pages, 2006.Disponible en: http://www.jcee.upc.es/JCEE2006/pdf_ponencies/PDFs/JCEE06_14_12_T2.pdf [31] R. A. Podestá, "Códigos Cíclicos," Jornadas de Criptografía y Códigos Autocorrectores (JCCA), pp. 29, 20-24 de noviembre 2006.Disponible en: http://www.famaf.unc.edu.ar/~cripto06/cursoPodesta.pdf [32] M. Massoud, "Hamming Code," pp. 14, 24 de marzo 2008.Disponible en: http://www.engineer.tamuk.edu/cleung/EEEN4329/10_Hamming%20Code.pdf [33] M. Malek, "Binary Linear Hamming Codes," California State University, East Bay, 2007.Disponible en: http://www.mcs.csueastbay.edu/~malek/Class/Hamming.pdf REFERENCIAS BIBLIOGRÁFICAS 58 [34] U. K. Kumar and B.S.Umashankar, "Improved Hamming Code for Error Detection and Correction," Wireless Pervasive Computing, B.N.M. Inst. of Technol, 2007.Disponible en: http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4147113 [35] M. Moisio, "The moments of a Kloosterman sum and the weight distribution of a Zetterberg type binary cyclic code," IEEE Trans. Inf. Theory, vol. IT-53, pp. 8438472007 [36] Fortonani, D. Peralta, A. Wilde, and M. Lucila, "Acentuado de una Imagen en el Dominio JPEG," Facultad de Ingenier´ıa y Ciencias Hídricas, Universidad Nacional del Litoral, 9 pages, 2007.Disponible en: http://cpdsifich.wdfiles.com/local--files/tpsaplicacion/2007_Fortonani-Acentuado.pdf [37] R. Molina, "Codificación basada en Transformaciones. Aplicada a Imagenes," Depto. de Ciencias de la Computación e Inteligencia Artificial, 46 pages, 2004 [38] J. G. d. Jalón, J. I. Rodríguez, and J. Vidal, Aprenda Matlab 7.0 Como si Estuviera en PrimeroMadrid: Escuela Técnica Superior de Ingenieros Industriales. Universidad Politécnica de Madrid, 2005 GLOSARIO DE TÉRMINOS 59 GLOSARIO DE TÉRMINOS 9 ASCII: American Standard Code for Information Interchange, (código utilizado para la codificación de texto). 9 BER: Bit Error Ratio, (Razón de error de bit). 9 CCE: Código corrector de errores. 9 CPU: Control Process Unit, (Unidad de control y procesamiento). 9 DCT: Discrete Cosine Transform, (Transformada discreta del coseno). 9 DFT: Discrete Fourier Transform, (Transformada discreta de Fourier). 9 DWT: Discrete Wavelet Transform, (Transformada discreta de Wavelet). 9 EOB: End of Block, (final de bloque). 9 GIF: Graphics Interchange Format, (Formato de compresión de imágenes sin pérdidas). 9 HVS: Human Visual System, (Sistema visual humano). 9 IDCT: Inverse Discrete Cosine Transform, (Transformada discreta del coseno inversa). 9 IP: Internet Protocol, (Protocolo de internet). 9 ISO: International Organization for Standardization, (Organización internacional para la estandarización). 9 JPEG: Join Photographic Experts Group, (Estándar de compresión de imágenes con pérdidas que utiliza la DCT). GLOSARIO DE TÉRMINOS 60 9 JPEG 2000: Join Photographic Experts Group 2000, (Estándar de compresión de imágenes sin distorsión que utiliza la DWT). 9 LSB: Least Significan Bit, (Bit menos significativo). 9 LZ: Liv Zempel, (Método de codificación usado para la compresión sin pérdida). 9 LZW: Lempel Ziv Welch, (Algoritmo de compresión sin pérdida). 9 MAE: Maximum Absolute Error, (Error absoluto máximo). 9 MATLAB: Matriz Laboratory, (Herramienta de procesamiento y programación que realiza cálculos numéricos con matrices). 9 MSE: Mean Squared Error, (Error cuadrático medio). 9 PC: Personal Computer, (Computadora personal). 9 PSNR: Peak Signal To Noise Ratio, (Relación señal a ruido pico). 9 RAM: Memory Acces Random, (Memoria de acceso aleatorio). 9 RGB: Red Green Blue, (Formato para la representación de imágenes a color). 9 RLE: Run Length Encoding, (Algoritmo de codificación utilizado en JPEG). 9 RMSE: Root Mean Squared Error, (Raíz error cuadrático medio). 9 SNR: Signal To Noise Ratio, (Relación señal a ruido). 9 TCP: Transmission Control Protocol, (Protocolo de control de transmisión). 9 TCP/IP: Internet Protocol Suite, (Conjunto de protocolos de Internet). ANEXOS 61 ANEXOS Anexo I Historia de la esteganografía A través de la historia, la esteganografía ha sido empleada utilizando diversos métodos y variantes para ocultar la información .Ya desde los tiempos de la antigua Grecia (año 474 ACC), la historia cuenta como se ocultó un mensaje enviado hacia Esparta. En esos tiempos se utilizaban tablones cubiertos con cera para escribir mensajes, por lo que el mensaje oculto fue escrito directamente en un tablón de madera, luego se cubrió con cera y finalmente un nuevo mensaje fue escrito sobre la cera [1]. Otra de las primeras técnicas fue la de ocultar los escritos en papel utilizando tinta invisible, hecha en base a zumo de frutas, vinagre u orina, la que se hacía visible al calentar el papel. Un método usado durante siglos consistía en tatuar al mensajero (generalmente un esclavo) un mensaje en la cabeza afeitada, para después dejarle crecer el pelo y enviar así el mensaje oculto. El cifrado nulo (Null Cipher) es un método de escritura de meta-información en un texto, usado desde hace siglos y que aún hoy en día se utiliza, pues se trata posiblemente de uno de los métodos más sencillos de ocultar información. Consiste en escribir un texto aparentemente inofensivo donde, mediante algún mecanismo conocido por el legítimo receptor de la información (actualmente hablamos de algoritmos y claves), subyace la información realmente importante. Ejemplo: La concatenación de la primera letra de cada palabra [4]. Durante la Segunda Guerra Mundial, se microfilmaban los mensajes para luego reducirlos hasta el tamaño de un punto, con lo que ese mensaje podría ser enviado como el punto de la “i” dentro de otro mensaje, sin levantar sospecha alguna [3]. ANEXOS 62 Actualmente, con el uso de los computadores y el intercambio de información a través de medios informáticos, se ocultan mensajes en archivos que a simple vista son comunes y corrientes, como fotografías o archivos de música, pero que con un software adecuado podría obtenerse un mensaje que se encuentre oculto dentro de esos archivos. Las técnicas de esteganografía se vuelven más eficientes si los mensajes ocultos en las imágenes se encuentran encriptados. De esta forma, no solo habría que detectar los archivos que contengan posibles mensajes (de los miles de millones que circulan por Internet a diario), sino que también habría que decodificar tales mensajes para volverlos legibles. En los últimos años, la esteganografía ha ganado gran interés, debido en parte a la sospecha de que esta tecnología pudiera estar siendo utilizada por los terroristas para comunicar los planes de próximos ataques [6]. Aunque tales afirmaciones no han sido plenamente confirmadas, este tema ha sido muy discutido en la comunidad de las tecnologías de la información. Anexo II Codificación de texto El texto que configura un libro, folleto, carta, documento o cualquier otro tipo de escrito está compuesto por una sucesión ordenada de caracteres alfabéticos y numéricos (alfanuméricos), junto con algunos signos de puntuación, espacios en blanco, separación entre párrafos, tabulaciones, etc. Nuestro alfabeto utiliza 26 caracteres alfabéticos (25 letras simples más la w) en dos formas, mayúsculas y minúsculas, a los cuales hay que añadir 10 cifras decimales, varios signos de puntuación, algunos signos matemáticos (+, -, =, >, <...) y otros caracteres especiales. Un teclado mecanográfico de tipo normal presenta cerca de medio centenar de teclas, con dos posibilidades cada una; en total, unos 100 caracteres. Para su codificación bastarán palabras de 7 bits y sobrará una veintena larga de palabras que se utilizarán para caracteres de control (fin de párrafo, fin de página, salto de línea, tabulaciones...). El código más utilizado para la codificación de textos es el ASCII (American Standard Code for Information Interchange) que utiliza palabras de 7 bits conforme a la tabla I: ANEXOS 63 Tabla I: codificación de texto Hexadecimal 0 1 2 3 4 5 6 7 0 NUL DLE SP 0 @ P ̀ p 1 SOH DC1 ! 1 A Q a q 2 STX DC2 “ 2 B R b r 3 ETX DC3 # 3 C S c s 4 EOT DC4 $ 4 D T d T 5 ENQ NAK % 5 E U e u 6 ACK SYN & 6 F V f v 7 BEL ETB , 7 G W g w 8 BS CAN ( 8 H X h x 9 HT EM ) 9 I Y i y A LF SUB * : J Z J z B VT ESC + ; K [ k { C FF FS ́ < L \ l | D CR GS - = M ] m } E SO RS . > N ˆ n ˜ F SI US / ? _ o DEL b6b5b4b3b2b1b0 O ANEXOS 64 Las 10 cifras decimales ocupan los códigos del 30 al 39, mientras que las letras van del 41 (A) al 5A (Z), las mayúsculas, y del 61 (a) al 7A (z), las minúsculas. El resto de los códigos se refiere a signos de puntuación y otros caracteres diversos. Los 32 códigos iniciales, del 00 al 1F, se destinan a caracteres de control: 00 NULL Nulo 10 DEL Anulación de lo transmitido 01 SOH Inicio de encabezamiento 11 DC1 Control dispositivo 1 02 STX Inicio de texto 12 DC2 Control dispositivo 2 03 ETX Final de texto 13 DC3 Control dispositivo 3 04 EOT Final de transmisión 14 DC4 Control dispositivo 4 05 ENQ Pregunta 15 NAK Acuse de recibo negativo 06 ACK Acuse de recibo 16 SYN Sincronizador 07 BEL Aviso acústico 17 ETB Final del bloque transmitido 08 BS Retroceder un espacio 18 CAN Anulación 09 HT Tabulador horizontal 19 EM Fin del medio o soporte 0A LF Nueva línea 1A SUB Sustituir 0B VT Tabulador vertical 1B ESC Escape (anulación del orden) 0C FF Nueva página 1C FS Separador de archivos 0D CR Retorno del carro 1D GS Separador de grupo 0E SO Fuera de código 1E RS Separador de registros 0F SI Retorno al código 1F US Separador de unidad 20 SP Espacio(código 20) 7F DEL Borrado (código 7F) ANEXOS 65 Dado que el código ASCII es de 7 bits y, en cambio, suelen utilizarse palabras normalizadas a 8 bits (1 byte), el octavo dígito se aprovecha para la detección de errores como bit de paridad (véase el apartado siguiente). El código ASCII con paridad utiliza palabras binarias de 8 dígitos, de los cuales el más significativo (el que inicia la palabra) es el bit de paridad; la paridad de la palabra completa es siempre 0 (par). Este código goza de amplia aceptación siendo utilizado habitualmente en el procesado de textos, en la transmisión de la información, en la comunicación con periféricos (impresoras, monitores…), etc. Anexo III Función BER %Esta función determina la Tasa de Error de Bits del mensaje extraído respecto al mensaje oculto original. msg=input(['Entre el mensaje oculto',':',]); %Asigna a la variable msg el mensaje oculto MSG=input(['Entre el mensaje extraido',':',]); %Asigna a la variable MSG la cadena de caracteres del mensaje extraido msg_b=dec2bin(msg); % convierte de decimal a binario el mensaje oculto MSG_b=dec2bin(MSG); %convierte de decimal a binario el mensaje extraído [m,n]=size(msg_b); %determina el número de filas y columnas de la matriz msg_b for i=0:m-1 for j=1:n msg_bin(1,j+n*i)=msg_b(i+1,j); % convierte a una matriz de 1 fila y m*n columnas end end for i=0:m-1 for j=1:n MSG_bin(1,j+n*i)=MSG_b(i+1,j); %convierte en una matriz de 1 fila y m*n columnas end ANEXOS 66 end [M,N]=size(msg_bin); % determina las filas y columnas de msg_bin k=0; for i=1:N if msg_bin(1,i)==MSG_bin(1,i) k=k; else k=k+1; % cuenta el número de bit diferentes entre las matrices msg_bin y MSG_bin end end BER=k*100/N; % calcula el BER y lo expresa en % fprintf('El valor del BER en % es: %d \n',BER); Anexo IV Función Imperceptibilidad %Esta function determina el valor de PSNR del esteganograma iname=input('Entre el nombre de la imagen original:'); %lee la imagen original J = imread(iname); % J toma el valor de la matriz de la imagen original J = rgb2gray(J); %convierte a escala de grises iname_esteg=input('Entre el nombre de la imagen esteganografiada:'); %lee la imagen esteganografiada [M,N]=size(J); E = imread (iname_esteg); % E toma el valor de la matriz de la imagen d = J-E; %resta las matrices elemento a elemento D=d.^2; %eleva al cuadrado cada uno de los elementos de la matriz d suma =sum(D); % suma todos las filas de de cada una de las columnas de D sumatoria=sum(suma); %suma todas las columnas, obteniendo la suma total ANEXOS MSE=sumatoria/(N*M); %calcula el MSE PSNR=10*LOG10(255^2/MSE); %calcula la PSNR del esteganograma fprintf('La relación señal a ruido pico (PSNR) entre las imagenes es : %d \n',PSNR); Anexo V Proceso de inserción del algoritmo esteganográfico iname=input('Entre el nombre de la imagen:'); J = imread(iname); J = rgb2gray(J); I = im2double(J); T = dctmtx(8); B = blkproc(I,[8 8],'P1*x*P2',T,T'); B1=B; B2=B1*100; B3=int32(B2); B4=double(B3); B4=B4/100; mask = [1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; B5 = blkproc(B,[8 8],'P1.*x',mask); 67 ANEXOS [m,n]=size(I); t=m*n*10/512; t=4*t/7; msg=input(['Entre el mensaje oculto con menos de ',int2str(t-1),' caracteres',':',]); msg=[msg,char(255),char(255)]; msg1=double(msg); MSG=de2bi(msg1); [M,N]=size(MSG); for i=0:M-1 for j=1:N msg_bin(1,j+N*i)=MSG(i+1,j); end end [h,g,n,K] = hammgen(3); for i=0:2*M-1 code(1,7*i+1:7*i+7) = encode(msg_bin(1,4*i+1:4*i+4),n,K); end k=1; for citer = 1 : n if mod(citer,8) == 1 for fiter = 1 : m -3 if mod(fiter,8) == 1 if k==M*(N+6),break,end 68 ANEXOS if ((code(1,k)==0) & (mod(B3(fiter,citer),2)==1)) B4(fiter,citer)=B4(fiter,citer)+0.01; elseif ((code(1,k)==1) & (mod(B3(fiter,citer),2)==0)) B4(fiter,citer)=B4(fiter,citer)+0.01; end k=k+1; if k==M*(N+6),break,end if ((code(1,k)==0) & (mod(B3(fiter+1,citer),2)==1)) B4(fiter+1,citer)=B4(fiter+1,citer)+0.01; elseif ((code(1,k)==1) & (mod(B3(fiter+1,citer),2)==0)) B4(fiter+1,citer)=B4(fiter+1,citer)+0.01; end k=k+1; if k==M*(N+6),break,end if ((code(1,k)==0) & (mod(B3(fiter+2,citer),2)==1)) B4(fiter+2,citer)=B4(fiter+2,citer)+0.01; elseif ((code(1,k)==1) & (mod(B3(fiter+2,citer),2)==0)) B4(fiter+2,citer)=B4(fiter+2,citer)+0.01; end k=k+1; if k==M*(N+6),break,end 69 ANEXOS if ((code(1,k)==0) & (mod(B3(fiter+3,citer),2)==1)) B4(fiter+3,citer)=B4(fiter+3,citer)+0.01; elseif ((code(1,k)==1) & (mod(B3(fiter+3,citer),2)==0)) B4(fiter+3,citer)=B4(fiter+3,citer)+0.01; end k=k+1; if k==M*(N+6),break,end end end elseif mod(citer,8) == 2 for fiter = 1 : m -2 if mod(fiter,8) == 1 if k==M*(N+6),break,end if ((code(1,k)==0) & (mod(B3(fiter,citer),2)==1)) B4(fiter,citer)=B4(fiter,citer)+0.01; elseif ((code(1,k)==1) & (mod(B3(fiter,citer),2)==0)) B4(fiter,citer)=B4(fiter,citer)+0.01; end k=k+1; if k==M*(N+6),break,end if ((code(1,k)==0) & (mod(B3(fiter+1,citer),2)==1)) B4(fiter+1,citer)=B4(fiter+1,citer)+0.01; 70 ANEXOS elseif ((code(1,k)==1) & (mod(B3(fiter+1,citer),2)==0)) B4(fiter+1,citer)=B4(fiter+1,citer)+0.01; end k=k+1; if k==M*(N+6),break,end if ((code(1,k)==0) & (mod(B3(fiter+2,citer),2)==1)) B4(fiter+2,citer)=B4(fiter+2,citer)+0.01; elseif ((code(1,k)==1) & (mod(B3(fiter+2,citer),2)==0)) B4(fiter+2,citer)=B4(fiter+2,citer)+0.01; end k=k+1; if k==M*(N+6),break,end end end elseif mod(citer,8) == 3 for fiter = 1 : m-1 if mod(fiter,8) == 1 if k==M*(N+6),break,end if ((code(1,k)==0) & (mod(B3(fiter,citer),2)==1)) B4(fiter,citer)=B4(fiter,citer)+0.01; elseif ((code(1,k)==1) & (mod(B3(fiter,citer),2)==0)) 71 ANEXOS B4(fiter,citer)=B4(fiter,citer)+0.01; end k=k+1; if k==M*(N+6),break,end if ((code(1,k)==0) & (mod(B3(fiter+1,citer),2)==1)) B4(fiter+1,citer)=B4(fiter+1,citer)+0.01; elseif ((code(1,k)==1) & (mod(B3(fiter+1,citer),2)==0)) B4(fiter+1,citer)=B4(fiter+1,citer)+0.01; end k=k+1; if k==M*(N+6),break,end end end elseif mod(citer,8) == 4 for fiter = 1 : m if mod(fiter,8) == 1 if k==M*(N+6),break,end if ((code(1,k)==0) & (mod(B3(fiter,citer),2)==1)) B4(fiter,citer)=B4(fiter,citer)+0.01; elseif ((code(1,k)==1) & (mod(B3(fiter,citer),2)==0)) B4(fiter,citer)=B4(fiter,citer)+0.01; end 72 ANEXOS k=k+1; if k==M*(N+6),break,end end end end end Imagen = blkproc(B4,[8 8],'P1*x*P2',T',T); imwrite(Imagen,'Imagencf.jpg','Quality',100); imshow(I), figure, imshow(Imagen) Anexo VI Proceso de extracción del algoritmo esteganográfico iname=input('Entre el nombre de la imagen:'); J = imread(iname); % J = rgb2gray(J); I = im2double(J); T = dctmtx(8); B = blkproc(I,[8 8],'P1*x*P2',T,T'); B1=B*100; B2=int32(B1); [m,n]=size(B); code=de2bi(16380); k=15; for citer = 1 : n if mod(citer,8) == 1 if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end 73 ANEXOS for fiter = 1 : m -3 if mod(fiter,8) == 1 if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end if mod(B2(fiter,citer),2)==1 code(1,k) = 1; else code(1,k) = 0; end k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end if mod(B2(fiter+1,citer),2)==1 code(1,k) = 1; else code(1,k) = 0; end k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end if mod(B2(fiter+2,citer),2)==1 code(1,k) = 1; 74 ANEXOS else code(1,k) = 0; end k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end if mod(B2(fiter+3,citer),2)==1 code(1,k) = 1; else code(1,k) = 0; end k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end end end elseif mod(citer,8) == 2 if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end for fiter = 1 : m -2 if mod(fiter,8) == 1 75 ANEXOS if mod(B2(fiter,citer),2)==1 code(1,k) = 1; else code(1,k) = 0; end k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end if mod(B2(fiter+1,citer),2)==1 code(1,k) = 1; else code(1,k) = 0; end k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end if mod(B2(fiter+2,citer),2)==1 code(1,k) = 1; else code(1,k) = 0; 76 ANEXOS end k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end end end elseif mod(citer,8) == 3 if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end for fiter = 1 : m -1 if mod(fiter,8) == 1 if mod(B2(fiter,citer),2)==1 code(1,k) = 1; else code(1,k) = 0; end k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end if mod(B2(fiter+1,citer),2)==1 code(1,k) = 1; else code(1,k) = 0; end 77 ANEXOS k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end end end elseif mod(citer,8) == 4 if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end for fiter = 1 : m if mod(fiter,8) == 1 if mod(B2(fiter,citer),2)==1 code(1,k) = 1; else code(1,k) = 0; end k=k+1; if ((mod(k-1,14)==0) & (bi2de(code(1,k-14:k-1))==16383)),break ,end end end end end k=k-1; [h,g,n,K] = hammgen(3); for i=0:k/7-1 msg_bin(1,4*i+1:4*i+4)=decode(code(1,7*i+1:7*i+7),n,K)'; 78 ANEXOS end for i=1:k/14 MSG(i,:)=msg_bin(8*(i-1)+1:8*i); end msg_d=bi2de(MSG); msg_D=msg_d'; [M,N]=size(msg_D); for w=1:N-2 msg_o(1,w)=msg_D(1,w+1); end mensaje_o=char(msg_o); fprintf('El mensaje oculto es: %s \n',mensaje_o); 79