Bitcoin, a pesar de ser la primogénita dentro del mundo de las cripto y de su larga trayectoria, tiene varias debilidades que no se pueden ocultar, y que quizá han sido las culpables de que no siga avanzando a un paso acelerado con respecto a otros nuevos tokens, que han logrado desarrollar de mejor manera aspectos fundamentales para los usuarios como la privacidad y la escalabilidad. Justo de eso se trata esta clase, un par de mejoras que pueden abrir a Bitcoin un camino de luz para seguir creciendo más aun de lo que lo ha logrado hacer hasta el día de hoy. Veamos de que se trata:
Bienvenidos a mi tarea
Recordemos que Bitcoin no es más que una red de dinero programable, por ende, puede hacer las cosas maravillosas que hace gracias a algo llamado Scripts que es lo que le da esta naturaleza programable a Bitcoin.
Los Scripts son una herramienta súper poderosa que permite a través del lenguaje de programación definir un conjunto de instrucciones programadas a través de OP_CODES que determinan como puede cada usuario de Bitcoin tener acceso a sus Bitcoins dentro de la red y hacer uso de ellos.
P2PKH
El P2PKH es el predecesor o la evolución del P2PK que fue el primer formato de Script creado por Bitcoin, sus siglas significan Pay to public Key Hash se trata de un Script estándar y de hecho es el más utilizado al día de hoy para realizar transacciones en Bitcoin, este tipo de Script se reconocen por emitir transacciones que empiezan con el número 1. Constan de dos partes:
El SriptPubKey que es donde están descritas todas las acciones a realizarse dentro de la transacción mediante varios OP_CODES.
El ScrpitSig que se encarga de verificar la autenticidad de las transacciones mediante la clave pública y la firma.
Básicamente este tipo de Script se centra en resguardar los BTC al momento de gastarse mediante la verificación de la clave pública y la clave privada por parte del usuario, es decir, este debe demostrar que dichas claves realmente le pertenecen para poder realizar una transacción de una billetera Bitcoin a otra. Sin embargo, la clave pública no es enviada en forma completa para resguardar aún más la seguridad cuidando que esta no pueda ser hackeada de una u otra manera por lo que a esta clave pública le es aplicado un hash160 para poder ser compartido.
Satoshi Nakamoto creo este nuevo formato Script con la intención de hacer las transacciones más fáciles para los usuarios acortando el número de caracteres de sus claves publicas gracias a proceso de hashsing que les es aplicado.
Por otro lado, este proceso además de cuidar la privacidad y aumentar la seguridad de las transacciones de Bitcoin creando una capa de seguridad adicional al proteger la clave pública de los usuarios de ataques de computadoras cuánticas que pueden llegar a la clave privada mediante la clave pública, también ayuda a disminuir la cantidad de datos almacenados en la red por lo que la hace aún más escalable al disminuir la extensión de la clave pública mediante el hash obtenido que debe tener un peso estándar de 20 bytes.
Este script fue implementado desde los comienzos de Bitcoin en el año 2009, por lo que se encuentra en la mayoría de los bloques minados de Bitcoin y actualmente se encuentra de forma predeterminada en las wallets de los clientes de esta blockchain.
Veamos un ejemplo para entender cómo funciona este formato de script P2PKH
Si Ana quiere transferir 10 BTC a Luis, entonces previamente Luis debe proceder a crear sus claves publica y clave privada y compartirlas con Ana, pero la clave pública (osea la dirección de Luis) no es compartida en su totalidad, es comprimida mediante un proceso de hashing y este hash es lo que Luis comparte con Ana.
Una vez las claves están listas comienza el proceso de la transacción generando un sub-script especial que es el llamado ScriptSig que es el encargado de verificar que Ana realmente es la dueña de los Bitcoin que se van a transferir a Luis, tomando la clave pública de la transferencia mediante la cual Ana recibió esos BTC en el pasado y verificando su clave privada para ver si coinciden, de esta manera Ana es autorizada para gastar sus BTC.
Ahora llega el momento de entrar en acción el ScriptPubKey en la segunda parte del proceso que es donde son liberados los tokens a la clave pública que ha sido entregada a Ana, es decir la dirección de Luis. Al unir ambas partes del proceso, es decir ambas sub-script ScriptSig y ScriptPubKey la transacción con formato script P2PKH se habrá realizado con éxito.
P2SH
Este formato de Script Pay-to-ScriptHash llego tiempo después del P2PKH con la finalidad de corregir errores existentes y conseguir un mejor funcionamiento de la red, de hecho, no solo es implementado por Bitcoin, también es bastante popular entre otras criptomonedas pues es bastante útil ya que ayuda a generar transacciones con programaciones poco convencionales que pueden ser personalizadas y son usadas especialmente para efectuar transacciones a direcciones multifirmas.
Al emitir o configurar transacciones con este tipo de dirección, el receptor debe cumplir una serie de pasos o condiciones establecidas dentro del hash script para poder liberar su dinero y hacer uso de él, sin embargo, en la mayoría de los casos el usuario desconoce dichas condiciones, así como también existe el requisito de que un número determinado de las partes (firmantes) estén de acuerdo y al tanto de la transferencia para que esta se realice.
Este formato de Script se incluyó inicialmente en la propuesta para mejorar Bitcoin número 13 BIP13 con la premisa de poder realizar transacciones complejas, pero de forma sencilla para los usuarios simplemente compartiendo un código QR o copiando y pegando una serie de números que son el hash del script o la dirección a donde son depositados los Bitcoin y unos meses después fue nuevamente presentado en el BIP16.
Veamos un ejemplo para entender cómo funciona este formato de script P2SH
Este formato script también consta de dos subscript al igual que los P2PKH pero funcionan de forma distinta, veamos:
El ScriptSig contiene el script de origen de la transacción que es el que otorga el poder de desbloqueo gracias al redeem scrip, además es aquí donde se establece si la transacción es entre una cartera multi firma o no, en caso de que lo sea dicta cuantas personas deben firmar para validar la transacción y registra cuantas claves públicas o direcciones están involucradas en la operación. Además, se encuentra contenido dentro de este sub-script el OP-CODE necesario para validar las firmas que es el OP_CHECKMULTISIG.
Entonces, si tres personas desean realizar una operación multifirma (Ana, Luis y Pedro) se debe establecer previamente cuántos de ellos necesitan firmar para validar el código y cumplir las condiciones para que la transacción sea ejecutada. Una vez el script haya sido verificado los usuarios poseen el script de desbloqueo de los activos para finalizar la operación.
En la segunda parte tiene efecto el siguiente sub-script ScriptPubKey donde hay contenidos dos OP-CODES, el OP_HASH160 con el que los usuarios prueban que tienen en sus manos el script de origen redeem script aplicando un hash SHA-256 y luego, un RIPEMD-160 y el OP_EQUAL con el cual el resultado anterior es comprobado y si ambos resultados son iguales el dinero es liberado con éxito.
Diferencias entre P2SH y P2PKH
La principal diferencia que podemos encontrar entre ambos tipos de Script es que uno admite transacciones multisig mientras que otro no se emplea para realizar transacciones básicas, por lo que podríamos decir que el script P2PKH es un poco menos básico pues no admite este tipo de transacciones mientras que el P2SH si las admite.
Al tratarse de distintos Script y por ende distinta naturaleza de cada transacción, estas son identificadas de formas distintas: para los Scripts P2SH se usa la numeración inicial 3 y para los P2PKH la numeración inicial 1.
Las direcciones P2PKH tienen tarifas más costosas que las P2SH debido a su mayor tamaño, pero también cuentan con la ventaja de que las transferencias suelen realizarse con mayor rapidez.
El P2SH brinda mayor facilidad a los usuarios sin sacrificar la seguridad, pues los procesos para realizar este tipo de transacciones son realmente sencillos a diferencia de los necesarios con P2PKH que requieren que los usuarios tengan conocimientos sobre programación a nivel criptográfico.
El P2SH es totalmente compatible con el formato de transacciones SegWit de Bitcoin, mientras que P2PKH no lo es. Sin embargo, si se pueden realizar transacción entre P2PKH y SegWit pero estas tarifas suelen ser mucho más elevadas por la falta de compatibilidad.
Los scripts enlazados dentro de las P2PKH cargan con mayor rapidez que los que contiene la P2SH pues estos suelen necesitar mayor tiempo de carga.
Una cartera multifirma 3 de 5 quiere decir que están involucradas 5 personas en la transacción y 3 de ellas deben firmar para que esta sea ejecutada, entonces para hacer el envío de los 10 BTC a la empresa MTC las 5 claves estarán involucradas y 3 de estas personas (cualesquiera) deben firma la transacción. Como vimos en la pregunta anterior para completarse este proceso multifirma se emplea un formato de script P2SH que tiene dos fases de dos sub-script. Veamos:
Use el ScriptSig y el ScriptPubKey para explicar los pasos que se siguen
ScriptSig en esta primera etapa es donde se ejecuta el OP_CODE (OP_CHECKMULTISIG), que confirma que las firmas generadas realmente pertenecen a tres de las personas involucradas en la transacción y así son liberados los fondos gracias a los scripts y se puede continuar con la segunda etapa de la transacción, si las firmas no correspondes con los usuarios la operación de inmediatamente es cancelada.
ScriptPubKey en este punto el dinero aún no está disponible para la empresa MTC ya que antes se debe verificar que se cumplen 2 códigos operacionales más mediante este sub-script, que se encargan de verificar que tanto OP_EQUAL (que contiene el ScriptSig) como OP_HASH160 (que contiene el hash SHA-256) sean iguales para poder liberar los 10 BTC en su totalidad y estos ya estén disponibles para el gasto de la empresa receptora.
Explique ¿Qué sucede si la transacción se realiza usando las firmas Schnorr?
Podemos ver como el formato Script funciona de manera correcta, pero en algunos casos este proceso suele ser algo lento, para solventar este problema y lograr aumentar la escalabilidad y también la privacidad de los usuarios se han implementado en Bitcoin las firmas Schnorr. Si la transacción se hubiera ejecutado utilizando estas firmas las direcciones de los 5 usuarios involucrados en la multisig se condensan en un solo código creando una Clave única de transacción mediante la cual se ejecuta la operación multisig.
Esta opción es altamente efectiva pues la transacción se ejecuta con mayor rapidez al reducir el número de operaciones que deben ejecutarse para completar la transacción aumentando la escalabilidad de la red, también protege la privacidad de los usuarios pues ninguna de sus direcciones estará involucrada directamente en la operación y por último la seguridad es altamente eficiente ya que es técnicamente imposible hackear alguna de las cuentas al no estar involucradas sus claves en la operación.
A pesar de que Bitcoin funciona bastante bien desde sus inicios para tratarse de la criptomoneda pionera en este mundo criptográfico, ha sido duramente criticada debido a los sacrificios que ha hecho en cuanto a privacidad para hacer lo posible en calificar en cuanto a escalabilidad y seguridad, es por esto que Taproot es tan importante para Bitcoin, ya que gracias a él se ha tomado en cuenta este gran problema y tratado de resolverlo, pues esta situación disgusta a muchos usuarios de gran poder e impide en algunos casos la unión de grandes inversores nuevos en la red.
Es incómodo para las personas que sus billeteras puedan ser rastreadas poniendo en evidencia todas sus operaciones, por lo que la implementación de esta nueva tecnología busca no poner en evidencia información o datos de más de los usuarios dentro de los scripts que maneja la red de Bitcoin al momento de realizar sus transacciones. Además, asegura que al momento de realizar múltiples transacciones éstas condensen los datos en una sola transacción, de tal manera que la información de las transacciones realizadas dentro de esta operación no sea revelada en su totalidad, hecho que además de mejorar la privacidad también ayuda en la escalabilidad de la red ya que los datos almacenados en ella disminuyen considerablemente.
Por otro lado, las firmas Schnorr que trabajan en conjunto con la tecnología Taproot son de gran ayuda para la solución de estos problemas de privacidad, pues al condensar las claves de los distintos participantes de una multisig en una sola clave de transacción, sus claves no pueden ser relacionadas de ningún modo con esta operación ya que no hay ningún dato directo de ellos dentro de la misma, por lo que el anonimato de los usuarios por fin es en Bitcoin un problema que se puede resolver. Además de ayudar a la privacidad en gran medida, esta acción aumenta favorablemente la seguridad de los usuarios rechazando cualquier oportunidad de ser sus cuentas intervenidas por computadoras cuánticas por medio de sus claves públicas.
- Vamos a proceder a realizar esta pregunta dirigiéndonos al siguiente enlace donde nos encontraremos directamente en la sección: Claves publicas / privadas en el apartado firmas
- En la sección de “Mensaje” escribo mi mensaje que para esta práctica es Schnorr Signatures.
- Una vez escrito mi mensaje doy clic en “Firmar” para obtener la firma de mi mensaje.
- Luego me voy a la pestaña de verificar, para ver si mi mensaje y mi firma son válidos.
- Una vez doy clic en el botón “Verificar” podemos ver que el mensaje se ha verificado de manera correcta pues la ventana cambia de color a verde claro.
- Procedamos a borrar solamente la primera letra de mi mensaje y verificarlo nuevamente para ver qué sucede:
- Al dar clic nuevamente en el botón “Verificar” el fondo de la ventana se ha tornado en color rojo, por lo que podemos ver como si el mensaje cambia por muy pequeño que sea este cambio la transacción no será verificada pues la firma no coincide con el mensaje.
Es importante estar al tanto de las innovaciones realizadas dentro de las blockchain, especialmente de Bitcoin que es el padre de todas las criptomonedas y día a día desarrolladores estudian los errores cometidos para tratar de solucionarlos y llevar a la red cada vez más cerca de la perfección, esta vez tomando un punto tan importante como es la privacidad de los usuarios y la protección de sus datos, unido a eso mejorando igualmente la escalabilidad y la seguridad.
A pesar de que algunos conceptos dentro de estos temas son un poco densos y complejos de entender en su totalidad, con un buen estudio de ellos se pueden digerir en niveles apropiados a nuestros conocimientos y entender la dinámica aplicada dentro de la red.
Agradezco al profesor por sus clases semana a semana donde nos mantiene actualizados sobre temas poco conocidos pero sin duda muy importantes en nuestra formación dentro de la Academia de Criptomonedas.
Cc. @pelon53