¿Se puede recuperar un hash de mensaje a partir de una firma?

Se puede firmar un mensaje y recuperar su clave pública de firma dada la firma y el hash del mensaje...

signature = web3.personal.sign(<account>,<message hash>)

pubKey = web3.personal.ecRecover(<message hash>, <signature>)

¿Hay alguna forma de recuperar el hash del mensaje con una firma y una clave pública?

Respuestas (1)

No, no puede recuperar el hash del mensaje de una firma ECDSA. La firma se calcula generando (x, y) = kGdonde kes el nonce secreto y Ges el generador de la curva. Entonces r = xy s = k^(-1)(z + rd)donde zesta el mensaje y desta la clave privada. Podemos recuperar la clave pública dGal ver eso r^(-1) (kGs - zG) = dG. Pero tratar de hacer lo mismo zsolo resultará en zG, ya que no lo sabemos k, solo kG. El resultado zdado zGes exactamente el DLP en la curva elíptica y no es factible de calcular.

Edición 2: se debe tener en cuenta que, si bien calcular el hash del mensaje no es factible, es posible verificar las conjeturas, si el mensaje no se saltó antes del hash (que generalmente no lo es). Entonces, si el mensaje proviene de un pequeño conjunto de posibilidades, entonces se puede recuperar.

Editar: enlaces para leer más

https://en.m.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm

https://crypto.stackexchange.com/questions/18105/how-does-recovering-the-public-key-from-an-ecdsa-signature-work

¿Puede proporcionar un enlace para esto? Publiqué una respuesta aquí que decía lo mismo pero sin este nivel de detalle. Estoy interesado en leer más sobre esto. Gracias.