Сообщение может быть подписано, и его открытый ключ подписи восстановлен с учетом подписи и хэша сообщения...
signature = web3.personal.sign(<account>,<message hash>)
pubKey = web3.personal.ecRecover(<message hash>, <signature>)
Есть ли способ восстановить хэш сообщения с помощью подписи и открытого ключа?
Нет, вы не можете восстановить хэш сообщения из подписи 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
Мэлоун