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"
o 
"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:

viernes, 12 de noviembre de 2010

Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit...

Es posible que en nuestro día a día surgan ocasiones en las que tengamos que eleborar o maquetar algún tipo de aplicación, web, incluso crear algún tipo de letra... resumiendo, que tengamos que teclear bastante cantidad de texto y además sin saber que poner.

Pués bien, para estos menesteres existe un texto que de seguir así se va a convertir en estandar de facto "si es que ya no lo es" y cuya denominación es Lorem Ipsum.

Es un texto sin sentido ni significado, derivado del latín y proveniente de la obra de Cicerón (45 a. C.).

Un ejemplo podría ser este:

"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vestibulum cursus nisi, in luctus lacus aliquet a. Vestibulum nisl odio, tincidunt sit amet molestie pretium, tempor id odio. Phasellus cursus arcu at leo lacinia in eleifend erat consequat. Nunc dui nulla, feugiat et imperdiet iaculis, fermentum in urna. Integer lacinia mattis enim, vel tempus metus vestibulum eu. Sed sed consequat felis. Morbi id nunc quis lacus accumsan dignissim a a nisl. Sed auctor aliquet mauris, ut auctor tortor placerat ut. Nullam eget erat metus. Donec feugiat magna sit amet lorem hendrerit nec laoreet sapien lobortis. Suspendisse egestas nibh nunc. Ut at consectetur nisl. Maecenas sagittis sapien gravida urna tempor luctus. Nulla vitae porttitor lectus. Maecenas sagittis ultrices augue, malesuada eleifend nisi feugiat in. Duis sagittis."

No deja de llamarme la atención la similitud en cuanto a la acción de Lorem Ipsum con aquel pangrama que tantas veces hemos visto en windows cuando queremos ver como de bien queda un font:

"El veloz murciélago hindú comía feliz cardillo y kiwi".

No degeis de leer estos enlaces para ampliar vuestros conocimientos:
Con todo esto y un poco de imaginación, el que rellena texto inutil a mano es porque quiere.

martes, 26 de octubre de 2010

¿Metemos los bits en una cripta?

Soy consciente que con este post, más de uno de mis compañeros de trabajo me va a negar la palabra en lo que me reste de existencia, pero que quereis que os diga, o lo suelto o exploto.

El término ENCRIPTAR, NO EXISTE, en su lugar el termino que debemos emplear es CIFRAR.

De la misma manera ocurre con el paso inverso, DESENCRIPTAR NO EXISTE en su lugar el término que debemos emplear es DESCIFRAR.

Veamos que dice el DRAE sobre la palabra ENCRIPTAR:
  • La palabra encriptar no está en el Diccionario.
y sobre CIFRAR:
  • Transcribir en guarismos, letras o símbolos, de acuerdo con una clave, un mensaje cuyo contenido se quiere ocultar.
Todo este embrollo viene porque en inglés "cifrar" es "encrypt", y venga nosotros lo convertimos a spanglish por que si.

Lo que más me molesta es que sencillamente lo decimos mal porque quien nos enseñan estas cosas también las dicen mal (profesores, medios de comunicación, peliculas, etc).

Vamos a hacer todos un esfuerzo y a intentar decir las cosas por su nombre.

Espero que despues de todo esto no me encripteis, es decir, no me metais en la cripta ;)

Saludos.

lunes, 25 de octubre de 2010

Chat P2P en JAVA

Proyecto que desarrollé en NetBeans para el club mentes inquietas, y que faclilita el aprendizaje y práctica de diversas técnicas tales como:

  • Programación en JAVA.
  • Programación con Sockets TCP.
  • Programación concurente.
  • Protocolos y Serialización de datos.
  • Cifrado y codificación de datos.
  • Modelo de programación cliente-servidor.
  • ...

He intentado buscar la simplicidad en todo el proyecto para que se entiendan bien todos los conceptos, ya que cuando uno se enfrenta a una arquitectura cliente servidor  por primera vez, suele ser algo doloroso si no tenemos quien nos guíe. 

Ejemplos de este tipo hay muchos, pero que en la misma aplicación convivan servidor y cliente, no hay tantos.

He de recordar que dentro del proyecto existe un módulo "Base64Coder.java" que pertenece a Christian d'Heureuse y que no estaría nada mal que supieseis bajo que licencias se encuentra. Este modulo es el encargado de la codificación en base 64 que se utiliza en el proyecto.

Anexo además un presentación con definiciones que ayudarán a comprender un poco mejor de que va todo esto.

Descargas: