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?

viernes, 9 de febrero de 2018

Ataques contra Blockchain: El 51%



La semana pasada facilité tres documentos con los que se puede entender muy bien qué es blockchain y como funciona. Esta semana quería hacer un compendio de ataques famosos, con los que nos aterran en todos los blogs por donde pasamos, sobre blockchain pero según he comenzado a escribir la cosa se ha alargado muchísimo así que he decidido romperlo en varios posts diferentes.

Me ha parecido que el del 51% debía ser el primero ya que no hay documento en la red donde no lo mencionen pero.. ¿realmente es algo a temer? O más bien es algo que se pone en todas partes porque es “fácil de entender”.

El ataque se resume en que si alguien tiene el 51% de los recursos, puede llegar a manipular los datos que se introducen en el bloque e introducir transferencias falsas produciendo de ese modo, robos. Afecta tanto en monedas basadas en Prueba de Trabajo (PoW) como en Prueba de Participación (PoS).

Vamos a entender esto con más detalle según cada una de las posibles pruebas.

Prueba de Trabajo (PoW)

La mayoría de las criptomonedas usan este tipo de pruebas para poder incluir dentro de su Blockchain un nuevo bloque, por lo que lo que le interesaría a un atacante dominar en su 51% es la cantidad de hardware haciendo físicamente minería. Es decir, necesita que el 51% de las máquinas que están haciendo minería en el mundo estén bajo su control. En esta web se puede ver, en tiempo real, que compañías, hubs o pools de minería controlan que %. Como podéis observar la que más (actualmente) es BTC.com con la friolera de un 24,3%. Esa ya es una cantidad brutal pero para que llegara al 51% tendría que crecer exponencialmente, ya que el resto de pools también lo hacen.
La probabilidad de que esto pase es casi imposible. A esta dificultad hay que añadir que, para que un bloque sea aceptado en la blockchain al menos 6 mineros han de aceptarlo por lo que añadid la dificultad que los 6 sean de ese 51%, con que uno solo dijera que ese bloque no le cuadra ya no valdría de nada.

En mi opinión personal es tan complicado que ambas condiciones se cumplan que el día que lo haga será porque ya nadie nos importará, Bitcoin estará muriendo quedando apenas mineros que los sustenten y por eso podrán manipularlo.


Prueba de Participación (PoS)

Esta prueba será implementada a finales de este año en Ethereum, van con retraso pero es uno de los objetivos de la criptomoneda para diferenciarse. Lo que dice es que, para evitar gastar tantos recursos naturales (buscando por fuerza bruta nonces) la red se sustenta en un parámetro de confianza que es la cantidad de dicha criptomoneda que tienes. Es decir, que si tienes en tu Wallet muchas monedas de Ethereum eres más confiable ya que serás el primer interesado en que dicha moneda funcione correctamente por lo que tus validaciones de bloques son mejor aceptadas que los que tienen menos monedas que tu. Siguiendo esa premisa el ataque del 51% sigue siendo posible ya que si dispones del 51% de las monedas que existan en esa divisa puede que seas el que valide muchas transferencias consecutivas y, por ello, incluso llegar a manipular transferencias.
Bien, para ver si este ataque tiene base como para preocuparnos pensemos en las dos criptomonedas por excelencia, primero en Bitcoin. Tiene 21.000.000 de monedas generadas por lo que alguien que quiera hacer este ataque tendría que comprar, al menos 10.710.000 bitcoins. Ahora que las criptomonedas están desplomándose vamos a poner un valor de media de 4000 euros el bitcoin (y tirando a la baja) eso querría decir que un atacante necesitaría invertir 42.840.000.000 de euros para poder hacerse con esa cantidad ¿Os parece viable? Pues ahora imaginaros con Ethereum me direis “vale mucho menos en el mercado” pero Ethereum no tiene límite de monedas, por lo que…. ¿cuando alguien sería el dueño del 51% de la divisa?

Lo dicho, el día que se logre hacer un ataque del 51% es porque esa moneda ya no le importará a nadie. Puede que valga menos de 0,000001 la unidad y alguien con mucho humor y esperanza compre las suficientes como para hacer ese ataque soñado. Hoy en día dadas las dos tipologías de pruebas creo que no es viable, por lo que podemos dormir tranquilos.