Facultad de Estudios Superiores Acatlán Matemáticas Aplicadas y Computación BLOCKCHAIN CRIPTOMONEDAS Alumno: Guerrero García Said Antonio Profesor: Santillán Vasconcelos Jorge 1. Marco Teórico 1.1 ¿Que es Bitcoin? 1.2 ¿Qué es la programación concurrente? 1.3 Blockchain 1.4 Bloques 1.5 Minería 1.6 Nodos 1.7 Criptografía Simétrica 1.8 Criptografía Asimétrica 1.9 PoW (Proof of Work) 1.10 Función Hash SHA256 1.11 Token 1.12 Pool de Minería 2. Programación Concurrente 2.1 ¿Cómo se realiza una transacción en Bitcoin? 2.1 ¿Cómo se implementa el algoritmo de BlockChain? 2.2 Operaciones necesarias para descifrar el Hash 3. Bibliografía BLOCKCHAIN CONCURRENTE CRIPTOMONEDAS PROGRAMACIÓN 1. Marco Teórico 1.1 ¿Qué es Bitcoin? “Bitcoin es una moneda, como el euro o el dólar estadounidense, que sirve para intercambiar bienes y servicios. Sin embargo, a diferencia de otras monedas, Bitcoin es una divisa electrónica que presenta novedosas características y destaca por su eficiencia, seguridad y facilidad de intercambio. Su mayor diferencia frente al resto de monedas, se trata de una moneda descentralizada, por lo que nadie la controla. Bitcoin no tiene un emisor central como los dólares o los euros, la criptomoneda es producida por las personas y empresas de alrededor del mundo dedicando gran cantidad de recursos a la minería.” [1] Bitcoin llegó para convertirse en el dólar descentralizado, existen inversionistas como Salomundo que venden su Lamborghini Aventador a cambio de Bitcoins, ya que no se puede comprar una suma grande directamente. También existen otros derivados de Bitcoin como lo son Etherum, pero su giro no es precisamente la monetización, más bien es un sistema de contratos inteligentes en el que ambas partes exponen sus requisitos para llevarlo a cabo, en cuanto ambas partes cumplen, se liberan las “recompensas” y automáticamente se registra una nueva cadena en el Blockchain, el cual es la base de ambas criptodivisas. 1.2 ¿Qué es la programación concurrente? “Se conoce por programación concurrente a la rama de la informática que trata de las técnicas de programación que se usan para expresar el paralelismo entre tareas y para resolver los problemas de comunicación y sincronización entre procesos. El principal problema de la programación concurrente corresponde a no saber en qué orden se ejecutan los programas (en especial los programas que se comunican). Se debe tener especial cuidado en que este orden no afecte el resultado de los programas.” [2] La programación concurrente le ayuda a Bitcoin y todas las derivadas criptodivisas para la seguridad del sistema, ya que se realizan varias tareas simultáneamente, o bien una tarea específica en diferentes ordenadores (nodos), la cual es verificar la autenticidad de la transacción, ya sea en la compra y venta de Bitcoins o en el término de un Smart Contract en Etherum. 1.3 Blockchain “Una cadena de bloques es esencialmente solo un registro, un libro mayor de acontecimientos digitales que está “distribuido” o es compartido entre muchas partes diferentes. Solo puede ser actualizado a partir del consenso de la mayoría de participantes del sistema y, una vez introducida, la información nunca puede ser borrada. La cadena de bloques de Bitcoin contiene un registro certero y verificable de todas las transacciones que se han hecho en su historia. La cadena de bloques es un registro de todas las transacciones que tienen lugar “empaquetadas” en bloques que los mineros se encargan de verificar. Posteriormente serán incluidas en la cadena una vez validadas y distribuidas a todos los nodos que forman la red (actualmente, la cadena de bloques ocupa unos 40 gigas).” [3] La cadena de bloques Blockchain, es un libro contable enorme electrónico en el cual se lleva un registro de cada transacción a lo largo del tiempo, convirtiendo una transacción o un Smart contract en una cadena cifrada con HASH SHA 256. Blockchain no solo tiene aplicación en Bitcoin, y Etherum, también funciona en la administración pública o en el IoT, un ejemplo de la administración pública sería que mediante un sistema elaborado con base en Blockchain podrían llevarse a cabo las elecciones presidenciales, sin duda alguna de que existen n números de votos para el candidato a, m votos para el candidato b y podríamos decir que existe una “verdadera” democracia en nuestro país, pero México no está listo para este tipo de tecnología, hay muchas personas que no saben manejar una computadora, y siempre con el factor humano podría prestarse a engaños para las personas que desconocen de los sistemas informáticos. 1.4 Bloques “Un bloque es un conjunto de transacciones confirmadas e información adicional que se ha incluido en la cadena de bloques. Cada bloque que forma parte de la cadena (excepto el bloque generatriz, que inicia la cadena) está formado por: 1.4.1 1.4.2 1.4.3 Un código alfanumérico que enlaza con el bloque anterior El “paquete” de transacciones que incluye (cuyo número viene determinado por diferentes factores) Otro código alfanumérico que enlazará con el siguiente bloque. El bloque en progreso lo que intenta es averiguar con cálculos el tercer punto anteriormente indicado. Un código que sigue unas determinadas reglas para ser válido y sólo puede sacarse probando sin parar.” [3] Las transacciones de las cuales se habla aquí pueden ser transacciones financieras (Bitcoin), el cumplimiento de un SmartContract, o siguiendo el ejemplo anterior un voto por el presidente de México, se genera un nuevo bloque en progreso después de haber agregado uno al Blockchain. Para agregar un nuevo bloque se necesitan cierto número de transacciones exitosas encriptadas con el cifrado Hash, ya que son confirmados, n cantidad de hashes dependiendo de la criptodivisa, o sistema que esté trabajando con blockchain, después este bloque necesita ser revisado y autorizado por los nodos, si más del 50% de los nodos coincide con que es válido, en ese momento se agrega eternamente al gigantesco libro contable electrónico, el cual es casi invulnerable. 1.5 Minería “Los mineros son ordenadores/chips dedicados que aportan poder computacional a la red de bitcoin para verificar las transacciones que se llevan a cabo. Cada vez que alguien completa un bloque recibe una recompensa en forma de bitcoins (actualmente 12.5 BTC) y/o por cada transacción que se realiza.”[4] Se le denomina mineros, a las personas entusiastas que dedican su computadora, su memoria RAM, su tarjeta de video, como pequeños partícipes dentro de este inmenso sistema a nivel mundial; nos enfocaremos en Bitcoin. Antes como nodo podías llegar a conseguir 25 BTC por descifrar las operaciones matemáticas con punto flotante que lanzan para la verificación del bloque que se añadirá a la nueva cadena, pero ahora se redujo a 12.5 BTC, ya que con el tiempo va decreciendo, empezó ofreciendo 50, como tienen una cantidad finita de BTC que se producirán, a manera de que se mina más Bitcoin, ofrecen menos recompensas. 1.6 Nodos “Un nodo es un ordenador/chip conectado a la red bitcoin utilizando un software que almacena y distribuye una copia actualizada en tiempo real de la cadena de bloques. Cada vez que un bloque se confirma y se añade a la cadena se comunica a todos los nodos y este se añade a la copia que cada uno almacena.” [4] “Una de las mayores curiosidades que tiene el protocolo bitcoin es que cada unidad no es un archivo como tal que se envía como si fuese una película o canción, al estilo de un protocolo P2P como puede ser BitTorrent. En realidad, lo que se produce es un registro del cambio de propiedad de una cantidad determinada de bitcoins en la cadena de bloques. ” [3] Estas fuentes nos explican la función de los nodos en BlockChain, al hablar de que se confirma un bloque, está refiriéndose a que alguna pool de minería resolvió en problema computacional, el cual siempre se resuelve por búsqueda extensiva, y los nodos actualmente, es casi imposible que logren descifrarlo antes que estas granjas de bitcoin, alojadas en su mayor parte en China. Además de intentar minar Bitcoins, todos y cada uno de los Nodos almacena toda la cadena de bloques, para darle certeza al sistema de que es correcta la transacción que se pretende realizar, lo hace comparando el cifrado HASH SHA 256 que se genera de cada transacción, si cada una de ellas coincide con el bloque que se agregará, entonces el nodo lo aprueba, pero no se detiene ahí, hasta que más del 50% de los nodos lo confirme, el bloque será agregado a la BlockChain. 1.7 Criptografía Simétrica “Criptografía simétrica. Conjunto de métodos que permiten tener comunicación segura entre las partes, siempre y cuando anteriormente se hayan intercambiado la clave correspondiente que llamaremos clave simétrica. La simetría se refiere a que las partes tienen la misma llave tanto para cifrar como para descifrar. Este tipo de criptografía se conoce también como criptografía de clave privada o criptografía de llave privada. Existe una clasificación de este tipo de criptografía en tres familias: Criptografía simétrica de bloques (block cipher). Criptografía simétrica de lluvia (stream cipher). Criptografia simétrica de resumen (hash functions). Aunque con ligeras modificaciones un sistema de criptografía simétrica de bloques puede modificarse para convertirse en alguna de las otras dos formas, sin embargo es importante verlas por separado dado que se usan en diferentes aplicaciones. La criptografía simétrica ha sido la más usada en toda la historia, ésta a podido ser implementada en diferente dispositivos, manuales, mecánicos, eléctricos, hasta los algoritmos actuales que son programables en cualquier computadora. La idea general es aplicar diferentes funciones al mensaje que se quiere cifrar de tal modo que solo conociendo una clave pueda aplicarse de forma inversa para poder así descifrar. Aunque no existe un tipo de diseño estándar, quizá el más popular es el de Fiestel, que consiste esencialmente en aplicar un número finito de interacciones de cierta forma, que finalmente da como resultado el mensaje cifrado. Este es el caso del sistema criptográfico simétrico más conocido, DES.”[5] 1.8 Criptografía Asimétrica “Criptografía asimétrica. La criptografía de clave asimétrica o pública fue inventada en 1976 por los matemáticos Whit Diffie y Martin Hellman y es la base de la moderna criptografía. La criptografía asimétrica es el método criptográfico que usa un par de claves para el envío de mensajes. Las dos claves pertenecen a la misma persona que ha enviado el mensaje. Una clave es pública y se puede entregar a cualquier persona, la otra clave es privada y el propietario debe guardarla de modo que nadie tenga acceso a ella. Además, los métodos criptográficos garantizan que esa pareja de claves sólo se puede generar una vez, de modo que se puede asumir que no es posible que dos personas hayan obtenido casualmente la misma pareja de claves. La criptografía asimétrica utiliza dos claves complementarias llamadas clave privada y clave pública. Lo que está codificado con una clave privada necesita su correspondiente clave pública para ser descodificado. Y viceversa, lo codificado con una clave pública sólo puede ser descodificado con su clave privada. La criptografía asimétrica está basada en la utilización de números primos muy grandes. Si multiplicamos entre sí dos números primos muy grandes, el resultado obtenido no puede descomponerse eficazmente, es decir, utilizando los métodos aritméticos más avanzados en los ordenadores más avanzados sería necesario utilizar durante miles de millones de años tantos ordenadores como átomos existen en el universo. El proceso será más seguro cuanto mayor sea el tamaño de los números primos utilizados. Los protocolos modernos de encriptación tales como SET y PGP utilizan claves generadas con números primos de un tamaño tal que los hace completamente inexpugnables. Existen dos tipos de llave, Pública y Privada. Propiedad de las llaves Los pares de llaves son identificados o asociados con personas o con entidades. La propiedad de las llaves públicas, es publicada y conocida por todos aquellos que les incumbe el mensaje. La llave privada es "secreta" y debe quedar bajo la responsabilidad del dueño o responsable del mensaje.”[6] 1.9 PoW Proof of Work “Prueba de Trabajo, o PoW (por sus siglas en inglés), es el algoritmo de consenso original en una red de Blockchain. En la Blockchain, este algoritmo se usa para confirmar transacciones y producir nuevos bloques en la cadena. Con PoW, los mineros compiten entre ellos para completar transacciones en la red y obtener recompensas. En una red, los usuarios se envían unos a otros tokens digitales. Una base de datos descentralizada reúne todas las transacciones en bloques. Sin embargo, se debe tener cuidado para confirmar las transacciones y organizar los bloques. Esta responsabilidad se basa en nodos especiales llamados mineros, y un proceso se llama minería. Los principios de trabajo fundamentales son un complicado acertijo matemático y la posibilidad de probar fácilmente la solución. ”[7] 1.10 HASH SHA256 Una función de hash es simplemente una función que toma el valor de entrada, y desde esa entrada crea un valor de salida determinista del valor de entrada. Para cualquier valor de entrada x, siempre recibirá el mismo valor de salida y cuando se ejecute la función hash. De esta manera, cada entrada tiene una salida determinada. Una función es básicamente algo que toma una entrada y de esa entrada deriva una salida. Una función hash es, por lo tanto, algo que toma una entrada (que puede ser cualquier dato, números, archivos, etc.) y genera un hash. Un hash generalmente se muestra como un número hexadecimal. Esta es la función hash md5, que a partir de los datos de entrada crea una salida hexadecimal de 32 caracteres. Las funciones de hash son generalmente irreversibles (unidireccionales), lo que significa que no puede descubrir la entrada si solo conoce la salida, a menos que pruebe todas las entradas posibles (lo que se denomina un ataque de fuerza bruta). Las funciones de hash se usan a menudo para probar que algo es lo mismo que otra cosa, sin revelar la información de antemano. Aquí hay un ejemplo. Digamos que Alice le presume a Bob que sabe la respuesta a la pregunta del desafío en su clase de matemáticas. Bob quiere que ella demuestre que sabe la respuesta, sin que ella le diga qué es. Entonces, Alice responde a su respuesta (digamos que la respuesta fue 42) para producir este hash: Alice le da este hash a Bob. Bob no puede descubrir cuál es la respuesta de este hash, pero cuando él mismo encuentra la respuesta, puede hacerlo y si obtiene el mismo resultado, entonces sabe que Alice sí tuvo la respuesta. Los hash a menudo se utilizan en este contexto de verificación de información sin revelarla a la parte que realiza la verificación. Aplicaciones de SHA-256 SHA-2 se utiliza en un gran número de herramientas de seguridad y protocolos. Algunos de ellos son TLS, SSL, PGP, SSH, S/MIME, IPsec y Bitcoin. En el protocolo Bitcoin, SHA-256 se utiliza en la creación de claves o direcciones públicas y en la minería de Bitcoin. Creación de direcciones o claves públicas en el protocolo Bitcoin con SHA-256 El proceso de creación de una dirección pública de Bitcoin se inicia con un par de claves privada y pública de una curva elíptica ECDSA. Las direcciones públicas (por ejemplo, 31uEbMgunupShBVTewXjtqbBv5MndwfXhb) que vemos cuando utilizamos un cliente monedero/wallet Bitcoin han pasado un proceso de creación de clave pública y hashing en el que se utilizan las funciones hash SHA-256 y RIPEMD-160 para maximizar su seguridad. Por ejemplo utilizando la herramienta online Xorbin para crear un hash con SHA-256 con la palabra “OroyFinanzas.com” (sin paréntesis) obtenemos este hash de 64 dígitos: bd4526534df7b33772c2f1ee26d97c39ff11379c8848e4e19d74ad849ef66423. Minería de Bitcoin con SHA-256 Bitcoin fue la primera criptomoneda que utilizó SHA-2 como parte de su esquema de prueba de trabajo (proof-of-work en inglés). El auge de la minería ASIC en Bitcoin ha llevado a la creación de otras criptomonedas como Litecoin, la cual utiliza Scrypt (otro algoritmo criptográfico) para la prueba de trabajo. Bitcoin utiliza el algoritmo SHA-256 para generar de manera verificable “al azar” los números de manera que requieran una cantidad previsible de esfuerzo CPU. Generando un hash SHA-256 con un valor menor que el actual target resuelve un bloque y da una recompensa llamada coinbase (no debe confundirse con la empresa Coinbase.com que ha adoptado ese nombre como marca). Actualmente la recompensa es de 12.5 bitcoins. 1.11 Token “Un Token en el contexto Bitcoin y las criptomonedas Todas las criptomonedas sean Bitcoin u otra unidad, independientemente de sus características técnicas, son Token. Un Token en el contexto de Bitcoin representa una cadena alfanumérica que puede ser una clave pública o una clave privada. Por ejemplo esta clave publica 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy (multifirma porque empieza por un 3) es un Token. Un Token en el protocolo Bitcoin puede ser cualquier cadena alfanumérica que represente un registro en la base de datos descentralizada de consenso de Bitcoin.”[9] En otras palabras, se le denominan Token al cifrado HASH SHA 256 resultante de la transacción, el cual es un eslabón para formar un bloque. 1.12 Pool de Minería “Los pools de minería son grupos de mineros cooperadores que acuerdan compartir ganancias de bloques en proporción al poder de hash de minería contribuido. Mientras que los pools de minería son convenientes para el minero promedio ya que liman las diferencias de las ganancias y las hacen más predecibles, desafortunadamente concentran poder en el propietario del pool de minería. Los mineros, sin embargo, pueden elegir redirigir su poder de hash a un pool de minería diferente en cualquier momento.”[10] El poder de hash, se refiere a la capacidad de cómputo de tu ordenador, cuantos hash puede probar por segundo, un pool de minería se encarga de jutar/conectar todo el poder de computo de varios nodos, para lograr ganar los 12.5 Bitcoin que se ofrecen de recompensa por descifrar los algoritmos. Estos pools de minería se concentran en China, siendo Ant pool el mayor oponente con 25.2 % de la capacidad total con la cual trabaja BlockChain. 2. ¿Como se realiza una transación en Bitcoin? Con todo el marco teórico que ya leímos es posible entender la siguiente imagen, pero que tanto conocemos del proceso, y porque lo podemos denominar como proceso concurrente. [11] 2.1 ¿Porque Blockchain en Bitcoin es Concurrente? “Los mineros resuelven el rompecabezas, forman el nuevo bloque y confirman las transacciones. La complejidad del rompecabezas depende de la cantidad de usuarios, la potencia actual y la carga de la red. El hash de cada bloque contiene el hash del bloque anterior, lo que aumenta la seguridad y evita cualquier violación de bloque. Si un minero logra resolver el rompecabezas, se forma el nuevo bloque. Las transacciones se colocan en este bloque y se consideran confirmadas. ”[7] Conclusiones: A grandes rasgos BlockChain trabaja de esta manera: 1.- Alguien solicita una transacción 2.- Dicha transacción se emite a una red p2p que consta de computadoras. 3.- La red de nodos valida la transacción y el estado de los usuarios que usan nuevos algoritmos. 4. Una transacción verificada puede involucrar criptodivisas, contratos, archivos, u otra información. 5.- Una vez verificada, la transacción es combinada con otras transacciones para crear un nuevo bloque de datos para el libro mayo contable. 6.- El nuevo bloque es luego agregado a la cadena de bloques existente conocida como Blockchain, de manera permanente e inalterable. 7.- Transacción completada Blockchain es un sistema concurrente, todas las operaciones que se realizan en la red se van agrupando en bloques , y para validarlas los mineros deben encontrar una especie de clave informática llamada hash. Se trata de fórmulas matemáticas que sintetizan en muy pocos caracteres una gran cantidad de información. No hay dos hash iguales, y no se pueden modificar. Cada bloque cuenta con un hash nuevo y con el hash del bloque inmediatamente anterior, como una especie de sello de lacre. Todo va enlazado, de ahí la partícula chain. Toda esta búsqueda extensiva se da en TeraHashes por segundo, se lanza el problema matemático simultáneamente a millones de ordenadores, pools y granjas de minado y el primer ordenador en descifrarlo se lleva el premio. Por todo este procesamiento simultaneo se dice que es concurrente. Su desventaja es que en donde sea que vayas a ayudar a Blockchain, ya sea haciendo minería, uniéndote a una pool de ordenadores para dedicar tu computadora aportando RAM y tu GPU, o simplemente siento un pequeño nodo, tienes que almacenar todo el Bloque de datos que se ha generado con el tiempo, para que puedas validar, y reconocer cualquier alteración a los hashes del sistema. 3. Bibliografía [1] Qué es Bitcoin. (2018). Bitcoin, la moneda que está cambiando el mundo. 18/06/2019, de Qué es Bitcoin Sitio web: https://www.queesbitcoin.info/ [2] Facultad de Ingeniería Universidad de la República - Uruguay. (-). Programación Concurrente. 18/06/2019, de Facultad de Ingeniería Universidad de la República Uruguay Sitio web: https://www.fing.edu.uy/tecnoinf/mvd/cursos/so/material/teo/so07concurrencia.pdf [3] Bit2Me Academy. (-). ¿Qué es la Cadena de Bloques (Blockchain)?. 18/06/2019, de Bit2Me Academy Sitio web: https://academy.bit2me.com/que-es-cadena-de-bloquesblockchain/ [4] J.M. Lacarte. (2018). Dinero, Bitcoin, Criptomonedas y la Blockchain: ¿Qué está sucediendo?. 18/06/2019, de J.M. Lacarte Sitio web: https://books.google.com.mx/books?id=r8lmDwAAQBAJ&pg=PT19&lpg=PT19&dq=Los +mineros+son+ordenadores/chips+dedicados+que+aportan+poder+computacional+a+ la+red+de+bitcoin+para+verificar+las+transacciones+que+se+llevan+a+cabo.&source= bl&ots=BCBEWLqJre&sig=ACfU3U25uSjVxMD8cDBCmiQFKMdPffJQg&hl=es&sa=X&ved=2ahUKEwjm26iEk_TiAhXL5p8KHbTAqwQ6AEwAXoECAkQAQ#v=onepage&q=Los%20mineros%20son%20ordenadores%2 Fchips%20dedicados%20que%20aportan%20poder%20computacional%20a%20la%2 0red%20de%20bitcoin%20para%20verificar%20las%20transacciones%20que%20se %20llevan%20a%20cabo.&f=false [5] ECURED. (-). Criptografía simétrica. 18/06/19, de ECURED Sitio web: https://www.ecured.cu/Criptograf%C3%ADa_sim%C3%A9trica [6] ECURED. (-). Criptografía asimétrica. 18/06/19, de ECURED Sitio web: https://www.ecured.cu/Criptograf%C3%ADa_asim%C3%A9trica [7] COINTELEGRAPH. (-). Prueba de Trabajo (PoW). 18/06/19, de COINTELEGRAPH Sitio web: https://es.cointelegraph.com/explained/proof-of-work-explained [8] HASH [9] OROYFINANZAS.COM. (23 Octubre 2014). Token Bitcoin: ¿Qué es un token en Bitcoin? – Criptomonedas. 18/06/19, de Oro y Finanzas Diario digital del dinero Sitio web: https://www.oroyfinanzas.com/2014/10/que-token-bitcoin-criptomonedas/ [10] Jordan Tuwiner. (31 enero 2019). Pools de Minería Bitcoin. 18/06/19, de Buy Bitcoin World Wide Sitio web: https://www.buybitcoinworldwide.com/es/mineria/pools/ [11] Javier Becker. (26 de Julio de 2018). ¿Cómo funciona una transacción de Bitcoin?. 18/06/19, de Platzi Sitio web: https://platzi.com/clases/1317-inversioncriptomonedas/12465-como-funciona-una-transaccion-de-bitcoin1357/