Подписи ECDSA вычисляется от частичного хэша сделки, я буду называть его sighash. Одна очень хорошая причина этого заключается в том, что подпись должна быть внутри сделки, но пока не известно. Так, по крайней мере, место, где подпись
будем быть заменен нулями до вычисления sighash. Есть опкоды, которые могут изменить, как сделано в sighashes. Например, SIGHASH_SINGLE подписывает вход, и только
один выход, но не остальные выходы.
Когда вы вычислить подпись этого хэша, вы в конечном итоге с двумя числами, точка на кривой, как (R, S). Оказывается, что математика, которая проверяет подпись не работает
только на (R, S), но он также может работать на (г, (- х мод N)) тоже, и на нескольких других точках. Это свойство известно как податливость, и хорошо известен АСС. Лично я понятия не имел, так что я узнал что-то прохладно сегодня. Это не проблема безопасности, хотя, так как точки все связаны, и ни один из них не может быть использовано, чтобы показать секретный ключ, и ни один из них не может быть найдено, не зная секретный ключ.
Я не совсем уверен, но я думаю, что Серхио клонит в том, что можно было бы создать транзакцию, затрачиваемое выход, используя подпись (г, s), и второй, который проводит один и тот же выход с (г, (- х мод N)). Вы кормите друг к сети, а затем другие идут к цели. Обе подписи действительны, поэтому цель видит законную сделку, и sighashes одинаковы, так что целевой узел не запросит версию сети этой сделки для сравнения (потому что он думает, что он уже имеет эту сделку).
Помните SIGHASH_SINGLE? Вы можете использовать его здесь, чтобы подписать только вход и изменение приходя на ваш кошелек. Это то, что позволяет создавать две разные версии с той же подписью. Так как только ваши изменения будут подписано, сделка дана целью имеет свой адрес в этом, но сделка с учетом к остальной части мира имеет другой адрес, который вы контролируете в нем. Так как они не включены в подписи, они могут быть изменены по желанию.
Итак, почему не работает?
Поскольку операции определяются по
полный хэш всей сделки, в том числе все подписи, и
не по sighash. Целевая сделка подписана (г, (- х моды Н)) имеет различный хеш-функцию из (R, S) версии, и для этого совершенно другой сделки. Целевой узел будет видеть обе версии, и так как они проводят те же txouts, двойная попытка затраты будут замечены и отклонены.
Также обратите внимание, что бумажники следить за вещами, глядя на содержание сделок, а не путем признания их хэши. Если выполнить тот же самый кошелек на двух компьютерах, когда вы проводите с одного компьютера, то второй будет распознавать txout в транзакции и отметьте его на его основе. (Это придумали в
другой поток.)
Sergio, дайте мне знать, если я уезжаю цель здесь. Это интересная тема, и я хотел, чтобы попытаться прояснить это для людей, которые просят об этом. Очевидно, что я не хочу класть слова в рот, если вы говорите о чем-то другом.