StegoPy - Herramienta de esteganografía LSB en Python

Prefacio


Recientemente, noté que las personas en mi foro se interesaron en el tema de la esteganografía de varios textos en imágenes, archivos mp3 y videos. Y luego tuve la idea de escribir mi propio guión para esteganografía de texto en imágenes. Debo decir antes que nunca me he encontrado escribiendo herramientas similares para la esteganografía.

Antes de familiarizarme con la esteganografía LSB, consideré otras formas, o más bien, ideé la mía. Pero no tenía la fuerza para crear algo propio y decidí buscarlo en Google:

LSB es un método de esteganografía en el que los bits más bajos de uno de los colores RGB en un píxel se cambian a bits de texto codificado.

Luego me familiaricé con la biblioteca Pillow para trabajar con imágenes y criptografía. El segundo en mi caso fue necesario para crear el cifrado DES, que posteriormente se codificará en bits en la imagen.

Codificación


Publiqué mi creación en GitHub, por lo que para seguir trabajando con StegoPy solo necesitamos clonar el proyecto con GitHub:

> git clone https://github.com/eBind/StegoPy
> cd StegoPy
> pip3 install -r requirements.txt
> python3 stegopy.py

Instalación

Sin embargo, todo es como siempre en términos de instalación. Ahora veamos la sintaxis de los comandos de lanzamiento.

> python3 stegopy.py -e in.jpg data.txt

Con este comando, codificaremos el texto del archivo data.txt en la imagen in.jpg.
Pero antes de codificar, se nos pedirá un balance, que puede ser del 1 al 4. Esta es solo una de las cosas más interesantes del programa.

File in.jpg


Archivo data.txt
this is private message

El balance es el número de bits de bajo orden involucrados en la esteganografía. Varía de 1 a 4. En

consecuencia, cuanto mayor sea el equilibrio, el:

  1. Menos píxeles estarán involucrados en la codificación
  2. Cambios notables en los canales de color.

De esto podemos concluir que cuanto menor sea el equilibrio, mayor será la fiabilidad de la esteganografía y será invisible para el ojo humano.

Otro factor importante es que solo cambia el canal azul, cuyos tonos son los menos visibles para nuestros ojos.

Una vez que hayamos decidido el balance, nuestro script creará dos archivos adicionales:

  • out.png - imagen con texto codificado
  • key.dat: archivo con la clave necesaria para descifrar

File out.png


Archivo key.dat
1$960$gxvZH4Q8Gq2qLGeA1aSCXIPRljJlJbihsvSBdzx-wSM=

Codificación

Descodificación


La sintaxis para el comando en nuestro caso es:

> python3 ./stegopy.py -d out.png

Luego se nos preguntará la clave que recibimos al codificar. Después de la decodificación, el texto descifrado se guardará en el archivo out.txt.

Descodificación

Como habrá notado, la imagen de entrada tiene el formato JPEG y la salida es PNG. Esta es una falla en el programa, que pronto se solucionará y tendrá la oportunidad de elegir el formato de salida.

Solo se probaron JPEG y PNG en la imagen de entrada, en teoría debería funcionar en los menos utilizados, como bmp, etc.

Por cierto, pylint calificó a StegoPy en 10/10. Los comentarios sobre el código y la funcionalidad son bienvenidos ya que planeo desarrollar la aplicación.

El proyecto está disponible en GitHub

All Articles