Mostrando entradas con la etiqueta desarrollo. Mostrar todas las entradas
Mostrando entradas con la etiqueta desarrollo. Mostrar todas las entradas

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?

martes, 16 de enero de 2018

Empezando con el desarrollo de DApps en Ethereum



Como ya he comentado varias veces estoy haciendo un doctorado, no se me ocurrió otra cosa
que meterme en IoT + Blockchain y, como buena curiosa que soy, nada mejor para entender las
cosas que meterte en faena y poner a crear tus propias DAaps.

Primero ¿Que es una DApp?
DApp es el acrónimo para de Decentralized Application, no son ni más ni menos que
aplicaciones basadas en la tecnología Blockchain (para los que no entiendan bien
Blockchain, me apunto para la semana que viene un compendio de recursos para ellos).

Las características que toda DApp comparte son:
  • Open Source: Los cambios son consensuados. 
  • Descentralizada: Los datos son guardados en Blockchain (que es descentralizado por definición). 
  • Probada: Bitcoin usa PoW, Ethereum también aunque esta programado para finales de este año hacer un hibrido de PoW y PoS. Han de ser probadas. 
  • Incentivada: Cuando se validen ls transferencias, se han de incentivar. Aquí no estoy muy de acuerdo con que esto se aun punto general ya que si piensas en criptomonedas como IOTA (que tendrá pronto Smart Contracts) todas sus transacciones y validaciones son gratuitas. Pero por el momento dejemoslo como característica general. 

Resultado de imagen de blockchain


Ethereum diferencia entre tres tipos de aplicaciones:
  • Financieras: Manejan “cripto-dinero” de forma directa. 
  • Semi-financieras: Donde hay dinero en juego pero no es la finalidad principal. 
  • No financieras: Donde el dinero no es lo que importa aquí pone como ejemplo los sistemas de votación o gobierno descentralizado. Siempre que un minero procesa un Smart Contrat se mueve dinero (por el gas consumido para procesarlo) así que, no os engañeis, siempre hace falta tener ether de por medio. 
Bien, ya sabemos lo que queremos hacer: una DApp. Ahora, la pregunta que he visto por tantos rincones de la red ¿Por donde empiezo?
Una DApp no es diferente a cualquier otra aplicación, consta de dos partes:
  • Front: Lo bonito. Lo que ve el usuario. Aquí los lenguajes de desarrollo son libres, el front lo puedes hacer en lo que más te guste. Lo más habitual son front de tipo web (eso también influye en que MetaMask solo tiene soporte web hoy en día, pero lo explicaremos luego) pero aquí puedes sentirte libre de usar el lenguaje que quieras. 
  • Back: La conexión con Blockchain. Esta es la parte donde vais a poder ver la diferencia entre una APP y una DApp. Hasta ahora teníais un back con una BBDD (relacional o no, no vamos a entrar en eso) puede que para vuestra DApp siga haciendo falta una, pero el núcleo de vuestra información estará en la Blockchain. El factor único y diferencial es ese. Para esto necesitamos un lenguaje para poder interactuar con esa Blockchain. El lenguaje más utilizado para ello es Solidity. 
Con Solidity vamos a poder:
  • Interactual con la Blockchain 
  • Crear Smart Contracts 
  • Crear nuestra ICO (que no es más que otro Smart Contract) 

Con esos tres puntos ya lo tienes todo. Entendiendo que es una DApp, que partes la forman, que lenguajes necesitas y que puedes hacer con Solidity. Ya te puedes adentrar a estudiar sobre el mismo y ver ejemplos.
Mis recomendaciones.

MOOCs:
Ethereum Developer MasterClass: https://www.udemy.com/ethereum-masterclass/learn/v4/overview