Capítulo 01 de 10 · 9 min de lectura

El problema: dinero sin banco

Copiar un fichero es gratis. Por eso crear dinero digital fue, durante décadas, un problema sin solución… salvo que pusieras a alguien al mando.

El dinero físico se defiende solo

Si te doy un billete de 10 €, yo dejo de tenerlo. No hace falta que nadie lo compruebe: el billete es un objeto, y un objeto no puede estar en dos bolsillos a la vez. Esa propiedad tan tonta —lo que te doy, lo pierdo— es la que hace que el dinero funcione.

Ahora imagina que el dinero es un fichero, moneda.dat. Te lo envío por correo. ¿He dejado de tenerlo? No: te he enviado una copia, y la mía sigue en mi disco. Puedo enviársela también a otra persona, y a otra. Cada una recibe un fichero perfecto, indistinguible del “original”, porque en el mundo digital no existe tal cosa como un original.

A esto se le llama el problema del doble gasto, y es el problema del dinero digital. No es un problema de cifrado ni de contraseñas: aunque el fichero esté firmado y sea imposible de falsificar, nada impide gastarlo dos veces.

La solución de toda la vida: alguien que apunta

La forma clásica de resolverlo es dejar de mover “monedas” y pasar a llevar un libro de cuentas. Eso es exactamente tu banco:

Cuenta Saldo
Ana 10
Luis 0
Marta 0

Cuando Ana paga 10 a Luis, no viaja ninguna moneda. El banco resta 10 en una línea y suma 10 en otra. Si Ana intenta pagar después 10 a Marta, el banco mira el libro, ve que su saldo es 0 y dice que no. El doble gasto es imposible porque solo hay un libro y solo una mano escribe en él.

Funciona tan bien que casi todo el dinero del mundo es esto: números en el libro de alguien. Pero tiene un precio, y es que todo depende de ese alguien:

  • Tienes que fiarte de que apunta bien, de que no se inventa saldo y de que no quiebra.
  • Necesitas su permiso. Puede congelarte la cuenta, rechazar un pago o no dejarte abrir una.
  • Es un punto único de fallo. Si su sistema se cae o lo atacan, el dinero de todos se para.
  • Lo ve todo. Quien lleva el libro conoce cada pago de cada cliente.

Los primeros intentos serios de dinero digital, como el DigiCash de David Chaum en los años 90, resolvieron la parte criptográfica con brillantez, pero seguían necesitando una empresa en el centro que llevara la cuenta. Cuando la empresa cerró, el dinero desapareció con ella.

La pregunta difícil: ¿y si el libro lo llevamos entre todos?

La idea suena sencilla: que no haya un libro, sino miles de copias idénticas, una en cada ordenador que quiera participar (los llamaremos nodos). Cada pago se anuncia a todos, todos lo apuntan, y cualquiera puede comprobar que las cuentas cuadran. Nadie manda, nadie puede censurar, y si se caen la mitad de los nodos la otra mitad sigue.

El problema aparece en cuanto alguien hace trampa. Pruébalo tú: Ana tiene una sola moneda y dos nodos que aplican la regla más razonable del mundo, «una moneda solo se gasta una vez, y si veo dos pagos con la misma, me quedo con el primero».

Ana

Tiene una sola moneda de 10. Puede firmar todos los pagos que quiera con ella.

Nodo de Madrid

Oye primero los pagos a Luis

    Nodo de Tokio

    Oye primero los pagos a Marta

      Fíjate en lo que ha pasado cuando Ana ha enviado los dos pagos a la vez. Ningún nodo ha hecho nada mal. Los dos han aplicado la misma regla y los dos han rechazado un doble gasto. Pero como los mensajes tardan en cruzar el mundo, cada uno vio primero un pago distinto, y ahora hay dos versiones del libro: en una cobra Luis y en la otra Marta. Si Luis y Marta entregan la mercancía fiándose cada uno de su nodo, Ana se ha llevado dos cosas pagando una.

      Por qué no basta con votar

      La salida obvia es que los nodos voten: “la versión buena es la que diga la mayoría”. En una red cerrada, donde sabes quién es cada participante, funciona. En una red abierta a cualquiera, no: crear identidades es gratis. Un atacante puede arrancar un millón de nodos falsos en una tarde y ganar todas las votaciones. Se conoce como ataque Sybil, y tumba cualquier sistema de “un participante, un voto” en el que participar no cueste nada.

      Hace falta un voto que no se pueda falsificar creando identidades; que esté ligado a algo escaso en el mundo real.

      La solución de Bitcoin, en tres ingredientes

      El 31 de octubre de 2008, alguien con el seudónimo Satoshi Nakamoto publicó un documento de nueve páginas con la respuesta. Ninguna de sus piezas era nueva; lo nuevo fue cómo encajan:

      1. Firmas digitales: solo el dueño puede gastar. Cada moneda pertenece a una clave, y un pago es un mensaje firmado con ella. Cualquiera puede verificar la firma; nadie más puede producirla. Esto resuelve quién puede mover cada moneda, pero no el doble gasto: Ana puede firmar perfectamente dos pagos con la misma moneda. (Capítulo 3.)

      2. Una cadena de bloques: la historia no se puede reescribir. Los pagos se agrupan en bloques, y cada bloque incluye la huella digital del anterior. Tocar un pago antiguo rompe todos los bloques posteriores, así que el libro solo puede crecer por el final. (Capítulos 2 y 5.)

      3. Prueba de trabajo: un voto por unidad de cálculo. Para añadir un bloque hay que resolver un acertijo que cuesta electricidad de verdad. No se vota con identidades, que son gratis, sino con trabajo, que no lo es. El primero que lo resuelve propone el siguiente bloque, y ese bloque fija el orden de los pagos para todo el mundo. Es lo que has hecho al pulsar “Mina un bloque” en la simulación. (Capítulo 6.)

      Y una regla para cuando haya dos versiones de la historia: vale la que acumula más trabajo. Para imponer una versión falsa, un atacante tendría que trabajar más rápido que todos los demás juntos. (Capítulo 9.)

      El resultado es un libro de cuentas que nadie controla, que cualquiera puede verificar entero, y en el que hacer trampa cuesta más de lo que se gana.

      El primer bloque de Bitcoin, minado el 3 de enero de 2009, lleva incrustado un titular del periódico de ese día: «The Times 03/Jan/2009 Chancellor on brink of second bailout for banks» (“el ministro, a punto de un segundo rescate a los bancos”). Sirve de prueba de que el bloque no se creó antes de esa fecha, y de paso deja claro de qué iba el asunto.

      Cómo se ve en xavicoin

      xavicoin implementa estos mismos ingredientes. El doble gasto se para en dos sitios, que corresponden a los dos momentos de la simulación.

      Al validar cualquier pago, cada entrada debe apuntar a una moneda que exista y siga sin gastar. Si no, se rechaza. Esta comprobación es la regla “una moneda solo se gasta una vez”:

      // internal/chain/validate.go
      for i, in := range tx.Inputs {
      	utxo, err := view.GetUTXO(in.PrevOut)
      	if err != nil {
      		return 0, err
      	}
      	if utxo == nil {
      		return 0, &MissingInputError{OutPoint: in.PrevOut}
      	}
      	// … después se comprueban la firma y los importes

      Mientras los pagos esperan a entrar en un bloque, cada nodo aplica “me quedo con el primero que vi”, igual que Madrid y Tokio. Y el comentario del código dice exactamente quién decide al final:

      // internal/mempool/mempool.go
      // Ante dos transacciones que gastan lo mismo nos quedamos con la primera
      // que vimos. Cuál de las dos acabe siendo "la buena" lo decidirá el
      // minero que la meta en un bloque: para eso existe la prueba de trabajo.
      for _, in := range tx.Inputs {
      	if _, ok := p.spent[in.PrevOut]; ok {
      		return nil, ErrConflict
      	}
      }

      Lo que viene

      Casi todo lo anterior descansa sobre una única herramienta: una función que convierte cualquier dato en una huella digital corta e infalsificable. Con ella se encadenan los bloques, se identifican los pagos, se construyen las direcciones y se plantea el acertijo del minado. Antes de seguir, hay que entenderla bien.