La respuesta corta
Una blockchain es una lista de registros donde cada asiento lleva una huella del asiento anterior. Si se cambia algo en un asiento viejo, su huella cambia, ya no coincide con lo que el asiento siguiente había anotado, y ese desajuste queda a la vista de cualquiera que mire.
Esa es toda la idea. Todo lo demás en este artículo cuelga de ahí.
La blockchain de Bitcoin es esa lista, con cada transacción que alguna vez se hizo, y cada nodo conserva su propia copia completa en lugar de confiar en la de otro.
Qué es un hash
Una función hash recibe cualquier entrada y produce una salida de longitud fija. Bitcoin usa SHA-256, que siempre devuelve 256 bits, escritos como 64 caracteres hexadecimales.
Dos propiedades la hacen útil acá:
- La salida no conserva parecido con la entrada. Se cambia un carácter y cambia entera.
- Corre en un solo sentido. Dada una salida, no hay método mejor que adivinar para encontrar una entrada que la produzca.
Para probarlo
Para esto no se necesita ningún sitio web. En macOS o Linux, abrir una terminal:
printf 'Hello' | shasum -a 256
printf 'hello' | shasum -a 256
| Entrada | SHA-256 |
|---|---|
Hello | 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 |
hello | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
Una sola mayúscula, y nada de la segunda salida se parece a la primera. No hay parecido parcial del que partir ni forma de correrla hacia atrás. El resto del artículo se apoya en eso.
Qué hay realmente dentro de un bloque
Un bloque son datos de transacciones más una cabecera de 80 bytes. La cabecera tiene seis campos, y tres importan acá:
- El hash de la cabecera del bloque anterior. Este es el enlace. Es lo que convierte la lista en una cadena.
- La raíz de Merkle. Todas las transacciones del bloque se hashean de a pares, una y otra vez, hasta que queda un solo hash. Ese valor representa a todas las transacciones del bloque, así que alterar cualquiera de ellas lo cambia.
- El nonce. Un número que el minero puede cambiar libremente, y la única razón de su existencia se explica más abajo.
Hashear la cabecera da el hash propio del bloque. El bloque siguiente copia ese valor en su propia cabecera, y así hasta la punta de la cadena.
Por qué cambiar un registro viejo rompe todos los posteriores
Supongamos que un bloque de un año atrás anota que Alice le pagó diez monedas a Bob, y alguien quiere que diga que Alice le pagó a Eve.
Editar la transacción cambia la raíz de Merkle. Una raíz de Merkle distinta cambia la cabecera. Una cabecera distinta cambia el hash del bloque. Y el bloque siguiente había anotado el hash viejo, así que ahora apunta a un bloque que ya no existe. Arreglar ese bloque cambia su hash, y así con cada bloque desde la alteración hasta el presente.
Esto no es una regla que alguien haga cumplir por política. Es lo que el arreglo produce por sí mismo. Cualquier nodo que compare la cadena que tiene con la alterada ve la ruptura de inmediato, en el primer bloque donde el hash anotado y el hash real dejan de coincidir.
Por qué rehacer el trabajo no es solo cuestión de tiempo
Recalcular hashes es barato. Recalcular hashes válidos no lo es.
Un bloque solo se acepta si el hash de su cabecera queda por debajo de un objetivo fijado por la dificultad vigente de la red. Como el hash no se puede dirigir, la única forma de acertar es cambiar el nonce, hashear otra vez y repetir, miles de millones de veces. Eso es la prueba de trabajo: la cabecera, hecha como corresponde, costó electricidad real.
Así que el atacante tiene que rehacer la prueba de trabajo de cada bloque desde el que alteró en adelante, mientras el resto de la red sigue extendiendo la cadena honesta. Para alcanzarla necesita producir bloques más rápido que todos los demás juntos, y sostenerlo. Los nodos siguen la cadena válida con más trabajo acumulado, así que cualquier cosa menor a eso produce apenas una cadena más corta que nadie adopta.
Lo que se suele entender mal
"La blockchain es inmutable." No lo es, y la palabra causa más daño que bien. La cadena es cara de cambiar, y el costo sube con cada bloque que se construye encima. Esa es una propiedad mucho mejor que una promesa, porque se puede poner un precio. Los bloques de la punta se reorganizan de vez en cuando, cuando dos mineros encuentran un bloque casi al mismo tiempo y la red se decide por uno. Eso es funcionamiento normal, no un ataque, y es por lo que una confirmación vale menos que seis.
"El cifrado mantiene segura la blockchain." Acá no hay cifrado. Hashear no es cifrar: no tiene clave y nadie puede revertirlo, ni siquiera quien lo calculó. Las firmas de las transacciones usan criptografía asimétrica, que es un mecanismo aparte haciendo un trabajo aparte.
"Si está en la blockchain, tiene que ser cierto." La cadena registra que una firma válida autorizó una transferencia. No dice nada sobre si quien firmó tenía derecho a hacerlo, si actuó bajo coacción, o si las monedas habían sido robadas antes. Es un registro de lo que pasó, no un juicio sobre eso.
Por dónde seguir
La pregunta que esto abre es quién realiza ese trabajo y por qué se molesta, que es mineros de Bitcoin. Después nodos de Bitcoin, por la parte del sistema que verifica todo y se niega a cobrar por hacerlo.
