viernes, 7 de febrero de 2014

Cicada 3301

Hace dos años apareció un mensaje encriptado en internet que apuntaba estar buscando a los individuos «más inteligentes». Se le llamó el puzzle Cicada (cigarra) 3301. La misión era descifrar el mensaje secreto escondido es un imagen. Un hombre llegó hasta el final, pero no fue tarea sencilla.
Joel Eriksson es uno de esos seres «inteligentes» que dio con el mensaje secreto escondido bajo muchos códigos. «Por desgracia yo no vi la imagen hasta después de algún tiempo de que fuera publicada originalmente, y por lo tanto tenía que ponerme al día», confesó Eriksson a FastCoLabs, una división de Fast Company.
Eriksson, investigador sueco de criptoseguridad de 34 años, pensó, al principio que sería «bonito» hacer este puzzle. «Siempre he estado interesado en todo lo que me pueda desafiar, y nunca me doy por vencido. En el caso de la Cigarra, el puzzle resultó ser mucho más de lo que pensé que sería cuando empecé», apunta.
Sí, no fue fácil. Eriksson tuvo que abordar el enigma conconocimientos de esteganografía (una rama especial de la criptografía), comprensión de numerología Maya, y algo parecido atemas de ficción de «ciberpunk». La investigación no se realizó sólo en el plano digital, ya que tuvo que seguir pistas físicas que eran colocadas en volantes en 14 ciudades. AL final sí tuvo que volver a la web, pero a lo más profundo de ella, apuntan en FastCoLabs
Lo primero que tuvo que hacer Eriksson fue aplicar un software de esteganografía sobre la imagen original de la Cigarra y así extraer un mensaje codificado, en el que cada cifra o letra se correspondía en realidad con una letra totalmente distinta.
Descifro dicho mensaje, que en realidad era un URL. Colocó esta URL en su buscador de internet y consiguió otra imagen, pero esta vez de un pato. Utilizó las mismas herramientas y consiguió un código de libro, que le llevó a una dirección en Reddit que contenía números Mayas.
En Reddit un usuario anónimo dejaba otra serie de mensajes encriptados bajo simples comentarios, con este podía descifrar el «libro», y previamente encontró más imágenes bajo códigos. Encontró que se trataban de una cadena de números, de hecho, un número de teléfono que redirigía a un buzón de voz de Texas. «Muy bien. Lo has hecho genial . Hay tres números primos asociados la imagen final.jpg original. 3301 es uno de ellos. Usted tendrá que encontrar los otras dos. Multiplique estos tres números juntos y añada un . Com para encontrar el siguiente paso. Buena suerte. Adiós».
Ericksson logró hacer los cálculos, y llegó a la esperada URL dónde le esperaba otra imagen de Cigarra y una cuenta atrás. Cuando la cuenta regresiva terminó, la imagen de lacigarra fue sustituida por cadenas de dígitos que se parecían a las coordenadas GPS. Las coordenadas llevaron a postes telefónicos en países de todo el mundo, incluso en España , Rusia, Estados Unidos , Francia , Japón y Polonia. En España la pista fue colocada en Granada.
El ingeniero sueco tuvo que recurrir a otras personas en otros países para poder acceder a las imágenes, ya que no se podía costear ese viaje. En los postes teléfonos encontraban volantes con imágenes de cigarras y códigos QR.
Escaneó los códigos, que le llevaron a más imágenes con textos ocultos. Al final volvió a recurrir a la información de Reddit y terminó en unadirección de la red anónima de Tor. Todo esto es menos de tres semanas.
Sin embargo se llevó una gran decepción, cuando llegó al site, La Cigarra 3301 había escrito un mensaje en el que criticaba que se hubiesen formado grupos para resolver un enigma diseñado para una sóla persona. Hasta ahí llegaba el acertijo.
«Fue muy decepcionante», dijo Eriksson. Todavía no se sabe quien es la persona detrás de Cicada 3301. Al parecer este año se ha puesto en marcha otro enigma.

jueves, 30 de enero de 2014

Algoritmo RSA para Dummies

El interés por transmitir un mensaje de forma que su significado quede oculto a los ojos de todo lector que no sea el destinatario es, posiblemente, tan antiguo como la propia escritura.

Hasta tiempos relativamente recientes, la clave de un emisor y de un receptor en todos los sistemas criptográficos concebibles tenían que ser iguales o cuanto menos simétricas; es decir, tenían que servir igualmente para encriptar y desencriptar. La clave era, pues, un secreto compartido entre emisor y receptor, y por tanto, el sistema criptográfico en cuestión era vulnerable, por así decirlo, por ambos lados.

Hoy en día, los algoritmos de encriptación empleados en la mayoría de las comunicaciones consisten en, al menos, dos claves: una privada, como era tradicional, y otra pública que conoce todo el mundo. Un emisor se hace con la clave pública del receptor a quien desea enviar el mensaje, y la emplea para encriptarlo. El receptor coge ahora su clave privada y la utiliza para descifrar el mensaje recibido. Ni el emisor ni el receptor han tenido que verse previamente para acordar ninguna de las claves implicadas, con lo que la seguridad del sistema se refuerza todavía más. Esta forma de encriptación absolutamente revolucionaria se conoce como de clave pública, y constituye la base de la seguridad de las redes globales de comunicación contemporáneas.

En la base del desarrollo de esta tecnología revolucionaria se encuentran las matemáticas. En efecto, la criptografía moderna descansa en dos pilares: la aritmética modular, por un lado, y la teoría de los números primos.

De forma sencilla, cuando trabajamos con la aritmética tradicional, lo hacemos en base 10, compuesta por 10 guarismos comprendidos del 0 al 9. La operación aritmética 3x5=15 se entiende perfectamente.

Supongamos que la base que utilizamos no es 10 sino 7. Los guarismos utilizados en este caso son los comprendidos entre el 0 y el 6 y la operación aritmética 3x5=21 en base 7.

Bien si lo que pretendemos es calcular el módulo 7 de 21 obtenemos 1. Esto es (kx7)+1 donde k en este caso es 2. Para el número 64 el módulo 7 también es 1 dado que 64=(kx7)+1 para k=9.

Del mismo modo que en aritmética decimal dos números son inversos cuando multiplicados entre sí el resultado es la unidad. Por poner un ejemplo  3x(1/3)=1, 3 y 1/3 son inversos, podemos decir que 3 y 5 son inversos en módulo 7.

Un número m tiene inverso en módulo n si no existe ningún número (excepto el 1) menor que n y menor que m que los divida de forma exacta. Esto es lo que se llama números primos relativos. Esto se puede demostrar fácilmente pero no es el objetivo de esta entrada.

Por ejemplo en módulo 7 todos los números (el cero no se tiene en consideración) deben tener inverso porque 7 es primo absoluto y no hay ningún número que lo divida, así:

El inverso de 1 es 1 porque 1x1=1   que dividido por 7 es cero y resto 1 (1x1 mod 7=1)
El inverso de 2 es 4 porque 2x4=8   que dividido por 7 es uno y resto 1  (2x4 mod 7=1)
El inveros de 3 es 5 porque 3x5=15 que dividido por 7 es dos y resto 1  (3x5 mod 7=1)

Según Euler existe una función Phi(n) representa la cantidad de números que tienen inversa para un módulo n dado. En nuestro ejemplo Phi(7)=6 porque todos los números (sin tener en cuenta el 0) tienen inversa, 6 en total. Para n primo Phi(n)=n-1 y si n está formado por la multiplicación de dos primos pxq, Phi(n)=Phi(pxq)=(p-1)x(q-1).

Para encriptar un número tomamos dós primos muy grandes (p y q) y los multiplicamos entre sí para obtener n.
Calculamos Phi(n)=(p-1)x(q-1).

La clave pública será un número aleatorio que sea primo relativo de Phi(n) (esto es para que tenga inversa). Denominamos s a este número y la clave pública sera la dupla (s,n). A la inversa la llamamos t y esta será la clave privada. 

En este momento tenemos un número s que sale de Phi(n), un número t que sale de Phi(n) y el módulo n. Como veremos a continuación con s y n podemos cifrar y con t y n podemos descifrar, por lo que podemos prescindir de Phi(n).

Si alguien quisiera conseguir nuestra clave privada debería descifrar Phi(n) y es aquí donde radica la dificultad de averiguar p-1 y q-1 mediante la factorización de números que deben ser primos y enormes. El problema se vuelve imposible incluso para los sistemas más potentes en la actualidad. 

Bien, para cifrar elevamos a k el caracter en cuestión. Para descifrar debemos creernos la siguiente igualdad igualmente demostrable. M elevado a Phi(n)=1 en módulo n y es en esta propiedad en la que se basa todo el algoritmo RSA.

En el ejemplo anterior Phi(7)=6. Para el número 2, 2 elevado a 6 es 64 que como vimos es 1 en módulo 7.

Vamos a elevar m a s para cifrarlo y luego lo elevaremos a t para descifrarlo.
Elevar m a s y luego a t es lo mismo que elevar m a (sxt).
S y t se obtienen de Phi(n) y son inversos por lo que sxt mod Phi(n)=1.
Esto es lo mismo que decir que sxt=kxPhi(n)+1.
Por lo tanto m elevado a (sxt) =(m elevado k elevado a Phi(n)) x (m elevado a 1).

M elevado a Phi(n) = m mod n =1 por lo tanto tenemos (1 elevado a k) x (m elevado 1)=m.

Podemos descifrar con claves generadas por un módulo Phi(n) usando otro módulo distinto de n.

Veamos un ejemplo numérico:

Generamos un módulo compuesto por el producto de dos primos: n=5x11.
Calculamos Phi(n) como (5-1)x(11-1)=40.
Tomamos s=7 que es primo relativo con 40.
Calculamos su inversa módulo 40 que es 23. 7x23=161=1 módulo 40. 
Tenemos que t=23.
Por lo tanto clave pública (55,7) y clave privada (55,23).
Cifrar el número 2 supone 2 elevado a 7 que es 128 = 18 mod 55.
Si queremos descifrar elevamos 18 a 23 módulo 55 = 2.



miércoles, 7 de agosto de 2013

Android básico

A todos nos ha ocurrido alguna vez, que consultando la web en busca de la solución a nuestras dudas, lejos de conseguirlo, encadenamos uno tras otro términos técnicos que nos dispersan hasta el punto de desistir de nuestro empeño. En otras ocasiones nos centramos en la nueva información olvidando por completo cual era la cuestión que nos había conducido hasta allí.

El propósito de esta entrada es resumir la información más básica relacionada con la manipulación de un smartphone con sistema operativo Android.

Para empezar es preciso indicar que el 92,5% de los smartphones en España son Android y entre el 75 y el 80 por ciento a nivel mundial.

Android inc. nace en 2004 y el sistema operativo se posiciona para dispositivos como cámaras fotográficas. En 2005 en comprada por Google y en 2007 es presentado como sistema operativo para móviles. En octubre de 2008 aparece el primer teléfono (el HTC Dream) con este sistema.

Solamente han hecho falta cinco años para copar el mercado mundial. La respuesta a estos está clara, Android es libre y funciona relativamente bien.

Entrando en materia, cuando compramos un teléfono móvil con Android tenemos que tener en cuenta que el fabricante no quiere problemas, por eso el sistema no permite modificar el software de la ROM y por supuesto, no permite toquetear el sistema operativo.

Si deseamos "customizar" el software del fabricante, sustituirlo por otro diferente o actualizarlo, es necesario que el "boot loader" nos lo permita. Algunos fabricantes nos proporcionan el código para hacerlo si se lo solicitamos adjuntando datos como el IMEI, modelo, y número de serie del teléfono.

No debemos confundir esta operación con la liberación del teléfono para poder usarlo con otro operador. 

Con este código y una pequeña aplicación podemos hacer que el "boot loader" (también hay aplicaciones que no necesitan código) nos permita modificar la ROM. Hacer esto tiene sus riesgos. Podemos "flashear" mal la memoria y haremos un bonito ladrillo ("brick") de nuestro teléfono.

Es por ello que nunca viene mal instalar un "recovery" y hacer un "backup" del sistema antes de hacer modificaciones importantes, teniendo en cuenta que la mera instalación de un "recovery" necesita que el sistema esté "rooteado".

No debemos confundir el este "backup" con el realizado por utilidades del propio teléfono para salvar contactos o aplicaciones y que en caso de "brickeo" no nos servirían para nada.

"Rootear" el teléfono consiste en dotar al usuario de permisos de administrador raiz ("root") que le permitan modificar archivos y carpetas del sistema con el objetivo de instalar, modificar, probar, investigar etc.

Android está basado en Linux y este en Unix donde el sistema de privilegios y permisos (comparado con windows por ejemplo) están muy claramente implementados.

Android no ha sido ajeno a la crítica. Hemos dicho que está basado en linux para abstraer el hardware del terminal de las aplicaciones que no dejan de ser un java modificado (de hecho Oracle pleiteó sin éxito con Google por la violación de patentes). Nada nuevo bajo el sol salvo una magnifica idea para convertir tecnologías libres en la mayor estrategia comercial del siglo XXI hasta el momento (que se dice pronto).

Actualmene la última versión de Android es la 4.3 que no hace grandes añadidos a la 4.1 más extendida. Muy pronto aparecerá la versión 5.0 que se supone revolucionaria.

Por último comentar que las versiones de Android siempre tienen nombre de comestibles tales como sandwich de helado o gominola. La primera versión se denominó tarta de manzana y la que está por venir tarta de limón.

No entraremos a debatir la política de los colores, las frutas y los sabores en la publicidad en general y en las compañías tecnológicas en particular.

De momento esto es todo, hay manuales abundantes en la red para acometer todos y cada uno de los pasos aquí comentados para cada modelo de teléfono o tableta, pero este no es mi propósito.