App simple para esteganografía y marcas de agua en fotos e imágenes

12 Jul

La esteganografía es la aplicación de técnicas que nos permiten ocultar mensajes u objetos dentro de otros, llamados portadores, con el objetivo de que no se perciba su existencia. Uno de los usos que podemos darle es como “marca de agua” oculta pero que identifica al propietario de una imagen (aunque no ofrece garantías totales debido a los potenciales ataques que pueden realizarse).

Esto es lo que hace esta pequeña aplicación: por un lado marcar nuestras imágenes y, por otro, poder comprobar las marcas que hayamos introducido. Estas marcas son de texto y podremos ocultarlas, además, cifradas con AES, SHA-512 o HMAC-SHA512. Permite, además, insertar texto o una imagen como marca de agua  clásica, es decir, visible.

El proceso de marca de una imagen (ver figura 1) consiste en:

  1. Configurar el texto, contraseña y método de cifrado para la parte estego y el texto o imagen para la marcar de agua (junto con tamaño, dónde insertarlo, etc)
  2. Cargar la imagen a marcar
  3. Por último, marcar/firmar la imagen.
  4. Si queremos disponer de una copia de la imagen marcada (no cambia la original) debemos descargarla a nuestro disco. Si no lo hacemos, la perderemos con simplemente recargar la página.
  5. Por último, podemos guardar la relación texto, contraseña, método y nombre de la imagen para tener un historial de acciones que podamos consultar (para quien tenga tan mala memoria como yo 😉 ). ¡Y cuidado! Estas acciones se guardan en el almacenamiento interno del navegador (en concreto, Indexed DB), por lo que tendremos una copia en cada ordenador, sistema operativo y navegador que utilicemos para firmar imágenes.

Figura 1.- Proceso de firma de una imagen

El proceso de comprobación de firma (ver figura 2) se corresponde con la opción Decode del menú superior y es:

  1. Configurar el texto, contraseña y método de cifrado
  2. Cargar la imagen a marcar
  3. Chequear si el texto, con el cifrado introducido, está presente en la imagen.

Figura 2.- Proceso de comprobación de marca de una imagen

Para el proceso de esteganografía he usado esta librería que oculta la marca proporcionada en el canal alfa de la imagen dada. Este algoritmo aumenta (demasiado para mi gusto) el tamaño del fichero resultante, no funciona con imágenes con fondos transparentes y si se modifica la imagen (recortes, etc) se “pierde” la marca. Sería una buena idea sustituirlo por otro mejor (¿voluntarios/as? Yo dudo mucho que lo haga).

Por último, para seguir probando cosas con Angular (este era mi objetivo cuando empecé con esta app), añadí botones para publicar en redes sociales, aquellas que proporcionan un API rest para poder escribir, es decir, Twitter, Facebook, Pinterest y Flickr. Instagram no debido a que no permite (o permitía, no sé si ahora lo hacen) escribir.

La he probado tanto para GNU/Linux como Windows 10 con Firefox 45 y Chrome 52. También la he probado en mi móvil (Nexus 5), tomando una foto y, salvo publicar en RRSS (por tamaño de la foto) sí que ha funcionado el marcar/comprobar con estego y descargar la foto marcada.

¡Espero que os sea útil!

PD: Como es muy mejorable, he dejado los fuentes en https://github.com/jagilma

Guardar

Guardar