Lección 13: Blockchain Flashcards
¿Qué es bitcoin?
- Bitcoin es una criptomoneda: Fragmento de código que representa la propiedad de un concepto digital.
- Bitcoin es un protocolo de blockchain (red P2P distribuida que mantiene un registro de saldos de Bitcoin).
- Seguridad basada en criptografía y mecanismo de consenso (PoW)
Beneficios de Bitcoin
- Descentralizado: ninguna entidad controla la red
- Suministro limitado: controlado por el algoritmo
- Pseudo-anónimo: usuarios identificados por direcciones
- Inmutable: las transacciones no pueden ser revertidas
- Divisible: la unidad mínima es un satoshi (8º decimal)
¿De que se compone Bitcoin?
- Bitcoin protocol: red P2P descentralizada
- Blockchain: registro público de transacciones.
- Reglas de consenso: reglas de emisión y transmisión
- Proof of Work: mecanismo de consenso global.
Direcciones y claves
- Dirección proporciona identidad pseudoanónima única.
- Basadas en criptografía asimétrica (clave pública y privada).
- Clave privada (número aleatorio, se usan para firmar las transacciones.)
- Clave pública: derivadas de la clave privada.
- Dirección bitcoin: derivada de clave pública, caracteres alfanuméricos (siempre empieza por 1).
Creando y verificando direcciones
- Dada la clave pública, cualquiera puede verificar si la dirección corresponde a la clave pública.
- Símil dirección - cuenta bancaria.
- La clase privada es la que permite desbloquear la cuenta para poder hacer transacciones desde esa dirección.
- Se puede regenerar la clave pública a partir de la privada.
- Sin la clave privada es imposible transferir dinero.
Wallets
• Se utilizan para almacenar todas las nuestras claves (y direcciones).
• Se almacenan utilizando un cifrado simétrico con clave secreta.
• Contienen nuestro dinero actual (transacciones sin gastar de cuyas
direcciones tenemos la clave privada).
Tipos de wallets
• No-deterministas: todas las claves privadas son generadas de forma aleatoria
• Deterministas: una clave privada aleatoria, el resto de claves son derivadas
- Web wallets (de custodia): se accede a través del navegador, son guardadas por una tercera parte.
- Software wallets (extensión en el navegador): el software y las claves privadas están en el equipo del cliente.
- Hardware wallets: las claves privadas se guardan en un dispositivo físico seguro.
- Cold wallets: las claves nunca han sido conectadas a ninguna red (ej. en papel).
Transacción de Bitcoin
- Una transacción es un intercambio de Bitcoins entre direcciones.
- No hay concepto de “balance por cuenta” (sólo transacciones, lo que implica que hay que enviarse el dinero sobrante de la transacción a una cuenta propia).
Modelo UTXO (Unspent Transaction Output)
- Inputs:
- Una o más “salidas sin gastar” (UTXOs) de transacciones anteriores.
- Sin gastar es que no se ha utilizado como entrada de otra transacción.
• Outputs:
• El destino de la transacción son direcciones de destino.
• Si se quiere transferir “menos dinero”, al menos habrá 2 salidas,
destinatario(s) y dirección de cambio.
Comisión de transacción
• En teoría, las transacciones son procesadas de forma gratuita.
- Las comisiones de transacción no aparecen.
• No obstante, los usuarios pueden ofrecer una “recompensa” a los
mineros por validar su transacción.
• La comisión de transacción es la diferencia entre la suma los inputs
y los outputs (fees = inputs – outputs).
• Los mineros suelen priorizan transacciones en base a su comisión.
Prueba de “propiedad” de transacción
• La “prueba” se basa en firma digital. Se envía la transacción junto con
la firma digital para cada una de las entradas (si tienen direcciones
distintas).
• La firma incluye la clave pública de la dirección a la que pertenece.
Verificación de una transacción
- La clave pública corresponde con la
dirección, repitiendo el proceso sobre la
clave pública que genera una dirección
unívoca. - La clave pública permite verificar la
firma, si permite verificarla el firmante
es dueño de la transacción anterior.
Seguridad de la verificación
• La transacción contiene toda la información necesaria para su
verificación (no se necesita un certification authority)
- Nunca se comparten las claves privadas.
Cadena de bloques
• Cada bloque contiene un conjunto de transacciones.
• Cada bloque está ligado al bloque anterior.
• El primer bloque se denomina “génesis” y se crea manualmente.
• Se pueden añadir bloques a la cadena, pero no se pueden eliminar ni
modificar bloques existentes.
• Los bloques están ligados mediante mecanismos de criptografía de
forma que cualquiera pueda comprobar la veracidad de la cadena.
Estructura de un bloque de Bitcoin
- Cabecera del bloque (80 bytes) • Versión (4 bytes) • Hash del bloque anterior (32 bytes) • Merkle root (32 bytes) • Timestamp (4 bytes) • Dificultad (4 bytes) • Nonce (4 bytes)
- Transacciones (variable)
Identificadores de bloque
• Hash de la cabecera del bloque: Hash SHA256 único generado
para cada bloque.
• Altura de bloque: Posición que ocupa el bloque en
la cadena.
Merkle Tree
- Almacena un resumen de todas las transacciones en el bloque.
- La cabecera del bloque incluye un Merkle Tree del bloque.
- Las hojas del árbol son las hashes de las transacciones.
- Los padres consisten en el hash de los hijos.
- Se utiliza para pruebas de integridad y de pertenencia del bloque
Bitcoin – Tipos de nodos
- Completos
- Ligeros
- Mineros
Nodos completos (full node)
- Tienen almacenada toda la cadena de bloques de Bitcoin.
- Cada vez que se “confirma” un nuevo bloque en la red, lo almacenan.
- Pueden verificar de forma segura cualquier transacción o bloque.
Nodos ligeros (lightweight wallet)
- Pueden verificar transacciones utilizando SPV (Simplified Payment Verification).
- Almacenan las claves de usuario y sus transacciones.
Mineros (miners)
- Únicamente realizan el “Proof of Work” de los bloques.
* Necesitan un “full node” para validar el bloque.
Simplified Payment Verification (SPV)
• Método para verificar si transacciones han sido incluidas en un
bloque utilizando sólo su cabecera.
• No hace falta descargarse el bloque entero.
• Una prueba de inclusión sólo necesita:
• Merkle Root del bloque (Merkle Tree de las transacciones del bloque)
• Hashes entre la transacción y la raíz (“sibling hashes”)