Funcionamiento técnico de Bitcoin

De Wikipedia, la enciclopedia libre

Bitcoin es un protocolo, proyecto de código abierto y red peer-to-peer que se utiliza como criptomoneda, sistema de pago[1]​ y mercancía.[2][nota 1]

El sistema bitcoin usa la criptografía para controlar la creación y gestión descentralizada de fichas bitcoin, las cuales son consideradas activos digitales que sirven como medio de intercambio y almacén de valor.[3]

Software[editar]

Programas cliente[editar]

Captura de pantalla de Electrum.

Aunque existen monedas[4]​ y billetes fabricados por particulares y empresas, normalmente para poder comerciar con bitcoines se utilizan programas cliente,[nota 2]​ que pueden ser aplicaciones nativas o aplicaciones web.

Aplicaciones nativas[editar]

Las aplicaciones nativas[5][6]​ se instalan o se ejecutan directamente en ordenadores o en dispositivos móviles.[nota 3]​ También pueden ejecutarse automáticamente cuando el usuario clica en un navegador web sobre un enlace que cumple con el formato del URI scheme de bitcoin según la especificación registrada en IANA.[7]

Bitcoin Core es el único programa que implementa totalmente el protocolo, protegiendo la red, y se considera la referencia en la que se apoyan el resto de clientes existentes. Bitcoin Core necesita descargar completamente la cadena de bloques y almacenarla localmente, que a diciembre de 2018 ocupa aproximadamente 200 GB,[8]​ lo que puede llegar a tardar varios días. Su uso solo se recomienda para usuarios avanzados que deseen aportar a la estabilidad de la red.

Aplicaciones web[editar]

Las aplicaciones web solo necesitan de un navegador, y por tanto están accesibles desde todas las plataformas, ya sean de escritorio (Windows, Linux, Mac OS X) o móviles (Android, iPhone, BlackBerry, tabletas, etc).

Algunas aplicaciones web proporcionan seguridad adicional en el acceso a los bitcoines mediante la utilización de autenticación de dos factores con mensajes SMS, correo electrónico, dispositivos específicos y Google Authenticator.[9]

Comercio electrónico[editar]

Existen complementos para la mayor parte de las plataformas de comercio electrónico, como WordPress, Drupal, Zen Cart, PrestaShop, Magento y otras.[10]

A partir de una única semilla, algunos comerciantes generan carteras deterministas cuyas direcciones Bitcoin se pueden asignar a un pagador diferente para simplificar su seguimiento. Se utiliza el término cartera determinista para indicar que todas las direcciones de esa cartera están completamente determinadas por la semilla. Es decir, es suficiente con proteger la semilla para generar consistentemente la misma secuencia de direcciones Bitcoin de las que se tiene el control. Las direcciones generadas por una única semilla son virtualmente ilimitadas.[11]

Programación[editar]

Bitcoin Core proporciona una API en JSON-RPC para acceder a la red Bitcoin.[12]​ Es habitual que los desarrolladores prefieran programar en modo regtest, que permite desarrollar en una cadena de bloques privada con control total del entorno, creación de transacciones con confirmaciones instantáneas y sin necesidad de gastar bitcoines reales.[13]​ o la red testnet (más cerca de la principal en cuanto a la experiencia), es una cadena de bloques publica idéntica al bitcoin pero con su propio tipo de direcciones, su propio registro de contabilidad y su propio ajuste de dificultad sencillo para los desarrolladores. En Testnet las direcciones no empiezan por “1” o “3” como en Bitcoin, sino por “m” o “2“. Ejemplos:

mvN7z3C3GNwTkeEY2tvAQzragtDoiQZ5CF / 2NEPMeQcRF7j3uZvQYqsEQxxdCqEnNgDyXd

BitcoinJ es una biblioteca popular para el lenguaje Java.[14][15][16]​ Se conecta directamente a la red Bitcoin, no necesita de entidades de confianza y descarga una versión reducida de la cadena de bloques. Forma parte del código de Multibit[17]​ y del Bitcoin Wallet para Android y Blackberry OS.[18]​ También se puede acceder a BitcoinJ en Ruby a través de JRuby.

Pycoin es una biblioteca popular para Python.[19][20]​ A su vez, BitcoinJS es una biblioteca popular para Javascript.[21]​ Bitcore proporciona una API para acceder a la red Bitcoin a través de Javascript y Node.js.[22][23]

Protocolo[editar]

El protocolo Bitcoin se apoya sobre la pila de protocolos TCP/IP aprovechando los servicios de TCP a través del puerto 8333.[24]​ A partir de este protocolo se construye una red de nodos superpuesta a Internet. Los nodos de la red forman una red de pares donde todos los nodos pueden igualmente proveer y consumir servicios mientras colaboran vía un servicio de consenso.[25]

Direcciones[editar]

Todo participante de la red Bitcoin tiene una cartera electrónica que contiene un número arbitrario de claves criptográficas. A partir de la clave pública, se obtiene la dirección Bitcoin, que funciona como la entidad remitente y receptora para todos los pagos. Su clave privada correspondiente autoriza el pago solo para ese usuario. Las direcciones no tienen ninguna información sobre su dueño, son generalmente anónimas y no requieren de ningún contacto con los nodos de la red para su generación.[26]​ Un participante de la red Bitcoin puede tener varias direcciones de Bitcoin.[27]

Las direcciones son secuencias alfanuméricas aleatorias de 33 caracteres de longitud, en formato legible para personas, como puede verse en este ejemplo: 1LtU9rMsQ41rCqsJAvMtw89TA5XT2dW7f9. Utilizan una codificación en Base58, que resulta de eliminar los siguientes seis caracteres del sistema Base64: 0 (cero), I (i mayúscula), O (o mayúscula), l (L minúscula), + (más) y / (barra). De esta forma, se componen únicamente de caracteres alfanuméricos que se distinguen entre sí en cualquier tipo de letra. Las direcciones Bitcoin también incluyen una suma de verificación de 32 bits[nota 4]​ para detectar cambios accidentales en la secuencia de caracteres.[28]

Transacciones[editar]

Los bitcoines contienen la dirección pública de su dueño. Cuando un usuario A transfiere algo a un usuario B, A entrega la propiedad agregando la clave pública de B y firmando con su clave privada.[29]A entonces incluye esos bitcoines en una transacción, y la difunde a los nodos de la red P2P a los que está conectado. Estos nodos validan las firmas criptográficas y el valor de la transacción antes de aceptarla y retransmitirla. Este procedimiento propaga la transacción de manera indefinida hasta alcanzar a todos los nodos de la red P2P. Finalmente la transacción es validada por un nodo minero y es incluida en un bloque de transacciones que es agregado a la cadena de bloques. Una vez que se encuentra en la cadena de bloques y ha sido confirmada por un número suficiente de bloques subsecuentes, la transacción es una parte permanente de la cadena de bloques y es aceptada por todos los participantes.[30]

En la validación de una transacción se verifica la existencia de fondos suficientes. Para ello se tendría que recorrer toda la cadena de bloques hasta encontrar el que contiene la transacción origen. Después se tendría que recorrer todos los bloques posteriores para asegurar que esa transacción no se ha utilizado anteriormente. Todo este proceso requeriría recursos computacionales importantes. Para optimizarlos, los nodos crean una tabla de salidas de transacción no gastadas (UTXO, del inglés unspent transaction output) que funciona como una caché. Una UTXO solo puede ser gastada por un dueño específico (el que posee la clave privada), está almacenada en la cadena de bloques y es reconocida por toda la red. Los nodos de la red llevan un seguimiento de las UTXO. Para ello realizan un barrido de la cadena de bloques verificando las transacciones y se anotan en esta caché las transacciones de salida que no se han gastado. Para cada transacción se borran de la caché las transacciones de entrada y se añaden las de salida dejando la caché como una lista actualizada de todas las transacciones de salida utilizables. Con esta lista ya no es necesario recorrer nuevamente la cadena de bloques, basta con verificar si la transacción de salida que se quiere usar está en la caché .[31][30]

El concepto de balance total de un usuario no existe, solo existe un conjunto de UTXO distribuidas a lo largo de la cadena de bloques las cuales pueden ser transferidas por el usuario que posea la clave privada. Los programas de cartera calculan el balance al recorrer la cadena de bloques y agregar cada UTXO que le pertenezca al usuario.[30]

Una UTXO puede tener un valor arbitrario y este valor es indivisible. Si una UTXO es mayor que el valor que se desea transferir, esta se debe consumir en su totalidad y el cambio correspondiente, otra UTXO, se debe generar en la transacción. Las UTXO gastadas en la transacción son llamadas entradas y las generadas por la misma transacción son llamadas salidas. La excepción a la cadena de salidas y entradas es un tipo especial de transacción llamada de acuñado o de coinbase, la cual es la primera transacción de cada bloque. Esta es colocada por el minero ganador y crea una nueva moneda que se entrega como recompensa por el minado.[30]

Véase también[editar]

Referencias[editar]

  1. Jerry Brito y Andrea Castillo (2013). «Bitcoin: A Primer for Policymakers». Mercatus Center. Universidad George Mason. Archivado desde el original el 21 de septiembre de 2013. Consultado el 4 de enero de 2018. 
  2. «CFTC Statement on Self-Certification of Bitcoin Products by CME, CFE and Cantor Exchange». Commodity Futures Trading Commission. 1 de diciembre de 2017. Consultado el 4 de enero de 2018. 
  3. Jerry Brito; Andrea Castillo (2013). «Bitcoin: A Primer for Policymakers». Mercatus Center. George Mason University. Archivado desde el original el 21 de septiembre de 2013. Consultado el 22 de octubre de 2013. 
  4. Mike Caldwell. «Monedas de Casascius». Consultado el 11 de octubre de 2012. 
  5. «Software cliente para Bitcoin». bitcoin.org. Consultado el 11 de octubre de 2012. 
  6. «Clientes Bitcoin de código abierto para PC». Archivado desde el original el 11 de octubre de 2012. Consultado el 11 de octubre de 2012. 
  7. IANA, ed. (23 de septiembre de 2012). «Scheme name de Bitcoin en IANA». Consultado el 23 de julio de 2013. 
  8. «Copia archivada». Archivado desde el original el 16 de junio de 2018. Consultado el 15 de noviembre de 2019. 
  9. blockchain.info (ed.). «Características de My Wallet». Archivado desde el original el 6 de septiembre de 2015. Consultado el 11 de octubre de 2012. 
  10. Bitpay.com (ed.). «Bitpay. Bitcoin shopping cart plugins». Consultado el 5 de febrero de 2013. 
  11. electrum.org (ed.). «Electrum. Seed.». Archivado desde el original el 14 de septiembre de 2013. Consultado el 11 de julio de 2013. 
  12. blockchain.info (ed.). «JSON RPC API. Bitcoind compatible RPC api». Consultado el 11 de julio de 2013. 
  13. bitcoin.org (ed.). «Bitcoin Developer Examples. Regtest Mode». Consultado el 24 de febrero de 2016. 
  14. Mike Hearn y otros. «Tutorial de BitcoinJ». Google Project Hosting. Consultado el 6 de julio de 2013. 
  15. Mike Hearn y otros. «Javadoc de la versión 0.9 de BitcoinJ». Archivado desde el original el 3 de diciembre de 2013. Consultado el 6 de julio de 2013. 
  16. Dirk Merkel (10 de enero de 2012). JavaWorld, ed. «Bitcoin for beginners: The BitcoinJ API». Archivado desde el original el 3 de diciembre de 2013. Consultado el 11 de julio de 2013. 
  17. «GitHub de Multibit». GitHub. Consultado el 11 de julio de 2013. «Proyecto público de carácter colaborativo para desarrollo del código de Multibit». 
  18. «Proyecto Bitcoin Wallet para Android y Blackberry OS». Consultado el 11 de julio de 2013. «Proyecto público de carácter colaborativo para desarrollo del código de Bitcoin Wallet». 
  19. «Pycoin en Github». Consultado el 24 de febrero de 2016. 
  20. «Bitcoin Trading». Consultado el 17 de septiembre de 2022. 
  21. «BitcoinJS». Consultado el 24 de febrero de 2016. 
  22. «Bitcore». Consultado el 28 de junio de 2014. 
  23. «Código fuente de la librería bitcore». Consultado el 28 de junio de 2014. 
  24. Blockchain’s AOL Moment. Karl Kreder. 28 de julio de 2017
  25. The Architecture of Blockchain..(4/5). Vamsi Chemitiganti. 28 de enero de 2016
  26. Nathan Willis (10 de noviembre de 2010). LWN.net, ed. «Bitcoin: Virtual money created by CPU cycles». Consultado el 11 de julio de 2013. 
  27. Volabit. «¿Qué es una dirección de Bitcoin?». 
  28. «Código fuente de base58.h de Bitcoin». GitHub. Consultado el 11 de julio de 2013. 
  29. «Cómo funciona Bitcoin». Bitcoin.org. Consultado el 23 de julio de 2013. 
  30. a b c d Aspectos de seguridad de Bitcoin y su aplicación en una alternativa de infraestructura de llave pública. Tesis de Abraham Jesús Basurto Becerra. Centro de Investigación y de Estudios Avanzados del Instituto Politécnico Nacional. Mexico D.F. Diciembre de 2015
  31. Estudio de la utilización de protocolos blockchain en sistemas de votación electrónica. Antonio Marín Bermúdez. Proyecto final de carrera. Universitat Politècnica de Catalunya. 2016

Notas[editar]

  1. La Commodity Futures Trading Commission afirma que Bitcoin es una «commodity». El término commodity puede traducirse en español como mercancía básica, producto básico o materia prima.
  2. En software, la denominación «cliente» se debe a que actúa, precisamente, como un cliente que solicita servicios a otras aplicaciones llamadas servidores, que atienden a sus órdenes. Los programas que se ejecutan en cada uno de los nodos interconectados que forman la red Bitcoin actúan como servidores, tramitando, validando y almacenando las transacciones que inician los programas clientes. El software Bitcoin Core es un caso particular, ya que se comporta simultáneamente como cliente y servidor.
  3. Microsoft Word y Microsoft Excel son ejemplos de aplicaciones nativas para Windows. En el caso de los móviles Android, las aplicaciones nativas se suelen descargar desde Google Play. En los iPhone, las aplicaciones nativas se obtienen del App Store.
  4. El propósito de la suma de verificación en una dirección Bitcoin es similar al código de control de las cuentas bancarias y DNI. Como este código de control para las direcciones Bitcoin es de 32 bits, haría falta más de cuatro mil millones de intentos de media (exactamente 232) para accidentalmente teclear una dirección válida distinta de la deseada