miércoles, 21 de febrero de 2018

Hacking de semillas en la criptomoneda IOTA - Parte 1



Resultado de imagen de iota securityAdentrándome más en las diferente criptomonedas el otro día estuve estudiando sobre la generación de sus semillas y sus direcciones público/privada. Toda esta curiosidad viene movida por la noticia de que han robado recientemente 4 millones de IOTA para empezar esta noticia me parece algo confusa ya que según la escala de cambio de IOTA:



1.000.000 de IOTA = 1 MIOTA que es la moneda con la que se especula en las casas de cambio es decir, si robaron 4 millones de IOTA ¿Se podría decir que robaron 4MIOTA, que al cambio ( Y siendo generosa redondeando al alza ya que los 2 euros hace tiempo que la criptomoneda no los ve) robaron unos 8 euros? No, seguramente no pero dejemos sarcasmos aparte (fueron 4 millones de dólares robados) y entendamos porqué pasó esto.

Las criptomonedas se basan en un par de claves pública y privada. Tu eres el dueño y señor de la privada. Nunca has de compartirla, y cuanto más rara y aleatoria sea, mejor.

A partir de esa clave privada se genera una pública, que es la que expones al mundo para poder hacer tu recepción y envío de la criptomoneda. Así trabaja Bitcoin y la mayoría de las criptomonedas pero IOTA… IOTA es diferente.

Para empezar la semilla consta de 81trytes, no os volváis locos eso lo único que significa es que la semilla privada en IOTA tiene que tener 81 caracteres y para ello los únicos caracteres que admite son:



Si, la semilla de IOTA está formada por el alfabeto en mayúsculas y los 9. Si hay algún matemático en la sala que nos calcule la barbaridad de semillas que se pueden producir con esa combinación de caracteres.

Entonces ¿porque robaron esos tokens? Sencillamente porque la gente usaba páginas web para que les generara dicha semilla de forma aleatoria. Alguna de esas webs tenía ganas de hacerse rica y almacenó las semillas que generaba, pasado un tiempo decidió entrar con cada una de esas semillas y transferirse lo que hubiera dentro de ellas.

Fue a partir de esa noticia cuando se levantaron varias voces sobre si es seguro o no que lo único que necesitas para acceder a tu cartera sea conocer la semilla (o en el mundo Bitcoin la clave privada) y ya que no me ha tocado la lotería estas navidades y además quería probar la API de IOTA para Python he escrito un programa para ver si alguien desafía a la estadística y logra encontrar una semilla de IOTA de forma aleatoria.

Os presento Lottery.
Vamos a ver rápidamente qué hace este programilla.

Tiene solo dos funciones, la primera se llama crea_seed y es donde, tal y como os he explicado, coge el conjunto de valores que aceptan las semillas de IOTA y genera aleatoriamente cadenas de 81 caracteres de longitud.

La segunda función le he puesto un bucle infinito (ahora es cuando los puritanos del código me llamarán de todo xD) el cual llama a generar la semilla y después usamos la función del API de IOTA api.get_account_data() para que se descargue toda la información de esa cuenta.

Aquí recordar que son semillas privadas por lo que accedes a toda la información. Muestra por pantalla todas las que ha desestimado como buenas ó tienen saldo 0.

Pero si eres la persona con más suerte del mundo y logras encontrar una semilla (que ya es complicadísimo) pero encima con balance superior a 0, te manda un correo para que sepas que te ha tocado la lotería.

Es una completa tontería de programa pero vale para dos cosas:
  • Deja de manifiesto lo seguro que es el sistema de semilla cuando realmente la guardas bien. Infinitamente más seguro que un login/password centralizados en un servidor.
  • Un pequeño ejemplo de cómo usar la API de Python para IOTA
Hasta aquí hemos entendido cómo funciona el sistema de semilla en IOTA, pero como os dije al principio es muy diferente al resto de criptomonedas.

En el próximo post vamos a ver cómo funcionan las direcciones en IOTA y otro pequeño programa para encontrar semillas de forma un poco más sencilla y dirigida. ¿Seguiremos creyendo que IOTA es seguro?

3 comentarios: