Estos días os hemos contado que varios servicios de transacciones monetarias con Bitcoin han tenido que restringir la retirada de dinero, como ha sido el caso de MtGox y el de Bitstamp. Y en ambos casos hemos aludido a un problema técnico que concernía a la implementación de muchas carteras de Bitcoin.
¿Qué está pasando exactamente? Como resumen, existen incoherencias en la implementación de muchas carteras de Bitcoin que, en conjunto, producen lo que llamamos "maleabilidad de transacciones". Pero vamos a verlo con más detalle.
Maleabilidad de transacciones: un problema de base
El problema que obligó a MtGox a suspender la retirada de dinero ha sido producido por esta cierta vulnerabilidad. Por recordar, las transacciones entre carteras y servicios están formadas por una entrada y una salida. Es decir, el identificador del emisor y del receptor del dinero. Aunque puede haber varias entradas y varias salidas.
- La entrada está formada por una referencia a la salida de una transacción anterior, un número de índice y un trozo de script, que contiene la clave pública del emisor y una firma digital generada a partir de una versión simplificada de la transacción.
- La salida contiene las instrucciones mediante las cuales enviar las divisas. Básicamente contiene la cantidad que se envía, y la segunda mitad de un script, que se combina con la primera para verificar la transacción. Si el script de la salida ejecutado con los valores de la entrada devuelve true, la transacción se autoriza.
Cada transacción devuelve un hash, que se utiliza para rastrear la inserción de la transacción en un bloque que forma parte de una cadena, estando cada bloque identificado con un número, un timestamp y el ID del bloque anterior. Estos bloques son emitidos a todos los nodos de minería y verificados, para comprobar que todo es válido. Si es el caso, ese bloque pasa a ser el final de su propia cadena.
El problema que comento permite que un atacante altere el hash de una transacción sin alterar su firma, de modo que es similar a la original, pero inválida. Daos cuenta: la firma no cubre toda la información de la transacción.
Si esta transacción inválida se procesa en un nodo que hace mining de Bitcoins antes que la válida (por ejemplo, siendo emitida en el mismo equipo físico o en la misma red local), será la que quede almacenada en los distintos servicios y nodos. Hasta entonces su hash puede ser alterado indefinidamente.
Además, los servicios de cartera y de procesamiento de transacciones suelen almacenar un registro con los hashes de aquellas que ha ejecutado cada usuario. La cuestión es que el hash se ha modificado con respecto al de la transacción originalmente emitida. Por ello, cuando busquemos el estado de una determinada transacción y ésta ha sido alterada, no la podremos ver confirmada, aunque realmente sí que se ha realizado.
¿Qué solución se propone?
Este problema ha sido pasado por alto en muchas implementaciones de servicios con Bitcoin, y la solución que propone MtGox es realmente simple: utilizar un segundo hash para cada transacción únicamente a efectos de registro de los servicios de cartera y transacciones.
De ese modo se reconocerán las transacciones alternativas, es decir, aquellas que fueran alteradas. MtGox volverá a habilitar la retirada de dinero cuando se estandarice esta solución en la industria. Mientras tanto, avisan:
Mientras tanto, servicios de cambio y cartera (y cualquier servicio que envíe dinero a terceros) debería "andarse con ojo" con todos aquellos que digan que su transacción no se ejecutó.
Más información | MtGox | Bitcoin.it En Genbeta | Bitcoin: qué es, cómo funciona y por qué su futuro nos puede beneficiar a todos
Ver todos los comentarios en https://www.genbeta.com
VER 5 Comentarios