¿Cómo funciona la función de verificación de firma en bitcoin-qt sin una clave pública?

bitcoin-qttiene una función de "verificación de firma" en la que puede verificar un mensaje firmado. Todo lo que necesita es la dirección bitcoin del firmante, el mensaje y una firma corta. Por lo que entiendo sobre las firmas digitales, necesitaría la clave pública para verificar una firma. Una dirección de bitcoin es solo un hash de la clave pública. La clave pública puede estar en la cadena de bloques, pero ese solo sería el caso si la dirección ya hubiera reclamado al menos una salida. Si no han reclamado ninguna salida, ¿cómo se puede verificar la firma?

crypto.stackexchange.com/a/18106/7243 proporciona una mejor respuesta que la que se proporciona aquí.

Respuestas (2)

La clave pública ECDSA se puede recuperar a partir de la firma.

Consulte este hilo de bitcointalk y el pdf vinculado para obtener más detalles.

Las firmas producidas en este proceso incluyen más metadatos de lo habitual para ayudar en la recuperación de la clave pública. Incluye indicadores de recuperación (un número entero de 8 bits), que codifica si la clave pública se comprimió y un ID de recuperación específico.

Como señala el PDF de Secg http://www.secg.org/sec1-v2.pdf (página 47), dado (r, s), puede recuperar un conjunto de claves públicas probables. El ID de recuperación hace que esto sea una derivación explícita de la clave pública correcta.

También es importante incluir si la clave pública está comprimida. ¡Las firmas de Bitcoin se verifican con una dirección, no con una clave pública!

Su firma se ve así: [32 bytes de r] [32 bytes de s] [recoveryFlags], y generalmente está codificada en base64.

Dada una de estas firmas y una dirección de bitcoin, la verificación funciona de la siguiente manera:

  • generar la clave publica
  • codificarlo correctamente (compresión)
  • hash el resultado
  • compare el hash con el hash extraído de la dirección de bitcoin suministrada.