precio_bitcoin_enero_febrero_2014

Esta es la diferencia de precio entre un bitcoin hace un mes y un bitcoin a día de hoy. La bajada de precio se ha producido debido principalmente a dos acontecimientos que han sucedido en el último mes relacionados con MtGox.

MtGox es (o más bien, era) el principal sitio de intercambio de Bitcoins por USD. Permitía a sus usuarios utilizarlo como monedero virtual y hacer el cambio de monedas al precio que marcara el mercado en ese momento.

Para entender lo que ha pasado, primero es necesario entender algunos aspectos sobre cómo funcionan los bitcoins. Permitidme explicarlo de la forma más breve y simplificada que se me ocurre.

Blocks, blockchain y transacciones

Todo el sistema de bitcoins se basa en una red de ordenadores distribuida, que comparten una especie de libro de contabilidad público.

En ese libro (que lo podéis imaginar como un archivo de texto) se registran todas y cada una de las transacciones de bitcoins que se han hecho. Si una transacciones no está en ese libro, entonces la transacciones no ha ocurrido. Así de simple.

Se puede dar el caso en el que yo inicie una transacción y esa transacción nunca llegue a escribirse en ese libro (por un error, por problemas de conexión, o por lo que sea). Si no está en ese libro, la transacción no se ha realizado y por lo tanto el destino de la transacción no recibirá nada, y el origen seguirá teniendo sus bitcoins.

A ese libro se le conoce como blockchain y está compuesto por una serie de bloques (blocks) que agrupan las transacciones que han ocurrido en un intervalo de aproximadamente 10 minutos. Cada vez que pasan unos 10 minutos un nuevo bloque se añade al blockchain, añadiendo a ese “libro de contabilidad” un montón de transacciones más.

Esto quiere decir que las transacciones se registran cada 10 minutos. Si realizas una transacción tienes que esperar un periodo de tiempo entre 0 y 10 minutos para que esa transacción se añada al blockchain, y por lo tanto sea considerada como realizada.

Las transacciones se basan en criptografía asimétrica (pares de claves públicas y privadas). Una transacción no es más que un mensaje (podemos imaginarlo como una cadena de texto) que el origen firma con su clave privada, y que contiene: el origen y el destino (que son las claves públicas de ambas partes), la cantidad a transferir y algunos campos extras de control.

Lo único que necesitamos es un identificador único para referirnos a cada una de las transacciones que están en la blockchain. La forma que utiliza el sistema para identificar una transacción es el hash de la propia transacción. Esto quiere decir que si cogemos la transacción A y modificamos un solo bit de esa transacción para crear una transacción B, el identificador de B será completamente distinto al identificador de A.

Cómo saber si una transacción se ha realizado

Supongamos que soy una empresa que doy bitcoins a cambio de dólares (¿alguien ha dicho MtGox?). Por lo tanto, necesitaré un sistema automático que me permita hacer una transacción de bitcoins desde mi dirección hasta la dirección de mi cliente cada vez que alguien me realice un pago.

¿Cómo compruebo que se ha realizado esa transacción? Muy fácil: al crear la transacción anoto su identificador. Dentro de 10 minutos (cuando se haya generado un nuevo bloque) compruebo si el identificador de mi transacción está en el blockchain. Si mi identificador está en el blockchain significa que la transacción se ha completado correctamente. Si no está en el blockchain, entonces mi transacción no se ha confirmado y por lo tanto no se ha realizado.

El problema es que esta no es una forma correcta de comprobar si una transacción se ha realizado, pero sin embargo es la forma que se ha estado utilizando y que ha hecho que MtGox pierda una fortuna.

La maleabilidad de los bitcoins

Hay una propiedad de las transacciones llamada “maleabilidad” que se conoce desde hace muchísimo tiempo y que MtGox no ha tenido en cuenta. Os voy a dejar unos enlaces al final del artículo que explican esto mejor de lo que podría hacerlo yo (y de una forma más técnica por si alguien está interesado en entrar en los detalles del protocolo), pero dejadme explicarlo brevemente:

Es posible copiar una transacción de forma que mantenga el **mismo significado **(es decir, conserve el origen, el destino y la cantidad de bitcoins de la transacción) pero tenga diferente identificador. Esto se hace modificando esos campos extras de las transacciones que comentaba más arriba. Al modificar un solo bit de los campos extras el identificador cambia completamente, aunque la transacción realice a efectos prácticos exactamente la misma acción.

Aprovechar la maleabilidad para obtener beneficios

Teniendo esto en cuenta, el ataque sería algo como lo siguiente:

  1. Conectarme a la red de bitcoins como un nodo más (algo que cualquiera puede hacer), de forma que puedo escuchar todas las transacciones que se emiten. Recordemos que toda esta información es completamente pública.
  2. Comenzar el proceso de cambio de USD por Bitcoins en cualquier entidad de cambio de monedas.
  3. Escuchar todas las transacciones que se están ejecutando en ese momento, y esperar a que la entidad distribuya la transacción de bitcoins por la red. Cuando lo haga, nosotros recibiremos una copia de esa transacción.
  4. Coger esa transacción y modificar sus campos extras, de forma que la transacción sea completamente válida pero el identificador completamente distinto y distribuirla de nuevo.
  5. Conseguir que el bloque que se añada a la blockchain contenga la transacción modificada en lugar de la original. Por lo tanto, la transacción se habrá realizado correctamente pero su identificador será distinto al que la entidad espera.
  6. Comunicar que no hemos recibido los Bitcoins. La entidad comprobará si es cierto buscando el identificador de la transacción original en la blockchain, y verá que no aparece, por lo que probablemente repita la transacción.
  7. Repetir

El bug no está en los bitcoins. Tampoco en las transacciones. El bug está en el paso 6: en cómo la entidad comprueba si una transacción se ha llevado a cabo o no.

Según MtGox, han perdido unos 744,400 bitcoins (o unos 340 millones de dólares al cambio) debido a este bug en sus sistema. Es algo que ha pasado poco a poco a lo largo de los años, y no un ataque dirigido y ejecutado en un solo momento.

Implicaciones

Hace veinte días, MtGox eliminaba la posibilidad de retirar dinero de sus sistemas. Poco después lanzó un comunicado anunciado que hasta que no se llegara a un acuerdo para un algoritmo de transacciones sin maleabilidad, mantendría bloqueadas las transacciones (y por lo tanto grandes cantidades de dinero de muchas personas).

En estos últimos días hemos podido ver como MtGox ha acabado por parar absolutamente todas las transacciones, tal y como podemos ver ahora mismo en el comunicado de su página web.

No pinta nada bien. Probablemente MtGox acabe cerrando para siempre (si es que no lo ha hecho ya) y los usuarios del servicio que aún tenían bitcoins ahí los hayan perdido sin remedio.

Obviamente, todos estos hechos han afectado de manera aplastante al precio del bitcoin. Todavía es más comprensible si tenemos en cuenta que MtGox era el principal sitio de intercambio de Bitcoins/USD.

El resto de compañias de cambio de monedas y ewallets han firmado un comunicado donde afirman que el desastre ocurrido en Mt.Gox es producto de una mala gestión por su parte, y no de un defecto en el protocolo o en la moneda en sí (http://blog.coinbase.com/post/77766809700/joint-statement-regarding-mtgox)

No está muy claro lo que va a pasar de ahora en adelante, lo que sí está claro es que este es un punto de inflexión para el Bitcoin y las empresas que operan con esta moneda.

Enlaces de interés