¿Por qué molestarse en verificar tanto la clave pública como la firma en las transacciones P2PKH?

En una secuencia de comandos de clave pública P2PKH, primero, se verifica que la clave pública proporcionada por el desembolsador previsto sea correcta y luego esta clave se usa para verificar la firma del desembolsador.

Me pregunto por qué solo verificar la clave pública no es suficiente. La secuencia de comandos de la clave pública contiene un hash criptográfico de la misma, por lo que la inversión debería ser imposible y cualquier persona que desee gastar el UTXO asociado con esa secuencia de comandos debe tener la clave pública correcta. ¿Eso ya no autentica suficientemente al gastador? Entiendo que la firma es necesaria en las transacciones P2PK, pero con P2PKH, el hashing y la firma me parecen redundantes.

¿No se utiliza también el mero hash del script de canje para la autenticación en P2SH? La secuencia de comandos pubkey en P2SH solo verifica si la secuencia de comandos de canje tiene el valor correcto y luego ya la ejecuta. Si se considera que el hashing es seguro en P2SH, ¿por qué no también en P2PKH?

Respuestas (4)

1) Las direcciones quedarían obsoletas después de un uso.

2) Si alguien realiza un ataque Sybil, puede evitar que las transacciones se transmitan (lo que también puede suceder ahora), pero también puede realizar una transacción falsa desde esa dirección y transmitirla, ya que el atacante sabe cuál es la preimagen. es.

3) Incluso sin un ataque de Sybil, alguien podría aprovechar los eventuales bloques huérfanos y tomar el dinero de todas las transacciones en ellos, haciendo una transacción falsa para cada uno.

¿Podría elaborar un poco sobre 1) y simplificar 2) para mí, por favor, o explicarlo de otra manera? No veo cómo 2) responde a mi pregunta porque apenas lo entiendo. ^^
@Downvoter Simplificaré tanto el 1 como el 2: después de que se revele la entrada del hash (preimagen), cualquiera puede robar los bitcoins de la dirección.
Gracias. Entonces, eso descarta el uso de una clave pública para P2PKH, pero ¿P2SH no solo verifica el hash de un script de canje? Entonces, una vez que se conoce el script de canje, ¿nadie puede pretender ser el propietario?
@Downvoter Por eso existen las firmas. P2SH también verifica la firma.
Aquí , se muestra que el script pubkey de P2SH es OP_HASH160 <Hash160(redeemScript)> OP_EQUAL. El script de firma es <sig> [sig] [sig...] <redeemScript>, por lo que se pasan firmas, pero parece que no deben verificarse en absoluto. Solo si el script de canje elige hacerlo, se verifican. ¿No es muy inseguro si alguien no verifica las firmas en el script de canje?
@Downvoter 99% del P2SH verifica la firma. El 1% es especial, raro y se llama guiones "Cualquiera puede gastar". Nadie "falta" para verificar la firma.
En una entrada P2SH, el script de redimir se devuelve a través del intérprete de script después de que se haya verificado su hash. Entonces, cuando crea la entrada, coloca el blob binario que es el script de redimir en la entrada. Luego, ese blob se saca de la pila y se interpreta como un script en sí mismo.

Hay condición de gasto y condición de propiedad. La condición de gasto la establece el remitente anterior de los fondos en el script de pubkey: "prueba de que puede crear el hash que pertenece a esta dirección". Con la función hash de una vía, esto demuestra que solo "usted" puede ser el individuo, para gastar más los fondos. Lo explicaste correctamente con la dependencia hash.

La firma se utiliza para probar que usted es el propietario legítimo de los fondos. Checksig verificaría la lógica ECDSA, y solo su clave privada puede generar el resultado correcto.

En su último comentario, indicó que las firmas (multisig) no se verifican en absoluto. Esto es ligeramente incorrecto. El script de redención tiene el OP_Code 0xAE al final, que verifica las firmas para un número específico de claves públicas.

Ver también la respuesta aquí

Existe investigación en el campo y se ha propuesto una solución similar en la literatura; se llama Fawkescoin y sugiere reemplazar ECDSA con una función hash y un servicio de línea de tiempo seguro, como una cadena de bloques.

Hay algunas desventajas (problemas de practicidad) a considerar, como ya lo mencionaron MCCCS y pebwindkraft , y la mayoría de ellas, si no todas, están relacionadas con las firmas únicas, como menciona MCCCS.

las direcciones quedarían obsoletas después de un uso

Algunos ejemplos de lo que puede salir mal incluyen:

  1. La transacción no se realiza, por ejemplo, debido a tarifas bajas o a una parte malintencionada que impide que las transacciones se transmitan y luego crea una transacción falsa desde esa dirección y la transmite a su propia clave (gracias a MCCCS)
  2. Una bifurcación, luego se debe usar la misma clave para cada versión bifurcada.
  3. Bloques huérfanos (gracias a MCCCS)
  4. La situación es más complicada en las transacciones multi-sig. No existe una solución obvia usando solo hashes en los casos en que las direcciones multi-sig son propiedad de partes que no son de confianza (los servicios como CoinJoin no pueden funcionar).
  5. Anuncie la misma dirección para recibir fondos, es decir, un sitio web que acepte donaciones en una sola dirección. Luego, deberá gastar todo en una transacción (para firmar solo una vez) e incluso si puede tolerar esto (poco probable), aún es propenso a los ataques antes mencionados.
  6. Si se requiere una prueba de solvencia (o prueba de propiedad de la clave/activos), entonces una forma es firmar un desafío y demostrar que posee la clave. Como ya se mencionó, desea evitar volver a firmar por cualquier medio, por lo que lo anterior revelará su imagen previa.
  7. Si un script falla por cualquier motivo durante la verificación, destruye efectivamente el valor asociado con cualquier dirección de entrada, ya que se revelará su imagen previa.

Porque esa es la única forma de saber que el gastador es el destinatario previsto. El conocimiento de la clave pública por sí solo es susceptible al ataque del hombre en el medio. Si no se verificaron las firmas, cuando transmita una transacción a la red, no habría nada que impida que el primer destinatario de su transacción simplemente copie su clave pública, arroje su transacción a la basura y transmita su propia transacción nueva gastando su monedas para ellos mismos. Las firmas son necesarias para la autenticación.