В сценарии публичного ключа P2PKH сначала проверяется правильность открытого ключа, предоставленного предполагаемым плательщиком, а затем этот ключ используется для проверки подписи отправителя.
Интересно, почему просто проверки открытого ключа недостаточно. Сценарий публичного ключа содержит его криптографический хеш, поэтому реверсирование должно быть невозможным, и любой, кто хочет потратить UTXO, связанный с этим скриптом, должен иметь правильный открытый ключ. Разве это уже не достаточно аутентифицирует транжиру? Я понимаю, что в транзакциях P2PK необходима подпись, но с P2PKH хэширование и подпись кажутся мне излишними.
Разве простое хеширование сценария погашения не используется для аутентификации в P2SH? Сценарий публичного ключа в P2SH просто проверяет, соответствует ли хэш сценария погашения правильному значению, а затем уже выполняет его. Если хеширование считается безопасным в P2SH, то почему не также и в P2PKH?
1) Адреса устареют после одного использования.
2) Если кто-то проводит атаку Сивиллы, он/она может предотвратить ретрансляцию транзакций (что может произойти и сейчас), но также он/она может совершить поддельную транзакцию с этого адреса и ретранслировать ее, так как злоумышленник знает, что такое прообраз является.
3) Даже без атаки Сивиллы кто-то может воспользоваться возможными потерянными блоками и забрать деньги со всех транзакций в них, совершив фальшивую транзакцию для каждой из них.
Есть условие расходования и условие владения. Условие траты задается предыдущим отправителем средств в скрипте публичного ключа: «доказательство того, что вы можете создать хеш, который принадлежит этому адресу». С односторонней хеш-функцией это доказывает, что только «вы» можете быть физическим лицом, чтобы в дальнейшем тратить средства. Вы правильно объяснили это зависимостью от хеширования.
Подпись служит доказательством того, что вы являетесь законным владельцем средств. Checksig проверит логику ECDSA, и только ваш закрытый ключ может дать правильный результат.
В своем последнем комментарии вы заявили, что подписи (multisig) вообще не проверяются. Это немного неправильно. Redeemscript имеет в конце OP_Code 0xAE, который проверяет подписи для указанного количества публичных ключей.
Смотрите также ответ здесь
Существуют исследования в этой области, и аналогичное решение было предложено в литературе; он называется Fawkescoin и предлагает заменить ECDSA хеш-функцией и безопасным сервисом временной шкалы, таким как блокчейн.
Есть несколько недостатков (проблемы практичности), которые следует учитывать, как уже упоминалось MCCCS и pebwindkraft , и большинство из них, если не все, связаны с одноразовыми подписями, как упоминает MCCCS.
адреса устареют после одного использования
Некоторые примеры того, что может пойти не так, включают:
Потому что это единственный способ сказать, что тратящий является предполагаемым получателем. Только знание открытого ключа подвержено атаке «человек посередине». Если бы подписи не проверялись, то, когда вы транслируете транзакцию в сеть, ничто не помешало бы первому получателю вашей транзакции просто скопировать ваш открытый ключ, выбросить вашу транзакцию в корзину и ретранслировать свою собственную новую транзакцию, потратив ваши монеты себе. Подписи нужны для аутентификации.
каданилук
MCCCS
каданилук
MCCCS
каданилук
OP_HASH160 <Hash160(redeemScript)> OP_EQUAL
. Скрипт подписи есть<sig> [sig] [sig...] <redeemScript>
, значит подписи проходят, но проверять их вообще вроде бы не надо. Они проверяются только в том случае, если сценарий выкупа выбирает это. Разве это не очень небезопасно, если кто-то пропустит проверку подписей в сценарии выкупа?MCCCS
Эндрю Чоу