Можно ли восстановить хеш сообщения из подписи?

Сообщение может быть подписано, и его открытый ключ подписи восстановлен с учетом подписи и хэша сообщения...

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

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

Есть ли способ восстановить хэш сообщения с помощью подписи и открытого ключа?

Ответы (1)

Нет, вы не можете восстановить хэш сообщения из подписи ECDSA. Подпись вычисляется путем генерации (x, y) = kGгде kсекретный одноразовый номер и Gявляется генератором для кривой. Тогда r = xи s = k^(-1)(z + rd)где zсообщение и dзакрытый ключ. Мы можем получить открытый ключ dG, увидев этот файл r^(-1) (kGs - zG) = dG. Но попытки сделать то же самое для zприведут только к zG, поскольку мы не знаем k, только к kG. Полученный zрезультат zGв точности соответствует DLP на эллиптической кривой, и его невозможно вычислить.

Редактировать 2: Следует отметить, что, хотя вычисление хэша сообщения невозможно, можно проверить догадки, если сообщение не было засолено перед хэшированием (что обычно не так). Таким образом, если сообщение исходит из небольшого набора возможностей, его можно восстановить.

Изменить: ссылки для дальнейшего чтения

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

Не могли бы вы предоставить ссылку для этого? Я разместил здесь ответ, в котором говорилось то же самое, но без такого уровня детализации. Мне интересно узнать больше об этом. Спасибо.