¿Cómo encuentra la clave pública utilizada para firmar una transacción?

Estoy tratando de averiguar cómo encuentra la clave pública utilizada para firmar una transacción de v, r y s. Antes de que alguien lo diga, esto no es un duplicado de Get public key of any ethereum account . Esa pregunta pregunta cómo lo hace solo desde la dirección, no desde una transacción. Las respuestas a esa pregunta solo dicen que se puede hacer con algunas bibliotecas, pero no explican cómo funcionan realmente las matemáticas.

Estoy tratando de seguir los pasos en el artículo de Wikipedia sobre ECDSA ( https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm ). Estoy bien hasta el paso 6 del algoritmo de verificación de firma. Podemos obtener u1 y u2 de r, s y la transacción misma. El punto generador es parte de la especificación secp256k1, pero no veo de dónde proviene la clave pública (Q_A en el artículo de Wikipedia). Todavía no hemos usado v (no me queda claro qué es), pero es solo un byte y perdimos más de un byte cuando pasamos de la clave pública a la dirección de Ethereum (hash Keccak-256, luego eliminamos 12 bytes), así que no veo cómo eso puede llevarnos de vuelta a la clave pública.

Para ser claro, estoy tratando de averiguar cómo funcionan realmente las matemáticas. Sé que hay algunos métodos de caja negra en Python, JavaScript, etc., pero no puedo entender cómo funcionan. Gracias.

¿Tienes el hash de la transacción?
No estoy hablando de una transacción específica, pero en general, sí.
¿Y no te refieres a la dirección (hash de clave pública)?
No, puedo encontrar la dirección en el explorador de bloques o en la consola Geth. Yo tengo eso. Quiero hacer los cálculos ECDSA yo mismo y necesito la clave pública para eso.
Una vez que la clave pública se ha introducido en la dirección, es casi imposible de encontrar. Además, la transacción no se firma con la clave pública, se firma con la clave privada.
@JohnStanford Los detalles matemáticos se explican en crypto.stackexchange.com/questions/18105/…
no quiero firmar Quiero verificar la firma. Ismael, eso es exactamente lo que estaba buscando. ¡Gracias! Publíquelo como una respuesta en lugar de solo un comentario y lo marcaré como la respuesta.

Respuestas (1)

La clave pública del originador se puede calcular directamente a partir de la firma ECDSA. Una vez que tenga la clave pública, puede calcular la dirección fácilmente. El proceso de recuperación de la clave pública del firmante se denomina recuperación de clave pública.