Несколько месяцев назад была просветительская дискуссия о работе "Два Bitcoins в (СИК) по цене одной? Двойные атаки Расходов на быстрых платежей в Bitcoin." (http://eprint.iacr.org/2012/248.pdf) В потоке .
Я рекомендую всем, кто имеет дело с 0 / неподтвержденными платежами читать эту нить.
Авторы статьи предполагают, используя систему оповещения, чтобы сказать узлы, если дважды израсходует имеет место. Некоторые из них критики двойного провести систему оповещения быть другим вектором атак DoS. Сначала я опишу модифицированную двойную тратить-систему оповещения делает не страдаю от злоупотреблений со стороны спама предупреждения.
В статье предлагается отправка (Tx1, TX2) всякий раз, когда Прд1 и Tx2 действительны, и они разделяют prevout.
(Тх1, Тх2) может быть очень большой, и, и это легко генерировать большое количество предупреждений комбинациями prevouts.
Я думаю, что концепция двойного затратить система оповещения не несовершенна и может добавить новый слой уверенности для продавцов, использующих 0 / неподтвержденными.
Вот мое предложение.
Предложение 1)
Пусть Прд1 относится к provout р в его входной к, с подписью сценария Sign1_p, к, который подписывает хэш Тх1 для к, hash1_k
Пусть Tx2 относится к provout р в его входном у, с подписью сценария Sign2_p, J, который подписывает хэш Tx2 для J, hash2_j
Редакция: Если Прд1 и Tx2 имеют одинаковые Outpoints (адрес и сумма), то сигнал тревоги не отправляется, так как только платы или previns могут быть изменены. (Спасибо Etlase2 за указание этой проблемы)
Очевидно Sign1_p, к! = Sign2_p, J и hash1_k! = Hash2_j
Узел, который принимает Tx1 и Tx2 строит оповещение А = (р, Sign1_p, к, hash1_k, Sign2_p, hash2_j) и посылает его аналогов.
Это сообщение, в среднем, 36 + 139 + 32 + 139 + 32 = 378 байт
Оповещения с длиной более 512 байт следует игнорировать. Торговцы могут просто принимать только стандартные операции для 0 / неподтвержденными.
Когда узел получает хорошо сформированную предупреждающее сообщение А = (р, s 1, к, h1, s2, h2)
1) Если р уже, как цветовые "двойной товар.Обращайте", Клиент игнорирует предупреждение.
2) Если р делает еще не существует в блоке, клиент игнорирует предупреждение.
3) Бдительные подписи проверяются. Если утратившим клиент игнорирует предупреждение.
4) Отметьте минус р как "двойной товар.Обращайте",
5) Отправить предупреждение для остальных сверстников.
Когда приходит новый блок, все двойные метка уровня расходов удаляется из предыдущей вставки.
Кроме того, когда сделка Tx3 принимается и относится к ранее отмеченному минусу, транзакция игнорируется и не передается, не новое предупреждение не будет отправлено.
(Примечание: Поле Locktime не было учтено в данном описании)
Крипто часть системы работает, потому что подписи не являются пластичными, поэтому единственным существованием подписи чего-то, даже если содержание неизвестно, является достаточным доказательством.
Предложение 2) Кроме того, я предлагаю еще один уровень безопасности, но это требует hardfork: Если шахтер находит две операции, которые проводят те же prevouts (редактирование: но имеют разные выходы), оба из них могут быть включены в блок ( всегда один за другим), и все деньги от prevouts в конфликте даются горняк, остальные prevouts нетронуты. Кто осмелится попробовать двойной потратить?
Очевидно, что все эти меры не применяются к атаке Финни, который по-прежнему возможно.
С наилучшими пожеланиями,
Серхио.