¿Cómo verifica Bitcoin la firma si las direcciones tienen un hash unidireccional?

Estoy atascado en la comprensión de las transacciones de Bitcoin. Entonces, el propietario debe firmar la transacción con su clave privada, luego los mineros pueden verificar si esta firma coincide con su clave pública. Sin embargo, la clave pública tiene tres funciones (RIPEMD160, SHA256 y Base58) y es imposible obtener la clave pública ECDSA original de la dirección. Entonces, ¿cómo funciona realmente la verificación de transacciones?

Respuestas (1)

La clave pública ECDSA está "incluida" en la nueva transacción (parte del scriptSig).

Detalles

Este es un ejemplo de salida de una transacción (solo está disponible el hash de la clave pública):

"scriptPubKey": {
    "asm": "OP_DUP OP_HASH160 059be22aadc3bef6b673cb7a16247a0b7403d943 OP_EQUALVERIFY OP_CHECKSIG",
    "hex": "76a914059be22aadc3bef6b673cb7a16247a0b7403d94388ac",
    "reqSigs": 1,
    "type": "pubkeyhash",
    "addresses": [
      "mg2cQz9Y3ugyjfq8b2wTcW4veemgTBKxkX"
    ]
  }

La clave pública de la dirección anterior es 03788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf(pero no es visible en la cadena de bloques hasta que se gasta la salida. Solo el destinatario de la salida anterior lo sabe).

El uso de esa salida como entrada en una transacción posterior dará como resultado:

"scriptSig": {
            "asm": "304402203b47249bfe6528dcf297c5888ad608a5c7227ea9f878df09a265c3318c1482e202204e8a8f17da505a6d20ceb4eb63fba2d8e2c5d0a792a0e280dcb18adeec68a05d[ALL]03788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf",
            "hex": "47304402203b47249bfe6528dcf297c5888ad608a5c7227ea9f878df09a265c3318c1482e202204e8a8f17da505a6d20ceb4eb63fba2d8e2c5d0a792a0e280dcb18adeec68a05d012103788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf"
          },
  • ( 3044... es la firma ECDSA codificada por DER)
  • ( 03788... es el pubkey)
¿Cómo se decodifica? ¿Sha256 no es solo unidireccional?
SHA256 es una función hash unidireccional. Sí. No puede decodificar un hash de clave pública en una clave pública. Solo el destinatario de las monedas tiene la clave pública correspondiente (en su billetera). No hay necesidad de "descifrar".
Entonces, ¿significa esto que el destinatario posee la clave pública? Pero esto no explica cómo otras personas no pueden imitar la firma del remitente si se desconoce su clave pública...
Creo que ahora entiendo. Por lo tanto, para la entrada, el ScriptSig contiene la firma y la clave pública sin hash del remitente, y la salida contiene la dirección del receptor, ¿correcto?
Bien. Entrada = exponer pubkey (ya no es relevante)
Salida = hash (clave pública) (nadie conoce la clave pública excepto el destinatario)