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?
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.
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:
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.
cadaniluk
MCCCS
cadaniluk
MCCCS
cadaniluk
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?MCCCS
andres chow