Estas aquiContenido / Wodax, una pequeña utilidad de esteganografía

Wodax, una pequeña utilidad de esteganografía


Porjoapuipe- Publicado el03 Enero 2009

Por Joan Puigcerver Pérez

Wodax es un pequeño programa escrito en C++ al que le he dedicado mi poco tiempo libre en los últimos meses. Wodax es un programa esteganográfico bien simple que permite esconder un archivo de texto plano en una imagen PNG. No soy un experto, ni de lejos, en seguridad informática. Mis únicos conocimientos son los que llevo adquiridos en el primer curso de Ingeniería Informática, lo que llevo de segundo y lo que he leído por la Web (y por supuesto en Kriptópolis).

Escribí una especie de memoria PDF donde explico cómo funciona el programa, las debilidades que tiene y los mecanismos de defensa que implementa, que es básicamente uno (también hago una pequeña introducción al mundo de la esteganografía). Me gustaría que juzgasen dicho documento y el código fuente del programa (debilidades en la seguridad, contradicciones y errores en el documento explicativo, etc)...

El programa usa la librería libpng para manejar las imágenes PNG y un envoltorio de dicha librería para C++ llamado png++. El programa ha sido probado únicamente en sistemas GNU/Linux (Gentoo amd64 y x86, Debian x86 y Ubuntu x86 y amd64). Lean el documento PDF y los documentos de instalación para más información.

Los comentarios del código fuente están escritos en un intento de inglés xD (pero creo que se ha quedado en el intento). Imagino que no tendrán problemas para entenderlos.

No hace falta decir que el programa tiene un fin puramente didáctico, así que no se pasen machacándome :P

¡Muchas gracias!

Etiquetas

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).

Vaya, no esperaba que se publicase el post en portada... Sólo espero que el programa y el documento pdf estén a la altura :)

De paso decir que, como comento en el pdf, el programa no implementa ningún mecanismo de cifrado aunque es una característica que me gustaría incluir cuanto antes mejor. ¿Qué algoritmo de cifrado me recomiendan?

Muchas gracias.

Y mucha suerte. Espero que algún lector te ayude con sus comentarios y aportaciones.

Como pequeño aporte para una aplicación pensada para Unix (GNU/Linux, *BSD, etc.), la abreviatura de la opcion --hide (-h) puede usarse en la primera ejecución por un usuario que no conozca wodax como abreviatura de --help

Cierto. No había caído en ello, pero no se me ocurre una abreviatura alternativa para --hide.. Quizás usar la segunda letra (-i)... Pero no resultaría tan intuitivo...

Veremos que se puede hacer, gracias.

Yo pienso que quedaría más intuitivo al estilo de apt-get, es decir

wodax accion imagen [opciones]

donde accion puede ser hide o seek. Así por ejemplo, una llamada sería:

wodax hide llums.png -f hamlet.txt -o hamlet_output.png -e 13

Que tal -s (shadow)

Se usa para --seek :)

Me parece recordar que hace ya tiempo se aboga por el uso de --help siempre, que -h puede fácilmente no tener ese valor de ayuda como bien indicas.

-------------------------
http://warsaw.sytes.net/

n/d

Buenas :)

Aquí va un pequeño aporte, aunque realmente por lo que se puede leer en el PDF, lo conoces: el software está bastante bien, pero tiene una laguna importante de cara a la seguridad: la "entropia".

Y no sé si es un error de concepto o no, pero lo importante no es que la función "hash" sea de 32 bits, como argumentas en el PDF, sino que existe una debilidad inherente al PRNG que has decido usar, las funciones srand y ran, y es su valor de semilla.

Estas funciones hacen que el espacio de generación esté limitado a 2^32 semillas (un entero de 32 bits), lo cual es una entropía bastante pobre para un uso real del software. Por ello da igual lo robusto que hagas el hash, puedes usar md5 o sha1/sha256, pero estarás limitado por la función srand.

En aplicaciones criptográficas (donde también entra la esteganografía) nunca deben ser usados PRNG convencionales, sino que se deben aplicar los conocidos como CSPRNG.

Por ejemplo, el siguiente PRNG en robustez podría ser MT (Mersenne Twister) que permite 64 bits de semillas. Después de este tendrías los CSPRNG puros como AES-RNG con 128 bits de semilla, escalable hasta 256 bits. O Fortune de Bruce Schneier, con 256 bits de semilla.

Un espacio de 256 bits de semilla sí hace tu aplicación usable con fines reales, pues la robustez de "la entropía" será real, y hará impracticable la fuerza bruta.

Estos son la clase de comentarios que quería yo leer (¡sin desmerecer al resto!) :)

Muchísimas gracias por estos detalles técnicos. La verdad es que sí intuía que una laguna importante era el uso de las funciones rand() y srand() (y además podrían traer problemas de compatibilidad entre sistemas operativos y arquitecturas). No implementé otras por puro desconocimiento y como digo en el PDF el fin era aprender, así que de poco me servía bajarme una librería y xim-pum.

Con tu aportación ya se por donde empezar a indagar. De nuevo, muchas gracias.

Publicidad

Patrocinadores

Kriptópolis alojado en
Zilos-Veloxia Network

Tu mejor defensa:
Bufet Almeida

Publicidad