BitCoin para geeks

¿Qué es BitCoin?


BitCoin es la primera moneda electrónica distribuida. Está basada en el uso de funciones criptográficas y corre sobre una red P2P.

El hecho de ser una moneda quiere decir que cumple con dos propiedades básicas:

  • Solo la persona que posee una BitCoin puede gastarla.
  • Una BitCoin no puede ser gastada más de una vez por la misma persona.

Adicionalmente tiene otras características muy interesantes:

  • No existe una autoridad central que emita nuevas monedas, que pueda controlar su precio o que autorice y rechace las transacciones.
  • Las transacciones solo identifican al origen y al destino a través de llaves públicas por lo que son realmente anónimas.
  • Todas las transacciones son persistidas en la red P2P. La red “sabe” en todo momento cuánto posee cada quien por lo que se vuelven innecesarios los bancos bajo este esquema.

Al ser anónimo es muy difícil que los gobiernos puedan imponer impuestos o algún tipo de control sobre las transacciones. Muchos especulan que es posible que los gobiernos lleguen incluso a prohibirlo. También se discute mucho acerca de si el sistema caerá o no en una espiral de deflación. Lo cierto es que BitCoin es algo realmente novedoso que vale la pena entender.

Para usar BitCoin lo único que se debe hacer es bajar el software del sitio y hacerle saber a alguien tu dirección BitCoin para que te envíe BitCoins a cambio de algún bien o servicio (mi dirección es 1GyirCyVgdfokjoKRTMRn9Ti27dSUquFiJ, por si alguien me quiere enviar algo).

¿Cuál es el estado actual de BitCoin?

BitCoin se encuentra en una etapa de prueba aunque ya es usada por muchas personas para hacer transacciones reales. Cualquiera puede comprar y vender BitCoins. El valor de una BitCoin, al momento de escribir este post, es de $0.72 USD. Existen, también en este momento, casi 6 millones de BitCoins en circulación lo que equivale a más de 4 millones de dólares y al día se intercambian alrededor de 100 mil de estas.

Más información al respecto del estado actual del mercado en bitcoinwatch.com.

También existen ya muchos sitios que aceptan BitCoins (Pueden ver que entre estos se encuentran algunos que venden drogas ilegales).

¿Cómo funciona BitCoin?

Pues bien, si eres un geek seguramente no estás satisfecho con la información anterior y necesitas saber cómo funciona BitCoin y cómo es posible que cumpla las propiedades mencionadas al principio. Crear un protocolo que cumpla con dichas características no parece ser trivial y, sin embargo, no hace uso de conceptos o tecnologías desconocidos para la mayoría de los geeks. El único requisito para entender el sistema es estar familiarizado con los conceptos de llave pública y privada, firma digital y hash criptográfico. Por otro lado, es importante entender el funcionamiento de BitCoin ya que, siendo su propiedad fundamental la descentralización, carecería de sentido si todos los usuarios confiaran ciegamente en una autoridad central (BitCoin.org).

Transacciones

Una moneda BitCoin es un concepto abstracto. Realmente no existe una representación binaria de ellas. El concepto central en el sistema es la transacción. Una transacción es una operación registrada en la red P2P que transfiere monedas BitCoin a otra persona y que está formada de entradas, que hacen referencia a transacciones anteriores, y salidas, que indican una cantidad y a quién está dirigida la misma.

La forma en que estas transacciones son autorizadas y mantenidas por la red es la parte novedosa de este sistema pero esto es algo que explicaré más adelante. Primero entendamos cómo está formada una transacción:

  • Entradas: Cada entrada hace referencia a una salida de otra transacción y “demuestra” que quien realiza la transacción actual puede hacer uso de dicha salida. Por esta razón se incluye la llave pública de quien realiza dicha transacción y una firma de la transacción actual hecha con la llave privada. Cabe notar que una entrada debe hacer uso del total de monedas en la salida a la que se hace referencia.
  • Salidas: Son derivadas de las entradas. La suma de las salidas es igual a la suma de las entradas. Es posible hacer una salida en donde uno mismo sea el receptor. Esto es útil si, por ejemplo, la entrada de la transacción hace referencia a una salida de 100 BTC pero se desea pagar 99 BTC a alguien: en este caso lo que se debe hacer es crear una salida por 99 BTC para dicha persona y otra de 1 BTC para uno mismo.

La persona 1 envia 100 BTC a la persona 2 (transacción A) y la persona 2 genera 50 BTC (transacción B). La persona 2 envia 101 BTC a la persona 3 y 49 BTC a si mismo (transacción C). En el estado actual solo es posible usar la salida de la transacción D y la salida por 49 de la transacción C (las demás ya fueron usadas por alguna entrada).

La salida también define las reglas que se deben cumplir para que alguien pueda hacer uso de ella en otra transacción. La forma de especificar estas reglas es muy flexible. Es posible, por ejemplo, crear salidas que puedan ser usadas por cualquier persona, sin embargo, lo más común es que las reglas indiquen que la salida puede ser usada solo por la persona que posea una dirección BitCoin dada. Una dirección BitCoin es únicamente un hash de una llave pública. Para que dicho script pueda comprobar, en una nueva transacción, que uno posee la dirección BitCoin que aparece en la transacción a la que se hace referencia (y así poder substraer fondos de ella) lo único que se debe hacer es incluir, en la entrada de la nueva transacción, la llave pública completa y una firma de la transacción, hecha con la llave privada (con esto se comprueba que el autor de la nueva transacción es el poseedor de la llave pública que corresponde a la dirección BitCoin).

Más detalles de cómo se especifican estas reglas en https://en.bitcoin.it/wiki/Transactions.

Notemos que lo anterior lo único que garantiza es que la persona que hace uso de una transacción anterior realmente es su destinario. Hasta el momento no tenemos una forma de verificar que dicho destinatario no use más de una vez los fondos de esta transacción. Esta verificación la hace “la red” a partir de todas las transacciones anteriores conocidas.

El problema real es cómo la red logra un consenso de cuáles son las transacciones válidas y qué mecanismo podemos usar nosotros para confiar en que una transacción determinada es realmente parte de este consenso.

Consenso

Existen algunos nodos en la red verificando las transacciones recibidas y creando bloques de transacciones verificadas; Estos bloques son ligados en secuencia y eventualmente son almacenados en una base de datos distribuida en la red P2P. Todos los nodos pueden generar estos bloques, sin embargo, para que los bloques sean reconocidos por la red, los nodos deben antes resolver un problema criptográfico que requiere de mucho tiempo de procesamiento. Todos los nodos verificadores compiten entre si para resolver este problema primero puesto que la red le otorga una transacción por 50 BTC al nodo que resuelva primero dicho problema (a esta práctica se le llama minería y es análoga, por ejemplo, a la minería de oro para crear monedas de oro). Esto hace que se emplee un tiempo enorme de procesamiento en generar estos bloques, volviendo así un problema muy difícil el falsificarlos.

Es completamente posible que el problema criptográfico sea resuelto simultáneamente por varios nodos. En estos casos, todos los bloques generados son aceptados por la red pero cada nodo verificador intentará generar el siguiente bloque ligándolo al bloque que haya recibido primero. De esta forma es posible tener ramificaciones en la lista de bloques, sin embargo, la red trabajará siempre sobre la cadena más larga de bloques. Si un nodo deshonesto, quiere imponer una cadena de bloques generados por él, deberá ganarle a toda la red creando una cadena más larga pero, para ello, necesitará más poder de procesamiento que todos los nodos honestos juntos.

La secuencia más larga de bloques se muestra en negro.

Cuando un nodo se une a la red lo primero que hace es descargar la cadena de bloques. El nodo tiene la capacidad de verificar que todos estos bloques hayan resuelto el problema criptográfico y así podrá confiar en que ha recibido el árbol real de bloques. De hecho podrá estimar el tiempo de procesamiento que ha sido necesario para generar estos bloques con lo que podrá decidir qué tan difícil es que haya recibido un árbol de bloques falso. Finalmente, de entre estos bloques, reconocerá como válidos a los que se encuentren en la secuencia más larga.

El problema criptográfico

Para que un bloque de transacciones verificadas sea aceptado por la red, el hash SHA-256 de este bloque debe ser un número menor a un objetivo conocido por los nodos de la red (Al momento de escribir este post el objetivo es 000000000000F339000000000000000000000000000000000000000000000000).

El crear un hash menor al objetivo es totalmente un problema de azar. El hash de una serie de bits es un número fijo, sin embargo, cambiando únicamente un bit, se produce un hash completamente distinto. En general no tenemos ningún control sobre el hash resultante. Por esta razón para obtener un hash menor al objetivo lo único que podemos hacer es variar una sección del bloque al azar hasta encontrar un hash que cumpla esto. Mientras menor es el objetivo más tiempo de procesamiento nos tomará encontrar un hash válido. Es posible, sin embargo, predecir el tiempo de procesamiento promedio necesario usando teoría de la probabilidad.

Análisis de un Ataque

Debido al uso de criptografía de llave pública y privada, podemos tener confianza de que el sistema cumple con la propiedad de que solo la persona que posee una BitCoin puede gastarla (recordemos que cada transacción hace referencia a la llave pública del destinatario). La propiedad que la cadena de bloques intenta hacer cumplir es el que una persona no pueda gastar más de una vez la misma moneda.

Veamos qué ocurre si un nodo deshonesto intenta hacer esto: Específicamente lo que este nodo intentaría sería realizar un pago y, una vez que el destinatario se haya convencido de que esta transacción ha sido reconocida por la red y haya hecho entrega del bien o servicio en cuestión, intentar generar una cadena de bloques alternativa en donde o simplemente no aparezca esta transacción o en donde se asigne a si mismo el dinero de la misma.

Notemos que para que el destinatario se convenza de la validez de la transacción, debe esperar a que se genere al menos un bloque válido que incluya a la misma. Para cuando esto ocurre el nodo deshonesto ya ha comenzado a generar la cadena alternativa de bloques que intentará hacer que sea reconocida por la red en lugar de la original. Resulta obvio que para lograr una cadena más larga de bloques dicho nodo necesita de más poder de procesamiento que todos los nodos honestos juntos.

Supongamos que existe un nodo deshonesto que tiene acceso a una súper computadora con más poder de procesamiento que la red entera (esto es algo que vale la pena calcular si es posible). Lo que el nodo que recibe el pago debe hacer en este caso para protegerse es simplemente esperar a que se generen cierto número de bloques antes de que reconocer a la transacción como válida y llevar a cabo la entrega de los bienes o servicios en cuestión. Recordemos que es fácil estimar el tiempo de procesamiento empleado en generar un bloque, esto nos hace posible estimar el número de bloques que debemos esperar para que se supere cierto tiempo de procesamiento.

Por otro lado, sabemos que los nodos verificadores ganan dinero resolviendo el problema criptográfico. Esto quiere decir que un nodo con mucha capacidad de procesamiento estará incentivado a usar dicha capacidad en generar dinero honestamente y esto, a su vez, hará que sea más difícil hacer trampa en el sistema. Esto nos dice también que el procesamiento usado en la generación de bloques tiene un valor conocido. Si decidimos protegernos contra ataques de este tipo, podemos establecer la política de esperar a que la cantidad de bloques generados implique una cantidad de procesamiento cuyo valor sea al menos equivalente a la cantidad que estamos recibiendo.

Otra razón por la que es difícil un ataque de este tipo es que las transacciones válidas quedan registradas permanentemente en la red. Por lo tanto es muy fácil demostrar que un supuesto pago no fué reconocido por la red y que, por tanto, nunca se efectuó realmente. Esto es algo que pudiera usarse en una demanda legal por el incumplimiento de un pago de cantidad significativa (Si la cantidad no es significativa al nodo deshonesto le conviene usar su capacidad de procesamiento en minería).

Conclusión

Existen muchos detalles en la implementación y funcionamiento de BitCoin que no he mencionado. Sin embargo, el objetivo de este post es demostrar que en efecto es posible crear un sistema con las propiedades necesarias para crear una nueva moneda electrónica usando los principios aquí mencionados. Espero que mi explicación haya ayudado en este sentido. Para el que quiera conocer más a fondo la implementación de BitCoin, existen algunos artículos arbitrados publicados que detallan el sistema; el wiki de BitCoin ofrece una buena referencia de los conceptos principales.

La importancia de BitCoin radica en ser la primera moneda completamente descentralizada. Más aún, las transacciones son anónimas y persistentes lo que da lugar a que uno pueda acumular dinero sin necesidad de un banco: únicamente es necesario poseer la llave privada asociada a la dirección BitCoin para poder hacer uso de los fondos recibidos en transacciones. Esto plantea un escenario completamente nuevo y nos lleva a especular acerca de las consecuencias que este sistema podría traer en la economía. Por otro lado si el mercado de BitCoin sigue creciendo, es muy probable que los gobiernos intenten regularlo o incluso prohibirlo, por lo tanto el futuro de BitCoin aún es incierto y sujeto a toda clase de especulaciones interesantes.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s