dit/UPM - Universidad Politécnica de Madrid
Transcripción
dit/UPM - Universidad Politécnica de Madrid
dit-upm Criptografía bitcoins & blockchain José A. Mañas < http://www.dit.upm.es/~pepe/> Dep. de Ingeniería de Sistemas Telemáticos E.T.S. Ingenieros de Telecomunicación Universidad Politécnica de Madrid 7 de octubre de 2016 dit índice 1. bitcoins 2. blockchain bitcoin & blockchain 2 billetes dit ¿qué es un billete? una cantidad firmada por el emisor ¿de quién es el billete? del que lo tenga en la mano si pierdes el billete es del que lo encuentra bitcoin & blockchain 3 bitcoin dit ¿qué es una moneda digital? un valor a nombre de un beneficiario (address) firmada por el anterior propietario valor hash(Kp) signed by previous ¿de quién es la moneda? del que tenga una clave privada Ks cuya clave pública Kp sea tal que address = hash(kp) o sea, una prueba de posesión si pierdes la moneda, no es de nadie si alguien adivina tu clave privada, la moneda es suya bitcoin & blockchain 4 dit bitcoin & blockchain un monedero ligero 5 ¿a quién? dit P2PKH – pay to public key hash (= address) al que demuestre conocer el secreto de una clave pública cuyo hash es ese P2PK – pay to public key al que demuestre conocer el secreto cuya clave pública es esa P2SH – pay to script hash bitcoin & blockchain 6 criptografía dit curvas elípticas de potencia 128 bits secp256k1 y2 = x3 + 7 over Zp p = 2256 – 232 -29 – 28 - 27 – 26 – 24 -1 G = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8 http://www.secg.org/sec2-v2.pdf bitcoin & blockchain 7 addresses dit A = ripemd160(sha256(secret)) (160 bits) base58check encoding e.g. 174sG4urSK4zoqFw6T8AQwMuhLj6u2wL9W bitcoin & blockchain 8 transacción dit billetes cambia de mano bitcoin firmo que lo traspaso bitcoin & blockchain 9 una transacción dit 3D9FUuy… tenía 3.16344237 BTC que reparte 0.00126049 BTC a 13JPtvg… el pago 3.16218188 BTC a 3D9FUuy… el cambio bitcoin & blockchain 10 dit bitcoin & blockchain una transacción 11 dit una transacción 1. 3D9FUuy… manda 3.16404237 BTC (~ 1,708.58€) 2. 13JPtvg… recibe 0.00126049 BTC (~ 0.68€) 3. bitcoin se queda una comisión de 0.0006 BTC (~ 0.32€) 4. 3D9FUuy…recibe como cambio 3.16218188 BTC (~ 1,707.58€) bitcoin & blockchain 12 dit bitcoin en papel puedes recibir en papel una moneda que, para incorporar a tu cuenta, hay que firmar el papel trae la clave de firma para que te la transfieras a ti mismo bitcoin & blockchain 13 dit otra transacción para proteger el anonimato, la vuelta puede ir a otra dirección controlada por el mismo usuario es habitual que un usuario tenga muchas claves incluso que se vayan generando sobre la marcha bitcoin & blockchain 14 dit bitcoin & blockchain monedero con varias claves 15 una transacción dit varias entradas usamos varios billetes para pagar varias salidas a varios destinatarios una salida suele ser otra clave mía bitcoin & blockchain 16 dit bitcoin & blockchain un pago 17 dit creación de dinero sale de la nada bitcoin & blockchain 18 dit bitcoin & blockchain generate a request 19 dit índice 1. bitcoins 2. blockchain bitcoin & blockchain 20 balance (ledger) dit ¿cómo sabemos cuánto dinero tiene cada dirección en cada momento? para que nadie pague con dinero que no tiene para que nadie pague 2 veces con el mismo billete (double spanding) la solución tradicional es un balance universal así funcionan todos los bancos con un super-host y el banco intermedia todas las transacciones el banco tiene todos los movimientos (y tiene la última palabra) yo tengo MI COPIA en excel bitcoin & blockchain 21 dit distributed ledger todo el mundo sabe lo de todo el mundo bitcoin & blockchain 22 dit registro compartido https://www.youtube.com/watch?v=l9jOJk30eQs bitcoin & blockchain 23 distributed ledger dit eliminamos el registro central nadie es más que nadie peer-to-peer sin autoridad central ¿cómo se consigue que todos tengamos el mismo registro? ¿cómo se gestionan los retardos de transmisión? ¿cómo se detecta si alguien miente? la solución se llama blockchain (cadena de bloques) y la garantía no es absoluta: simplemente es muy difícil que un engaño perdure en el tiempo se descubre en unos 10 minutos podemos fiarnos (es estable) en unos 60 minutos bitcoin & blockchain 24 bloques encadenados dit cada bloque contiene unas cuantas transacciones cada bloque tiene el hash del anterior (SHA-256) hay 1 bloque base: The Genesis Block (hardcoded) 1 transacción (3.1.2009) https://en.bitcoin.it/wiki/Genesis_block bitcoin & blockchain 25 bloques dit los bloques los genera cualquiera (les llaman mineros) cogiendo suficientes transacciones para quedarse con una buena comisión siendo subvencionado con unas cuantas bitcoins (incluyen una transacción sin origen destinada a ellos mismos) y hace un broadcast para que se añada al bloque anterior puede haber varios mineros que encuentren bloques a la vez (concurrency race) y … bitcoin & blockchain 26 dit merkle tree algoritmo eficiente O(log n) para crear un hash de muchas entradas n = sha256(sha256(n1, n2)) bitcoin & blockchain 27 dit SPV Simple Payment Verification para que los monederos sean ligeros, solamente almacenan las transacciones de su dueño y pueden verificarlas contra un servidor que SÍ tiene toda la cadena, revisando solo los headers de los bloques bitcoin & blockchain 28 consenso dit proof of work un bloque es válido si su hash es mayor que un cierto umbral hay que probar bloques hasta que sale uno que cumple es muy sencillo de verificar el umbral se ajusta cada X para que el tiempo que se tarda en generar un bloque válido sea de unos 10 minutos puede haber 1 colisión, 2, 3, 4, … pero según avanza la bifurcación, es menos y menos probable que ocurra y al cabo de 6 bloques se considera que la cadena que lo consigue es ganadora ganadora quiere decir que nos fiamos de la más larga ojo: nadie tira nada, pero es casi imposible que aparezca en el futuro una cadena mejor bitcoin & blockchain 29 proof of work dit averiguar X tal que bloque(X, lista de transacciones, hash_anterior) > N N se calcula cada 2016 bloques (~14 días) bitcoin & blockchain 30 dit bitcoin & blockchain una transacción confirmada 31 dit 51% attack si alguien controla la mayoría de la capacidad de generar bloques (> 50%) puede generar bloques a su antojo y manejar el registro general sin consenso https://learncryptography.com/cryptocurrency/51-attack bitcoin & blockchain 32 dit índice 1. bitcoins 2. blockchain bitcoin & blockchain 33 utilidad dit bitcoin es una moneda sin autoridad central lo que provoca fuertes emociones a favor y en contra todos los bancos lo están mirando por lo que les afecta blockchain es una tecnología que permite tener un registro distribuido probablemente seguro esto elimina los problemas de las soluciones centralizadas es aplicable a muchos escenarios en donde se distribuye la tarea de “registrador” una solución perfecta y cara una solución probable y barata requiere conectividad Partition tolerance is the ability of a distributed system to continue operating correctly even in the presence of a network partition. bitcoin & blockchain 34 computación distribuida dit los generales bizantinos un experimento mental creado para plantear de una forma metafórica el problema de tener un conjunto de sistemas informáticos con un objetivo común que tienen que encontrar un plan de acción común a partir de una estructura jerárquica donde uno de los sistemas tiene mayor prioridad proporciona una orden a partir de la cual el resto de sistemas tiene que operar (fijar su decisión). Además es posible que alguno de ellos no sea fiable y provea información falsa de forma intencionada. https://es.wikipedia.org/wiki/Problema_de_los_generales_bizantinos bitcoin & blockchain 35