¿Por qué se usa P2PKH en lugar del P2PK más simple?

Si la criptografía de curva elíptica es lo suficientemente segura como para poder regalar una clave pública sin temor a que alguien pueda calcular nuestra clave privada a partir de ella, ¿cuál es la razón para codificar nuestra clave pública para usarla en P2PKH?

En otras palabras, ¿cuál es el beneficio de un sistema más complejo para bloquear y desbloquear bitcoins, si una simple transacción P2PK es lo suficientemente segura?

No estoy en contra de la seguridad adicional, pero ¿por qué no se considera redundante?

Respuestas (3)

La razón original por la que las direcciones eran hashes de clave pública es algo que deberá preguntarle a Satoshi. Sin embargo, supongo que fue más corto y más conveniente (tenga en cuenta que las claves públicas comprimidas no se conocían en ese momento).

Cuando se descubrieron las claves públicas comprimidas, simplemente fue más fácil apegarse al esquema de direcciones existente (no requirió ningún cambio en absoluto; el software de billetera y nodo ya admitía claves públicas comprimidas). La introducción de un nuevo esquema de dirección que fuera más costoso para el remitente (34 bytes de secuencia de comandos de salida en lugar de 25) hubiera sido casi imposible de convencer al ecosistema, sabiendo que la implementación de P2SH incluso tomó varios años.

Un argumento a favor que se repite a menudo es la resistencia cuántica. Creo que esto no viene al caso. No tenemos idea de cuáles serán las características de una máquina hipotética que se base en tecnología aún por inventar. Dado el grado de reutilización de claves en la red (por lo que hay direcciones con claves públicas conocidas), la existencia de un sistema que puede romper ECDSA es probablemente un golpe mortal para Bitcoin. Una solución real para eso es prepararse y tener una criptografía real resistente a la cuántica antes de que sea demasiado tarde. Confiar en la extraña esperanza de que esas máquinas hipotéticas sean demasiado lentas para robar transacciones no confirmadas antes de que sean minadas es una pista falsa.

Entonces, aunque un P2PKH finalmente ocupará más espacio en la cadena de bloques ( pubkeyhash | pubkey, signature) que un P2PK ( pubkey | signature), ¿el motivo para codificar la clave sin comprimir fue para que sea más conveniente pasarla?
Esa es mi suposición, sí. Una dirección de clave pública sin comprimir base58 tendría 95 caracteres.

La clave pública es primero con hash SHA256 y luego con hash RipeMD160. Una dirección de Bitcoin es en realidad un hash codificado de la clave pública.

Una clave pública tiene una longitud de 65 bytes (0x04 + 64 bytes de clave pública) o 33 bytes cuando está comprimida (0x02 | 0x03 + 32 bytes de clave pública).

Sin embargo, ¿por qué no RipeMD160 y hacerlo más corto? Se convertiría en 20 bytes. Por supuesto, sería genial si fuera más corto, una dirección no debería ser larga.

¿Por qué RipeMD160? La colisión de RipeMD se informó en 2004 ( ref ), ¿así que tal vez la NSA también pueda romper Ripemd160? Por lo tanto, Satoshi decidió usar SHA256 hash primero y luego RipeMD160, lo que significa que sería mucho más difícil para un atacante encontrar una preimagen para robar Bitcoins.

TL; DR direcciones más cortas, así como protección para las computadoras cuánticas del futuro lejano. (Incluso D-Wave no posee una computadora cuántica ahora. Es un recocido cuántico. ref . )

Te mereces más votos a favor por la parte de D-Wave.
Gracias. Entonces, si entiendo su respuesta correctamente... A pesar de que los scripts P2PKH ocupan más espacio en la cadena de bloques, ¿vale la pena como prueba de futuro contra las computadoras cuánticas?
@inersha Sí, un día se alentará a las personas a migrar su dinero de direcciones antiguas a direcciones a prueba de cuánticos, ese día, si no puede gastar sus fondos (tiempo de bloqueo, etc.), tendrá dificultades para la incertidumbre (¿Las computadoras cuánticas robarán mi dinero? ¿Terminará el tiempo de bloqueo antes de que las computadoras cuánticas descifren mis direcciones?) Si hubiera movido sus monedas a una dirección que nunca gastó (en otras palabras, la clave pública no se revela) , puede estar seguro de que sus monedas están seguras (al menos durante 10-20 años después). Pero eso sucederá al menos 10 años después, por lo que actualmente no es necesario
Y no, P2PKH ahorra espacio en blockchain. Cuando envía a una dirección P2PKH, está enviando a un hash de 20 bytes (+1 byte OP_HASH160) en lugar de 33 o 65 bytes.
@MCCCS Pero con P2PKH, ¿no tiene que proporcionar la (clave pública + firma) cuando venga a gastarlo de todos modos? Mientras que con P2PK solo tiene que proporcionar la (firma) cuando gasta, ¿entonces P2PK ahorra espacio en general?
@inersha Si se va a gastar, como dijiste, P2PK es más compacto en general.

¿Cuál es el motivo de aplicar hash a nuestra clave pública para usarla en P2PKH?

No hay ningún enlace a ECDSA, además de que una clave privada genera una clave pública. Pero en la transacción, vería la firma y la clave pública. Así que aquí estamos hablando de más privacidad (no de seguridad ECDSA). Si aparece un tx con un "pago a clave pública", entonces el script de gasto de tx se ve así:

ScriptPubKey= <Public Key> OP_CHECKSIG
ScriptSig= <Signature>

mientras que P2PKH usa esto:

ScriptPubKey= OP_DUP OP_HASH160 <Public KeyHash> OP_EQUAL OP_CHECKSIG
ScriptSig= <Signature><Public Key>

En el primer ejemplo puedes ver la clave pública utilizada cuando se genera la transacción (en el campo ScriptPubKey). Los mineros usarían mucho ese tipo de tx. En el P2PKH tx, verá la clave pública solo cuando se gaste.

También tenga en cuenta la diferencia en la condición de gasto, agregando una capa de seguridad. La pila ejecuta el script de ScriptPubKey, copiando ( OP_DUP) el último elemento de la pila ( <Public Key>). Luego, esta clave pública se codifica ( OP_HASH160) y se verifica ( OP_EQUAL). Esto significa que, cuando desee gastar esta transacción, debe demostrar que puede convertir su clave pública (en el ScriptSig) al mismo hash que el remitente puso como referencia en el tx (el hash de la clave pública). Como los hashes son una función unidireccional, esto no es reversible y no puede "robar" transacciones. Imagine que ECDSA se rompió de alguna manera, entonces el hash aún no está roto ... Es posible que pueda firmar un tx, pero aún tendría que proporcionar el hash correcto. Eso es según el conocimiento de hoy imposible. Aunque con ECDSA roto, todas las demás cosas extrañas pueden suceder ...

Gracias. Entonces, para resumir, ¿utilizamos principalmente P2PKH para que no haya un enlace con ECDSA, porque la seguridad de ECDSA no es lo suficientemente confiable?
No, ECDSA solo se usa para el manejo de claves, para generar claves privadas y públicas. ¿Caso de uso principal para P2PKH? Ver la respuesta de Pieter :-)