Un saludo compañeros de la CryptoAcademy, es un placer poder participar esta semana en la case del profesor @pelon53. Esta semana pudimos aprender sobre las nuevas actualizaciones que se están implementando en Bitcoin para poder mejor su escalabilidad y su privacidad.
Como sabemos, Bitcoin es el padre de las criptomonedas, a pesar de eso, con el pasar del tiempo ha presentado problemas en su red, como se destaca, la poca escalabilidad y la falta de privacidad, es por ello, que se han estado buscando soluciones que puedan mejorar la red. Por tal motivo hemos estudiado a Taproot y las firmas Schnorr, quienes se presentan como una solución a estos problemas. Sin más que decir los dejo con mi tarea:
1.- Explique en detalle el P2SH y el P2PKH, muestre las diferencias entre ambas direcciones.
P2SH (Pay-to-ScriptHash):
El P2SH es un formato script, el cual ha sido implementado en Bitcoin desde el año 2012, su objetivo y función es poder permitir la creación de direcciones o transacciones que estén programadas y que para ser ejecutadas se deban cumplir ciertos pasos ya establecidos. En pocas palabras el P2SH crea direcciones con las cuales se pueden enviar y recibir transacciones, sin embargo para poder desbloquear los BTC se necesita cumplir ciertos pasos, de lo contrario no se podrán liberar.
El P2SH, permite el bloqueo de Bitcoins en un tipo de Hash Script, luego cuando son liberados obtenemos el script original, este funcionamiento es el que permite que se creen nuevos tipos de script para el canje de BTC, estos script pueden ser personalizados.
La implementación de los P2SH permite la realización de transacciones con direcciones que sean multifirmas (MultiSig), además con el P2SH las transacciones se envían por un hash Srcipt y no es necesario él envió de transacciones mediante claves públicas.
Cómo funciona el P2SH:
Una transacción P2SH, se realiza gracias al ScriptPubKey, ya que almacena un Hash para el desbloqueo de los BTC, entonces, primero nuestro Script de origen, con el cual se desbloquean los BTC, se encuentra dentro del ScriptSig de nuestra transacción.
Nuestro ScriptSig es de una dirección MuSig (multifirma tipo 2-3), debido a esto se necesita un OP_CODE (Código operacional), El OP_CODE para las transacciones con P2SH es OP_CHECKMULTISIG. Con nuestro OP_CODE se podrán verificar que tanto las firmas como las llaves coincidan para proceder al desbloqueo de los BTC.
Utilizar este Script, permite que al realizar una transacción multifirma de 3 participantes, 2 de ellos sean verificados y de esta forma saber que tienen la autorización de realizar la transacción, si son verificados por el Script, quiere decir que tendrán en su poder el Script de origen para realizar la liberación de los BTC.
Para poder completar la liberación de los BTC, el ScritPubKey nos pedirá mediante los OP_CODE una serie de condiciones para el desbloqueo de los activos, entre ellas destaca el Script de origen, quiere decir que el Script redeem (origen) se comprobara en el ScriptSig, para poder realizar esta comprobación, se necesita aplicar un Hash SHA-256 en el Script, de esta forma obtenemos un OP_HASH160 y un RIPEMD-160, el resultado obtenido de ambos, se comprueba mediante el uso de un OP-EQUAL dentro del ScriptPubKey, si ambos coinciden, quiere decir que la liberación de los BTC se realizó con éxito.
Implementación del P2SH en las direcciones:
- BIP-0013:
Se implementó por primera vez en el BIP 13, siendo un nuevo formato de direcciones, que permite transacciones complejas de forma arbitraria, además implemento un tamaño estándar de 20 Bytes en el formato de las direcciones.
- BIP-0016:
Luego de ser implementado en el BIT 13, se implementó en el BIT 16, considerándose una bifurcación en la red Bitcoin,
además que se integraron nuevos tipos de transacciones estándar, esto se realizó con la intención de minimizar la cantidad de script usados en las transacciones.
P2PKH (Pay-to-Public-Key-Hash):
Los P2PKH es una versión mejorada del Script P2PK, ya que cuando se creó Bitcoin los Script P2PK se presentaban vulnerables a los posibles ataques por medio de computadoras cuánticas. Es por ello que se crearon los P2PKH que se presentan como una versión mejorada y más segura, por lo tanto han sido muy importantes en la gran parte de las transacciones que se realizan en la red Bitcoin.
Estas direcciones son las más comunes y usadas que encontramos dentro de la red Bitcoin y nos permiten realizar nuestras transacciones de forma segura.
Los script P2PKH necesitan que los usuarios demuestren que son los propietarios de las claves públicas que permiten que reciban BTC y de las claves privadas que permiten que puedan gastar los BTC. Esta función es muy parecida a la de los script P2PK, sin embargo el uso de los script P2PKH, no necesita que la clave pública del usuario sea revelada en su totalidad al ScriptSig, esto lo hace mucho más seguro y menos vulnerable a los ataques.
Los Script P2PKH, se componen por los ScriptSig y el ScriptPubKey, además se utilizan para las transacciones de una dirección a otra y no admite transacciones multifirmas.
Este formato de script mejoro la escalabilidad de Bitcoin, ya que se proporcionan Hash de 20 bytes y no la clave publica en su totalidad, algo que permite el poco uso de almacenamiento y permite que las claves públicas sean más privadas.
Cómo funcionan los P2PKH:
Todo comienza cuando el emisor y el receptor se preparan para la transacción, lo primero que ocurre, es que el receptor deberá crear una clave pública y privada, además que tendrá que codificar su clave pública en un hash, este hash es nuestra dirección de Bitcoin (Billetera), una vez que se tenga el hash, se envía al emisor y este podrá realiza la transacción.
La transacción comienza con la creación de un sub-Script que trabajara en conjunto con el P2PKH, ese sub-script es el ScriptSig, quien va a verificar que existan los BTC a gastar en la dirección del emisor, esta verificación se logra revisando la clave pública donde el emisor ha recibido los BTC antes, y si posee la clave privada para poder realizar el gasto.
Una vez se ha realizado la verificación, se continúa con la operación, ahora se genera otro sub-script llamado scriptPubKey, con este script se realiza la liberación de los BTC enviados al Hash que ha recibido el emisor, de esta forma se realiza la transacción con un script P2PKH.
Implementación de los P2PKH:
Los P2PKH se implementaron desde el inicio de Bitcoin en todas las billeteras y transacciones, este formato se encuentra en la mayoría de bloques minados de la red, además que se creó con la finalidad de ser un sistema seguro y que permitiera compartir a los usuarios sus claves públicas para realizar sus transacciones de forma fácil y rápida.
El creador de BItcoin, quiso que se implementara este formato, porque permitía condensar lo extenso de una clave pública, en un código hash alfanumérico tal forma que pudieran ser utilizable de manera más fácil, esto permitió que los usuarios pudieran compartir sus calves publicas mucho más sencillo y sobre todo de manera más segura.
Otro punto de implementación, es la seguridad que brinda a la red, ya que la vuelve mucho más segura a los ataques que se realicen por medio de computadoras cuánticas, debido a que su estructura es más resistente, y no deja que sea revelada la clave privada de los usuarios.
Diferencias entre P2SH y P2PKH:
Es momento de hablar de las diferencias que podemos encontrar en ambas direcciones:
- Multifirmas:
Quizás es uno de los aspectos que más los diferencia, debido a que los P2PKH, no pueden ser compatibles y no soportan las transacciones multifirmas, su uso es para transacciones de una dirección a otra, mientras que los P2SH, si permiten las transacciones multifirmas o multiSig.
- Direcciones:
Otra diferencia a resaltar es que los caracteres de direcciones son totalmente diferentes, en las direcciones P2PKH comienzan con el número 1, mientras que en las P2SH, comienzan con el número 3.
- Transacciones:
En las transacciones, podemos observar que los formatos P2SH, pueden realizar tanto transacciones multiSig, como transacciones normales, mientras que las P2PKH, solo se realizan la transacción de una dirección a otra que sea de una sola firma.
- SegWit:
Las direcciones P2SH permiten la compatibilidad con las direcciones que contenga el formato de SegWit, un formato que permite la mejora en la seguridad de las transacciones, reduciendo la maleabilidad, pero las direcciones que utilizan los formatos P2PKH, a pesar de ser implementadas andes del formato SegWit, no son compatibles, por lo tanto realizar transacciones, entre ambas carteras con distintos formatos, son muy costosas.
- Seguridad y privacidad:
Ambos formatos son muy seguros, los P2PKH, son muy seguros a los ataques cuenticos, y los P2SH también son seguros a estos ataques cuánticos, sin embargo, su seguridad se hace mayor porque los P2SH en su script de bloqueo solo muestra un Hash de ese script, por lo tanto no se puede saber qué tipo de script se usó para la transacción, evitando saber si la transacción se hizo de una dirección multifirma o de una dirección normal, por lo que hay mayor seguridad y privacidad.
- Tarifas:
Las tarifas realizadas de direcciones con formatos P2PKH, tiende a ser más caras por su tamaño y por la baja compatibilidad, mientras que las transacciones que realizamos con el formato de dirección P2SH, son más económicas por su alta compatibilidad.
- Envío de BTC:
Las P2PKH, utilizan un sistema de envió de BTC más complicado, incluso se debe tener conocimiento de programación de critomonedas, mientas que el envió de BTC por formatos P2SH, son más sencillos y menos complejos.
- Rapidez de las transacciones:
Las P2PKH, suelen ser direcciones que permiten un envió más rápido de BTC en sus transacciones, mientras que las P2SH, tardan más para el envió.
2.- Se requiere transferir 10 BTC que pertenecen a una cartera multifirma 3 de 5, a la empresa MTC, por la compra de unos equipos.
Tenemos presente que vamos a transferir 10 BTC desde una dirección multifirma de 5 integrantes, donde cada uno de ellos tiene su calve privada y solo necesitaremos la participación de 3 de ellos para autorizar la transacción a la empresa MTC.
Para realizar una transacción desde una dirección multifirma debemos saber que necesitamos dos tipos de script (ScriptSig, ScriptPubKey) que serán los responsables de hacer que nuestra transacción sea exitosa, desbloqueando y permitiendo el envió de nuestros 10 BTC, veamos a continuación:
Nuestro ScriptSig, va a realizar la verificación de las firmas de los 3 participantes que quieren enviar los BTC, donde este verificará las 3 firmas y deben coincidir con las claves privadas, esta verificación se realiza mediante un código de operaciones OP_CHECKMULTISIG, este código verifica que las 3 firmas coincidan con las claves privadas para proceder a la liberación de los BTC, una vez verificadas las firmas, se continua con el siguiente Script.
Ya se han verificado las firmas, ahora para proceder completamente con el desbloqueo de los 10 BTC, el ScriptPubKey hará la liberación una vez que el hash SHA-256 que se ha generado mediante el OP_HASH160 pertenece al ScriptSig, luego el OP_HASH160, serán comparado con el OP-EQUAL, de tal manera que deban coincidir para completar la liberación de los 10 BTC y serán transferidos a la empresa MTC con total éxito.
Veamos a continuación el proceso:
Si queremos enviar 10 BTC a la empresa MTC, cuando utilizamos la tecnología de las Firmas Schnorr desde nuestra dirección multifirma, cada uno de los 5 participantes utilizara su clave pública, en forma de una firma publica, estas firmas se van a unir en una sola firma que permitirá realizar la transacción. Con esta unción las claves públicas de cada participante no tendrán que ser expuestas, lo que convierte el proceso en una transacción más privada y escalable, ya que no se tiene que realizar el proceso de verificación de cada clave pública y el tamaño de la transacción disminuye.
Veamos a continuación cómo funcionan las firmas Schnorr:
3.- ¿Por qué cree usted que Taproot y las firmas Schnorr ayudarán a la privacidad de la red Bitcoin? Explique.
Bien, sabemos que estas nuevas tecnologías buscan mejorar los problemas que tiene la red Bitcoin desde que fue creada, problemas que a muchos usuarios molesta, como sabemos estos problemas son la escalabilidad y la privacidad.
Las firmas Schnorr, se implementan en Bitcoin para lograr condensar las firmas de los participantes de una dirección multifirma, en una sola firma con la que puedan realizar la transacción, al implementar esto, se crea mayor privacidad, porque ya las claves públicas de los participantes estarán condensadas en una sola, lo que evita que sean rastreadas su claves públicas, además, al usar una sola firma, las transacciones se vuelven más rápidas, se evitan todo el proceso de verificación de firmas y el tamaño de la transacción es menor, lo que mejora la escalabilidad.
Por otro lado al implementar Taproot, se mejora la privacidad utilizando los Scripts de Bitcoin, evitando que se muestre información de más en el contenido que hay dentro de los scripts completos, además que hace que las transacciones múltiples parezcan que solo se realizó una transacción única, lo que hace que las transacciones se vuelvan más privadas. Por otro lado también se mejora la escalabilidad de la red, porque se reducen los datos que se almacenan dentro de la red, lo que la hace más rápida.
4.- Usando la Demo de Blockchain, escriba exactamente el siguiente mensaje: Schnorr Signatures, genere la firma del mensaje y verifique el mensaje. Luego borre el primer caracter de la firma del mensaje y verifique nuevamente ¿Qué sucedió? Explique. Se requiere captures de pantalla.
Vamos a iniciar nuestro programa demo Blockchain Demo
Una vez hemos iniciado nuestro programa de demostración, vamos a agregar nuestro mensaje el cual será Schnorr Signatures, luego vamos a dar clip en firmar para obtener nuestra firma.
Firma:
304402203b9b1f901f256b59c243f77413d92ae030f82095c53bf181a89d727bc0740bf602200b875b00beda7e575fb8c168349d694d38bbdce6b19eed1aeb082145d6076947.
Ahora para verificar nuestra firma, vamos a la opción de verificación, que encontramos a la derecha de la opción de firma, una vez entremos en verificar, damos clic en Verificar y hemos verificado nuestra firma, se confirma la operación cuando nuestro recuadro se coloca en color verde.
Pero ¿que pasara si borramos el primer carácter de nuestro mensaje (S)?:
Podemos observar que al dar clic en verificar, no se completara la verificación y nuestro cuadro se colocara de color rojo, esto quiere decir que la firma del mensaje no coincide, por lo tanto no se puede ejecutar el proceso.
Conclusión:
Los problemas de escalabilidad y privacidad, son los principales problemas que afectan de forma negativa ha Bitcoin, y por tal razón se quieren implementar soluciones que puedan mitigar estas problemáticas. Como sabemos la criptomonedad y el sistema financiero descentralizado, son la competencia directa del sistema financiero centralizado que todos conocemos y utilizamos en nuestros países, aunque las criptomonedas quieren ser el sistema financiero que predomine, aun estos problemas de privacidad y escalabilidad mantienen atrasadas a esta nueva economía.
Es por ello, que con el pasar de los años y las nuevas tecnologías que van surgiendo, se busca perfeccionar este sistema, para hacer de Bitcoin y otras criptomonedas las sucesoras del sistema financiero actual.
Gracias a Taproot y las firmas Schnorr, podemos ver como los problemas de escalabilidad y privacidad se han resuelto en parte, aún falta mucho por recorrer y es algo que con el tiempo veremos como estos avances y los nuevos a integrarse mejoraran notablemente las blockchains de las criptomonedas.
Cc. @pelon53