jueves, 30 de diciembre de 2010

Una de esteganografía

Un tema que me apasiona es el del arte y ciencia de ocultar información.

Para ello disponemos de técnicas criptográficas que están muy avanzadas y que nos proporcionan algoritmos a día de hoy seguros e irrompibles.

Lo que ocurre es que cuando uno ve una codificación extraña de símbolos, automáticamente sabe que la intención del remitente es la de ocultarnos el mensaje.

Pero ¿Cómo podríamo hacer lo mismo pero haciendo que el mensaje pasase totalmente desapercibido por los ojos de curiosos?...

La respuesta a esta pregunta nos la da la 'esteganografía' y que como burda definición podriamos decir que es "escritura encubierta", en contraposición a la criptografía, que podríamos definirla como "la transformación de un mensaje legible en uno ilegible por nadie, excepto por el receptor".

Un ejemplo clásico de esteganografía empleado ya en tiempos remotos sería la famosa escritura en papel con tinta invisible (zumo de limón).

Trataré de explicar someramente dos técnicas básicas esteganográficas y veremos algun que otro ejemplo, para ello y acorde con nuestros tiempos usaremos archivos de imágen como contendor para ocultar nuestro mensaje, pero podrían ser otras extensiones como audio, etc.

La imagen de origen sera esta:


Una foto cándida de mi chiquitín y yo en la ciudad más bella del mundo (Salamanca), que nos servirá de contenedor de mensajes y/o archivos ocultos.

La primera técinica es por EOF (End Of File) o Fin De Fichero y que básicamente consiste en insertar el mensaje (en crudo o cifrado) al final del fichero.

Como ejemplo pondré el mensaje secreto justo al final del archivo origen que como sabemos tiene extensión PNG y el EOF nos lo dá la marca "IEND".

Así es como quedaría la imagen con el mensaje secreto:



Ahora el receptor de mensaje solo tendrá que editar la imagen con un editor hexadecimal y voilá.



Como se observa el mensaje está en crudo, pero si hubiesemos utilizado cualquier algoritmo criptográfico moderno el resultado sería totalmente imperceptible por el "enemigo". 

Un ejemplo de esto último se podría hacer con un cifrado básico e inseguro como el cifrado XOR con clave "eternoAprendiz" y cuyo resultado sería esto otro:


La segunda técnica es un poco más elaborada y por eso es también la más usada y se denomina "LSB (Less significant byte)" o inserción del último bit menos significante.

Como todos sabemos, una imagen está compuesta por una matriz de píxeles. 
Cada pixel se construye con tres bytes. 
Cada byte codifica un color básico (rojo, verde, azul) en un escala de 0 a 255, de manera que si queremos codificar un pixel con el color blanco pues pondríamos cada byte con valor máximo (255) o si por el contrario quisiéramos codificar el pixel con el color negro, pues pondríamos cada byte con valor mínimo (0) y así jugando con la mezcla de estos tres byte conseguiremos los 16 millones de colores que podemos formar.

Pues la mágia de esta segunda técnica es aprovecharse de los bits menos significativos de cada byte de un pixel para codificar el mensaje.

El resultado es una nueva imagen con colores distintos a la original pero que para el ojo humano es inapreciable.

Como hacer esto último a mano es tedioso, lo que haremos es usar una aplicación openSource, desde mi punto de vista excelente, que se llama OpenStego

Esta vez ocultaremos un fichero de texto, con un mensaje secreto y que dejo a los lectores que hagan el paso inverso par leer dicho mensaje secreto.



El resultado es esta otra imagen:



Logicamente no solo podremos incrustar mensajes de texto, sino cualquier formato binario que se nos ocurra, desde otra imagen, a un audio, video, pdf, zip, ....y hasta el infinito y más allá.

La esteganografía además nos permite incrustar nuestra propia huella digital (fingerPrint). Pensemos que algún día elaboramos algún trabajo que alguien nos plagia, pues si a ese trabajo le hemos incrustado nuestra huella tendremos todo de nuestra parte para demostrar que el trabajo es nuestro.

Para finalizar dedico este post íntegramente a mi gran amigo Alberto (Magic). Va por ti maestro.

sábado, 11 de diciembre de 2010

El Principio de Pareto

Si alguna vez te has preguntado:

Si me esfuerzo tanto ¿Por qué obtengo tan pocos resultados? 

Entonces amigo mio, el principio del pareto quizás dispe tu duda.

Este principio empírico, observado y enunciado por Vilfredo Pareto, es utilizado en múltiples disciplinas, entre las  que se encuentran la ingeniería del software y que viene a decir algo así como:



"el 80% del esfuerzo de desarrollo (en tiempo y recursos) produce el 20% del código, mientras que el 80% restante es producido con tan sólo un 20% del esfuerzo"
"El 80% de los resultados proviene del 20% del esfuerzo"
o
"Probar el 20% del código elimina el 80% de los fallos"
o
"El optimizar el 20% del código origina un 80% de mejora del rendimiento".

Como se menciona anteriormente esto es una regla de sentido común que se ajusta bastante a la realidad.

No obstante te recomiendo que amplíes horizontes consultando los siguientes artículos: