(Отказ от ответственности:. Этот пост не был проверен эксплойт или даже тестовый код, который я опирался только на код инспекции, так что я могу ошибаться)
Был обсужден (например, ) Относительно возможных схем монет смешивания. Я не какой-либо из них были реализованы, но многие люди выросли такие предложения.
Непосредственное решение для объединения нескольких операций из различных владельцев в один, пути объединения входов и выходов (возможно изменением выходного количеств, и добавления дополнительных выходов). Мы предполагаем здесь, что схема не использовать SIGHASH_ANYONECANPAY. Упрощенный протокол: сначала все стороны построить большую сделку смешивания, то все стороны подписывают свои входы в поворотах.
Существует тонкая "ошибка" в протоколе Bitcoin, что позволяет два различных входа одного и того же сделки должны быть подписаны той же подписью. Если родительский вывод содержит косую OP_CODESEPARATOR, то индекс вставляется в транзакцию, чтобы быть хэшированной будет пустыми.
(https://en.bitcoin.it/w/images/en/7/70/Bitcoin_OpCheckSig_InDetail.png кажется, не согласен с ним, и я думаю, что это ошибочно)
Тогда любой входной транзакции, чей родительский выход сценарии заканчивается OP_CODESEPARATOR вычислит тот же хэш, и поэтому они будут требовать подписи одного и того же сообщения. Идентичные подписи будут работать.
Атака
Предположим, что Алиса всегда смешивает свои монеты со случайными людьми с протоколом p2p, описанным выше. Каждый раз, когда она хочет отправить некоторые ранее полученные монеты X, она смешивает X со случайной группой.
Предположим, что Мэллори должен заплатить Алисе некоторые суммы х и у. Она строит две транзакции Tx и Ty, которые должны быть отправлены на адреса, указанные Алисой. Но в каждом выходном сценарии, последний опкод является OP_CODESEPARATOR. Я полагаю, эти сделки будут нестандартными, но Мэллори сумел отправить их шахтеру или мой блок с ними самими.
Алиса получает эти операции (*), и теперь она хочет провести Tx. Она начать строить большие сделки смешивания с некоторыми людьми, которые, среди других входов, затрачивают Tx.
Мэллори принимает также часть смешивания, но вместо того, чтобы обеспечить ее собственные предыдущие выходы, она обеспечивает выход Ty в качестве ввода, и выходной адрес, который она контролирует. Когда все стороны подписывают смесительный Тх, она сначала слушает Элис подписи, а затем повторяет его.
Теперь Алиса украл монеты в Ty.
Некоторое время назад я писал о возможных проблемах со сложностью метода подписания сценария, и я предложил просто вставить «*» в сценарии должны быть подписаны, вместо индекса месиво.
(*) Интересно, если клиент Satoshi распознает их как для себя.
С наилучшими пожеланиями,
Серхио.