Предположения:
- Когда я вещать сделку, он немедленно будет проверяться полными узлами и распространяются, если он действителен
- Если сделка недействительна, каждый полный узел будет видеть это, но молча отклонить его без передачи своих партнеров.
- Если узел получает второй, конфликтующие сделки, независимо от того, является ли первый один подтверждается тем не менее, узел будет рассматривать первый он видит, чтобы быть действительным и отклонить второй
- Узлы будут работать, чтобы включать в ТХ они видят первый в блок, и исключить его из своей очереди, если новый блок решается, что конфликты с ним.
Атака:
Атакующий ставит специальное программное обеспечение на свой телефон, который используется для оплаты торговцев в PoS ситуациях. Это программное обеспечение предназначено таким образом, что всякий раз, когда он инициирует транзакцию, телефон будет транслировать "верный" ТЙ до половины узлов он подключен, а затем 0.1 секунды спустя транслируемых в секунду, конфликтует ПРД на другую половину узлов. Второй ТХ будет переходом к себе с использованием тех же результатов, как первые ТМИ они видели.
Первая сделка будет рассматриваться ~ 70% сети первого, и злоумышленник надеется коммерсант узел увидит его первым, тоже. Шахтеры в этом 70% будут считать, что это реальный ОЙ и начать пытаться включить его в блоке. Остальные 30% первым увидит вторую сделку, считают его "реальный", Начинают пытаться включить его в блок. Обе группы узлов получит слово из другой транзакции, когда он проходит дальше, но будет молча игнорировать его, потому что он конфликтует с первой сделкой, которую они получили.
На данный момент, забыть о 30% вероятности того, что продавец первым видит ненужную операцию (как только человек тяготит это злоумышленником). Предположим, что коммерсант находится в 70% группе. Торговец будет видеть ожидаемый ТХ, как 0 / неподтвержденные, и покупатель берет свой товар и выходит из магазина. Тем не менее, есть 30% вероятность того, что ТЕ к себе заканчивается в следующем блоке и 0 / неподтвержденный ТХ купеческого будет недействительным. В этом случае клиент уже вышел из магазина, и его сделка является анонимной достаточно что торговец может просто есть потери $ 100 вместо того, чтобы пытаться получить его исследовали.
В этом смысле есть очень низкий риск для покупателя, чтобы сделать это, и могут также сделать это каждый шанс, что он имеет. Хотя, я не думаю, что это на самом деле, что с низким уровнем риска, потому что есть много вещей, которые могут пойти не так, для нападающего, если продавец находится в другом 30%. Но я не хочу обсуждать это здесь.
Обороны:
В этой ситуации, торговец узел имеет 20+ сверстников, и с 30% сетей будучи убеждено, что другая транзакция действительно, по крайней мере, один из этих коллег будут посылать ему противоречивую сделку. Путь клиента написано сейчас, сделка просто отклонен, поскольку он конфликтует с первым. Тем не менее, я не понимаю, почему клиентское программное обеспечение не может быть разработан, чтобы видеть, что вторая сделка является угрозой для первого ТХ и, вместо того, чтобы отвергнуть его, предупреждая пользователя, что есть угроза для одного из его собственных операций. Это очень надежный, потому что для того, чтобы нападение, чтобы иметь шансы на успех, злоумышленник должен немедленно транслировать второй ТХ после первого, либо 99% + сети будет увидеть первый TX, а второй будет DOA и не распространяются. Таким образом, либо второй ТХ не распространяется, и атака не удается, или торговец немедленно см противоречивой сделки и принять соответствующие меры: отказать в обслуживание, позвоните в полицию, держать деньги, и т.д. Я не могу думать о уважительных причинах, почему конфликтует ТМ будет распространяющимися в то же время, если не был злой умыслом.
Независимо от намерения / легальности, торговец имеет оправдание, чтобы отказаться от услуг на товарах до ТХОВ является подтверждены в блоке. Клиент может избежать вынужден ждать 1+ подтверждений просто не пытаюсь двойным потратить. Если нет конфликтующих транзакций, то первая / только сделка почти гарантированно будет включено в следующий блок на 0 / неподтвержденный, и клиент не может ничего сделать, чтобы обратить его вспять.
Более далеко идущие, но еще более надежным, клиентское программное обеспечение может быть установлено с новым сообщением протокола специально для этого события. Если Любые узел принимает транзакцию, которая конфликтует с транзакцией в настоящее время в блоке он пытается решить, это просто транслирует новое "dsalert" сообщение, которое содержит два хэш конфликтующих сделок в вопросе. Тогда, даже если только 1% узлы думают, что конфликтующие ОЕ является действительным, и торговец не имеет себе равные в этой группе, они все равно станут известны в течение нескольких секунд, что они должны ждать подтверждения, прежде чем разрешить клиенту оставить его товар. Все, что необходимо для дополнительного цикла в коде, чтобы проверить только что полученные операции против всех неподтвержденных операций и уведомляет пользователя / коллег, если он видит одну.
Так?
Если мои предположения и оценка верна, то, казалось бы, что торговец фактически не нуждается в третьей стороне, чтобы избежать 0 / неподтверждённую двойной расходы. Если атака имеет шанс на успех, то не было бы прямым доказательством того, что клиент пытается обмануть их. Где я буду неправильно во всем этом?