Transacciones de bitcoin
Las transacciones son las estructuras de información que codifican y permiten la transferencia de valor entre participantes en el sistema. Cada transacción que ocurre queda registrada en un bloque presente en la cadena de bloques, el libro de cuentas público que registra todos los movimientos de monedas en el sistema.
Una transacción de Bitcoin está compuesta por dos partes, la primera es la “salida de transacción” que identifica fragmentos indivisibles de bitcoin denominados en satoshis, estas salidas se encuentran registradas en la cadena de bloques y son reconocidos como validos por la totalidad de la red. Los nodos de Bitcoin rastrean cada una de las salidas que son gastables, conocidas como UTXO (unspent transaction outputs). Cada transacción representa un cambio en el conjunto de UTXO existentes, estos solo pueden ser gastados en su totalidad por una transacción.
La segunda parte la “entrada de transacción” utiliza UTXO previamente registrados y crea dos salidas nuevas: una va hacia el destinatario el cual queda en control del nuevo UTXO creado en la transacción y la otra es el vuelto, también en forma de un nuevo UTXO que queda en control del remitente. La excepción es la transacción coinbase e(moneda-base) que es la primera transacción en cada bloque la cual es el pago al minero como recompensa por minar el bloque, esta no consume UTXO existentes si no que es un nuevo output que queda en control del minero ganador que emite o mina este bitcoin nuevo.
Las entradas y salidas (inputs and outputs) las cuales juntas constituyen las transacciones de bitcoin describen en forma textual la forma en la que los bitcoin cambian de dueño utilizando lenguaje meramente criptográfico o lenguaje de scripting, que es en Bitcoin es conocido como Script. El espacio que utiliza este texto es el que determina el tamaño de la transacción (medida en bytes) y por lo tanto cuanto espacio del bloque será utilizado por la transacción en caso de ser validada; por ende el tamaño de la transacción también estará relacionado a la comisión que se le pagará al minero en forma de bitcoin.
Criptografía
Para crear las transacciones que permiten que los bitcoin lleguen de una dirección a otra Nakamoto utilizó herramientas criptográficas creadas originalmente para cifrar o codificar las comunicaciones y hacer los mensajes secretos, de manera que un tercero (o adversario) no pueda leer el contenido del mensaje.
En este ultimo capítulo dedicado a explorar los engranajes internos del Bitcoin vamos a profundizar en la estructura de las transacciones que llegan al mempool y son luego incluidas en los bloques. Para esto nos vamos a acercarnos un poco a los conceptos en los que navegan los criptopunks.
Criptografía Simétrica
Imagina que hace cien años una chico de una playa local se enamora de una niña que visitaba la zona durante una vacaciones pero por cuestiones culturales a los padres de la niña no les agrada esta amistad. Antes de volver a su casa esta niña que era muy inventiva o sabia de criptografía le da al niño su dirección de correo y una hoja con un código secreto para que puedan comunicarse sin que sus mensajes puedan ser descifrados. El código es algo así como, la letra A será la V, la letra B será la J, la letra C la M y así con todo el abecedario. La niña le explica al chico que ambos tendrán una copia del código y de esta forma podrán escribirse de manera que en caso de que una de sus cartas caiga en manos de sus padres estos no podrían leer el mensaje.
Este tipo de encriptado llamado simétrico que puede tener algunas variaciones usa un código o una contraseña alfanumérica conocida simplemente como “llave” para encriptar el mensaje, y se caracteriza por que la misma llave que se usa encriptar también se usa para descifrar el mensaje.
Sin embargo este sistema de cifrado tiene un punto débil que es la llave en sí; ya que esta llave tiene que llegar de alguna manera al destinatario y en caso de que esta sea interceptada las comunicaciones entre ambos el remitente y el destinatario serian descifradas. Por lo que sistemas más seguros han sido desarrollados.
Criptografía Asimétrica
Este tipo de criptografía también conocida como “Encriptación de Llave Pública” no es cosa de niños si no de computadoras; desarrollado en la década de 1970 ya en la era de la información, es un método esencial para las comunicaciones seguras en linea y es fundamental en el sistema de transacciones del Bitcoin.
Funciona mediante dos llaves que están relacionadas matemáticamente entre sí utilizando una función matemática de una sola dirección por lo que podemos saber fácilmente la llave pública teniendo la llave privada, pero es computacionalmente imposible (o exageradamente difícil si queremos ser precisos) obtener la llave privada a partir de la llave pública.
Funciona de la siguiente manera:
Llave Pública: Es la clave que se puede compartir abiertamente con cualquier persona. No es secreta y se utiliza para cifrar mensajes o verificar una firma digital.
Clave Privada: Es confidencial y debe ser mantenida en secreto por el usuario. Se utiliza para descifrar mensajes que fueron cifrados usando la clave pública correspondiente o para firmar digitalmente un mensaje.
Cifrado: Si Margarita quiere enviar un mensaje secreto a Pablo, utiliza la llave pública de Pablo para cifrar el mensaje. La llave pública de Pablo puede ser distribuida abiertamente, por ejemplo, puede estar publicada en su sitio web, no importa si un adversario la obtiene, no la puede usar para descifrar el mensaje.
Descifrado: Una vez que Pablo recibe el mensaje cifrado, utiliza su llave privada para descifrarlo. Solo la llave privada de Pablo, que solo él posee, puede descifrar el mensaje cifrado con su llave pública. Por lo tanto, mientras la llave privada se mantenga segura las comunicaciones estarán seguras.
Firma Digital y Verificación
Margarita puede utilizar su llave privada para firmar digitalmente el mensaje, lo que implica generar un hash del mensaje y luego cifrar ese hash con su llave privada. Luego Pablo puede verificar la firma utilizando la llave pública de Margarita. Pablo descifra la firma con la clave pública de Margarita para obtener el hash y luego compara este hash con el hash que él mismo genera del mensaje original. Si ambos hashes son idénticos, la firma es válida y el mensaje no ha sido alterado en tránsito, confirmando así tanto la integridad del mensaje como la identidad del remitente.
La Criptografía de Clave Pública que fue desarrollada para transmitir mensajes es utilizada en Bitcoin para transmitir valor en forma de bitcoin. Delineando las ventajas de este tipo de criptografía es fácil entender las razones por las cuales funciona tan bien para transmitir dinero electrónico:
Seguridad en la Comunicación: Permite que las personas intercambien información de manera segura sin necesidad de haberse encontrado para intercambiar claves secretas.
Autenticación y No Repudio: Las firmas digitales proporcionan autenticación (prueba de quién envió el mensaje) y no repudio (el remitente no puede negar la autoría del mensaje).
Integridad: asegura que el mensaje no fue alterado
Interoperabilidad: Fácil de implementar en sistemas abiertos y distribuidos, como Internet.
Direcciones de Bitcoin
Ahora veamos como estas herramientas son usadas en el sistema del Bitcoin, primero vamos a delinear tres elementos que se derivan matemáticamente uno del otro:
La “llave privada” en Bitcoin se utiliza para firmar las transacciones, esta llave es un número de 256 bits creado aleatoriamente y debe ser mantenida en secreto ya que es la que permite la firma de transacciones y por lo tanto el movimiento del bitcoin. Quien tenga esta llave es el dueño del bitcoin.
La “llave pública” se deriva matemáticamente desde la llave privada utilizando Criptografía de Curva Elíptica, específicamente la norma estándar secp256k1 especificada por el grupo de estándares de criptografía SECG. Para obtener la llave pública K, la llave privada k se multiplica por un punto en la por un número base en una Curva Elíptica G, por lo que matemáticamente K = kG. Si entrar en mas detalles ya que este tipo de geometría no euclidiana es todo un universo en el cual no vamos a profundizar aquí, esta formula matemática de una sola dirección (similar a lo que hace un un hash) relaciona matemáticamente las dos llaves pero evita que la llave privada pueda ser derivada de la llave pública, osea, dado K y G es computacionalmente “imposible” obtener k.
El tercer elemento es la “Dirección de Bitcoin” y esta es el identificador que compartimos enviar y recibir bitcoin. Para crear este elemento se aplican dos transformaciones criptográficas a la llave pública, primero hash SHA-256 y luego hash RIPEMD-160. Este segundo hash agrega una capa adicional de protección contra posibles vulnerabilidades futuras o ataques conocidos a una única función hash; además reduce la longitud de la dirección a 160 bits, lo cual es muy útil ya que hace que el número sea mas manejable a la hora de utilizarlo en prácticas cotidianas de transacciones como copiar y pegar, mostrar en interfaces de usuarios para verificación visual o la generación de códigos QR.
La Dirección de Bitcoin funciona como un casillero de correo, a la hora de por ejemplo enviar una carta a un casillero postal el remitente conoce la dirección de envío y puede depositar la carta, pero solo el dueño del casillero, el destinatario tiene la llave para abrir el casillero. De la misma manera a la hora de generar una transacción de Bitcoin el envío se hace hacia la Dirección de Bitcoin pero una vez verificada la transacción, los UTXO solo pueden ser utilizados por el dueño de la Llave Privada de la cual se derivó el la Dirección de Bitcoin.
La llave pública por otro lado es es generada a la hora de crear la transacción pero en ningún momento ni el remitente ni el destinatario ocupan conocer o copiar esta llave. En la práctica para crear transacción de Bitcoin el remitente solo requiere conocer la Dirección de Bitcoin hacia la cual serán enviado el bitcoin.
Entrada de Transacción
Cuando se realiza una transacción el remitente utiliza su llave privada para firmar digitalmente la entrada de transacción y de esta manera demuestra que tiene el derecho de utilizar los satochis de salidas anteriores los cuales se encuentran en forma de UTXO en la cadena de bloques. La verificación de una firma significa que “Solo el propietario de la llave privada que generó la llave pública pudo haber producido la firma de esta transacción”.
Las entradas de transacción conocidas como “Vin” identifican cual o cuales UTXO van a ser consumidos y proveen prueba de propiedad a través de un unlocking-scrip, el guion o texto que libera el bitcoin bloqueado en la salida anterior. El contenido de una entrada puede variar dependiendo de las condiciones de la transacción. Pero en cualquier entrada de transacción (Vin) encontraremos tres elementos básicos:
Identificador de la transacción: que se refiere al la transacción que utiliza el UTXO
Vout anterior: el cual identifica el o los UTXO de la transacción anterior y que se serán utilizados en la transacción.
ScripSig: conformado por una firma digital y una llave publica que demuestran la propiedad del bitcoin por parte del firmante.
Salida de Transacción
La salida de transacción (Vout) especifica el destinatario del bitcoin y las condiciones para gastar los nuevos UTXO. Cada transacción tiene uno o mas Vouts, estas contienen dos elementos:
Valor: La cantidad de bitcoin denominada en satoshis que se está transfiriendo.
ScriptPubKey: Este script es un acertijo o problema criptográfico que determina la condiciones requeridas para gastar los UTXO que serán creados como resultado de la transacción. Este incluye la dirección del destinatario (en forma de un hash de llave pública) en la cuál estarán los bitcoin una vez que la transacción sea verificada.
Cualquier Vin que quiera gastar este Vout en el futuro, deberá proporcionar un ScripSig que satisfaga las condiciones establecidas en el acertijo criptográfico conocido como “locking scrip” , witness script o ScriptPubKey.
Comisiones en las transacciones
La estructura de datos de una transacción no utiliza un espacio para las comisiones, si no que esta se encuentra implícita en la diferencia entre la suma de las entradas y las salidas.
Comisión = sum(entradas) – sum(salidas)
Cualquier sobrante de los UTXO que se gastan debe ser incluida en la transacción como vuelto para el emisor, de lo contrario será dada al minero como parte de la comisión. El resto que se le da al minero en forma de comisión, si no se agrega una dirección para el vuelto este se convierte en comisión.
Last updated