Ocultar imagen JPEG dentro de otra imagen JPEG: Metadata y criptografía

Hace algunos días mientras caminaba después del trabajo llegó a mi mente una pequeña pregunta: ¿es posible ocultar una imagen JPEG dentro de otra imagen JPEG de forma segura con Java?
Al llegar a mi casa, comencé a buscar la información necesaria para realizar una pequeña aplicación que respondiera esa pregunta. Después de algunos minutos, la respuesta apareció en forma de API: Image IO y Java Cryptography Architecture.

Image IO es un API bajo el paquete javax.imageio que permite leer y escribir imágenes en diferentes formatos, según los plugins disponibles.

Java Cryptography Architecture es una API bajo el paquete javax.crypto que permite realizar operaciones criptográficas como cifrado y descifrado utilizando varios algoritmos simétricos, según los proveedores disponibles.

El archivo NetBeansProjects.zip contiene dos aplicaciones escritas en Java/SWING: StegCreator para ocultar las imágenes y StegViewer como visor de las imágenes ocultas.

StegCreator pide como parámetros:

  • Public directory: Directorio donde se encuentran las imágenes que servirán de contenedor para las imágenes que deseamos ocultar.
  • Hiden directory: Directorio y subdirectorios donde se encuentran las imágenes que se desean ocultar.
  • Output directory: Directorio donde se escribirán los archivos ZIP, un archivo ZIP por cada directorio que contenga imágenes a ocultar.

Al hacer clíc en el botón Execute empieza el proceso de cifrado y ocultamiento en los metadatos, en el cuadro de texto puede verse el progreso. Cada vez que se escribe un archivo ZIP, también se muestran una serie de caracteres hexadecimales, estos son la llave usada para cifrar, sin esta llave no podrán descifrarse posteriormente las imágenes ocultas.

StegViewer pide como parámetros:

  • Zip file: Archivo ZIP generado con StegCreator.
  • Key: Los caracteres hexadecimales de la llave usada para cifrar las imágenes.

Al hacer clíc en el botón View se muestra una lista del contenido del archivo ZIP, al hacer clíc en algún nombre, se descifra y muestra la imagen oculta. Hay botones para realizar zoom y guardar una copia de la imagen en otro lugar, lo cual no es recomendable porque la copia dejará de estar oculta.

Notas:

  • Se utiliza el API de Apache Shiro para realizar el cifrado y la conversión entre bytes/hexadecimal, el cuál simplifica trabajar con Java Cryptography Architecture.
  • La aplicación usa como algoritmo de cifrado AES con llaves de 128 bits, si deseas usar llaves de mayor tamaño es necesario instalar los proveedores JCE Unlimites Policy.

Archivos:

  • NetBeansProjects.zip: Contiene los proyectos de las aplicaciones StegCreator y StegViewer listos para construirse con Maven.
  • example.zip: Ejemplo de archivo ZIP, la llave usada para descifrar es 0eae0e3164db608b8ba19fa8ad97e921, la imagen pública son unas aves, mientras que la oculta un personaje de anime.


All comments of post - "Ocultar imagen JPEG dentro de otra imagen JPEG: Metadata y criptografía":

:Haha! I'am the first! Yeh~

Thank you!

*

Add a Comment / Trackback url

Comment begin from here or jump up!