El script de bloqueo P2PK es el modelo inicial de script que usaba Bitcoin para enviar y recibir criptomonedas en su primer momento. Un modelo de script simple y elegante que nos permitía explorar el poder de Bitcoin y que nos abriría las puertas a esta interesante tecnología.
El script de bloqueo P2PK o Pay To Public Key, es el script de bloqueo más antiguo y primitivo de Bitcoin, desarrollado directamente por Satoshi Nakamoto en su primera versión de Bitcoin. Nos permite realizar pagos de bitcoins usando la versión extendida de una clave pública en lugar de un hash de la misma como sucede en la actualidad con el script estándar P2PKH (Pay to Public Key Hash).
Gracias a esto, P2PK es una versión mucho más simple de P2PKH y fue usado por Nakamoto en sus operaciones de minería inicial al crear la transacción coinbase de sus bloques. Pero también usó este script en sus primeras transacciones como la que realizó a Hal Finney.
¿Cómo funciona una P2PK?
El funcionamiento de una P2PK sigue el mismo esquema básico de las transacciones de Bitcoin, de hecho, P2PK es el origen de dicho esquema, solo que de una forma aún más simple. Cuando queremos realizar una transacción en Bitcoin necesitamos tener en nuestro poder únicamente la clave privada. Como ya explicamos en ¿Cómo se genera una dirección Bitcoin?, de la clave privada sale matemáticamente la clave pública y de la clave pública se codifica para sacar la dirección Bitcoin.
En P2PK, esa dirección de Bitcoin (que usualmente comienza con “1”, “3” o “bc1”) no se hace la última parte, es decir, no está codificada. De esta forma la dirección queda como la clave pública completa, la cual tendría una forma parecida a esta:
0496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947
be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858ee
La anterior clave pública de Bitcoin corresponde a una de las direcciones de Satoshi Nakamoto, específicamente, la dirección a la que se envió la segunda coinbase de Bitcoin.
Así, por ejemplo, para enviar una transacción a esa dirección usando una P2PK no usamos una dirección de Bitcoin como la que conocemos en la actualidad. En su lugar, bastaría con tomar toda la clave pública, la colocamos en el monedero y la enviamos. El resultado al final es el mismo, cuando la transacción quede confirmada el dueño de esa clave pública tendrá los bitcoins que le enviamos en su poder y podrá usarlos sin problemas.
Explicando el proceso de funcionamiento de una P2PK
La diferencia en el proceso de envío entre P2PK y P2PKH es la forma en como los scripts de bloqueo funcionan, y explicamos este detalle a continuación:
En primer lugar, en una P2PK no hace falta codificar la clave pública. En su lugar, solo necesitamos copiar dicha clave completa, colocarla en el script de Bitcoin y ya podremos enviar la transacción. El script P2PK para enviar (o bloquear bitcoins) tiene la siguiente forma:
Script de Bloqueo (scritpPubKey): < Clave pública a enviar > OP_CHECKSIG
Esto significa que para desbloquear dichos bitcoins y poder usarlos tendríamos que proporcionar una firma digital válida para la clave pública que hemos dado, tal como lo podemos ver en el scriptSig que tendría la siguiente forma:
Script de Desbloqueo (scriptSig): < SIGNATURE >(Firma digital válida)
Sin embargo, en una P2PKH esto cambia ligeramente, y el script de bloqueo se escribe de la siguiente forma:
Script de Bloqueo (scritpPubKey): OP_DUP OP_HASH160 < Hash de Clave Pública > OP_EQUALVERIFY OP_CHECKSIG
Y su desbloqueo se realiza por medio de:
Script de Desbloqueo (scriptSig): < SIGNATURE > < Clave Pública >
Esto significa que debemos proveer de una clave pública, duplicarla, realizar un hash de la misma, verificar que el hash de la clave pública entregada y verificar las firmas digitales para que podamos usar los bitcoins en dicha dirección.
Como puedes ver, P2PK es una opción mucho más simple y computacionalmente menos costosa. Sin embargo, P2PK es un script de bloqueo poco usado en el mundo Bitcoin en la actualidad, y a continuación explicaremos el por qué.
¿Cuánto sabes, criptonauta?
¿La razón por la que se dejaron de usar las P2PK en favor de P2PKH fue por seguridad dentro de Bitcoin?¡CIERTO!
La principal razón para el abandono del formato P2PK en Bitcoin fue el hecho de agregar una nueva capa de seguridad a los scripts que se encargaban de hacer realidad las transacciones dentro de Bitcoin, en especial P2PKH ya que este ofrece una mayor resistencia a los ataques futuros que podrían realizar las computadoras cuánticas.
Pros y contras de las de P2PK
Entre los pros de P2PK podemos destacar que:
- Es un script mucho más sencillo y computacionalmente menos costoso que P2PKH.
- Es ampliamente compatible, todas las versiones de Bitcoin Core tienen soporte para este script, ya que es la base del funcionamiento del mismo desde sus inicios.
Sin embargo, en su contra podemos mencionar algunos riesgos, algunos identificados por el propio Satoshi Nakamoto en un análisis realizado, lo cual ha hecho que prácticamente ya no se use P2PK:
- El riesgo de que la criptografía de curva elíptica pueda ser vulnerada completamente gracias a la ejecución exitosa de un algoritmo de Shor modificado para resolver el problema del logaritmo discreto en las curvas elípticas. Esta es una situación en la que desplegar clave públicas como lo hace P2PK, haría vulnerable dichas direcciones. Para evitar esto, Nakamoto decidió usar un hash de la clave pública por un proceso que agrega una capa de seguridad adicional a este proceso, solucionando este problema. De hecho, en la versión inicial de Bitcoin era perfectamente usable ambos métodos el P2PK y P2PKH.
- La extensión más corta de las P2PKH fue otro factor en pro de abandonar P2PK, no sólo por extensión, sino también para ahorrar bytes en las transacciones y mejorar la escalabilidad de Bitcoin.
- Son menos “humanas”. Es decir, las claves públicas tienen una extensión de 130 caracteres en lugar de las usuales direcciones de Bitcoin y sus 34 caracteres. Esto hace que las P2PK requieren de mayor cuidado al verificar que las direcciones son correctas, porque en caso contrario se podrían perder los fondos de forma irreversible. Es fácil ver que una dirección empieza por 1 y saber que es una dirección de Bitcoin, o comprobar los últimos caracteres para saber si la dirección no ha cambiado gracias al checksum.