Можно ли выполнить атаку двойного расходования в Ripple во время разделения сети?

Из спецификации (выделено мной):

При сетевом разделении реестр может быть закрыт меньшинством сети, этот реестр может быть удален в будущем .

Означает ли это, что можно будет потратить дважды, по одному разу на каждую сторону шпагата?

Даже если транзакция будет просто отклонена позже, вы можете обманом заставить продавца принять ваш платеж, затем принять доставку, а затем позволить сети отклонить транзакцию после разрешения разделения. Это правильно? Как меньшинство узлов узнает, что они отделены от остальной части сети?

Ответы (1)

Ripple должен быть невосприимчив к этой атаке, потому что транзакция не считается подтвержденной до тех пор, пока подавляющее большинство валидаторов (которые вам небезразличны) не подпишут квитанцию ​​о том, что они ее обработали (проверив реестр, который включает ее либо в этот реестр, либо в один из его предыдущих регистров). Если бы сеть разделилась, вы не смогли бы получать квитанции от подавляющего большинства валидаторов.

Серверы Ripple имеют внутренние «ворота». Они продолжают отслеживать сеть, пытаются прийти к консенсусу, подписывают валидации и так далее. Но они не сообщают клиентам о транзакциях как о подтвержденных, пока не пройдут эти внутренние ворота. Чтобы пройти через ворота, бухгалтерская книга должна иметь достаточное количество проверок из надежных источников. Как только реестр достигает этого порога, ворота перемещаются сразу после этого реестра, и все, что находится до этой новой точки, считается полностью подтвержденным.

Все, что находится после ворот, находится в процессе согласования с другими валидаторами. Все, что за воротами, навсегда совершено. Подавляющее большинство валидаторов привержены этому.

Если вы находитесь на стороне меньшинства в сплите (или даже на стороне незначительного большинства в плохом сплите), ни одна транзакция не пройдет через ворота. Сеть будет непригодна для использования, но никто не будет полагаться на транзакцию, которая будет отменена после разрешения разделения.

В обмен на невосприимчивость к этой атаке и в обмен на быстрые подтверждения Ripple без необходимости доказательства работы приходится платить определенную цену. Можно представить себе ситуации, когда транзакции могут не пройти через ворота, даже если сеть не разделена. Например, если большое количество валидаторов внезапно перестанут проверять все одновременно, вы можете подумать, что вы отделены от них, и может потребоваться ручное вмешательство, чтобы позволить любым транзакциям пройти через ворота.

Но поскольку стать узлом очень легко (нужен только IP и компьютер), не будет ли крупная организация с достаточным интересом проводить такого рода атаки, маскируясь на некоторое время как честные (чтобы завоевать доверие) и затем атаковать с помощью этих двойных расходов? Опять же, все, что нужно, это IP-адреса, а не доказательства работы.
@LucaMatteis Нет, по двум причинам. Во-первых, IP недостаточно. Вы должны на самом деле заставить людей доверять вам, и сговор — это единственное, чего они выбирают доверенные конечные точки, чтобы избежать. Во-вторых, вы не можете тратить дважды. Можно только нарушить консенсус. Как только ворота сдвинутся, все, что за ними, навсегда зафиксировано. Все, что вы можете сделать, это не дать воротам двигаться.
Если вас большинство, какое это имеет значение? Вы можете контролировать бухгалтерскую книгу и дважды тратить столько, сколько хотите. Клиент, против которого вы делаете двойные траты, это заметит, потому что его транзакция исчезнет. Но для остальной части сети ваши узлы так же заслуживают доверия, как и раньше. Кроме того, с Ripple вы должны предполагать, что хорошее поведение в прошлом подразумевает хорошее поведение в будущем, что является ненадежным предположением.
@LucaMatteis Вы не можете тратить дважды. Вы не можете ничего изменить за воротами, и пока транзакция не будет за воротами, никто не будет полагаться на ее результаты. Я не уверен, что вы подразумеваете под «клиентом, против которого вы тратите двойные деньги». (И в любом случае каждая известная денежная система требует этого предположения. Откуда вы знаете, что демократия не изменит законы таким образом, что это уничтожит любую вашу ценность?)
Кому принадлежат эти ворота? Вы хотите сказать, что все транзакции должны быть одобрены этими центральными воротами для достижения консенсуса?
@LucaMatteis У каждого сервера есть свои ворота. Прочитайте второй абзац моего ответа.
Но я хочу сказать: что, если большинство серверов нечестны? Тогда они могли бы делать плохие вещи, верно?
@LucaMatteis Для себя, конечно. Но кого волнует, что нечестные люди делают себе плохо? Для всех остальных плохие парни не могут заставить свои ворота открыться назад, поэтому двойных расходов не будет. Однако они могут помешать продвижению ворот. Так что возможна DoS-атака.
Но разве нечестные не могли вести себя честно, чтобы другие думали, что они такие же, как и другие обычные честные официанты. Но за кулисами они будут делать плохие вещи специально для некоторых людей (например, признать недействительными некоторые транзакции или что-то еще). Возможно ли это?
@LucaMatteis Нет. Предложения и проверки всегда подписываются и рассылаются. Вы не могли уйти от отправки двух разных версий. Серверы перемещают свои ворота на основе квалифицированного большинства, и вы не можете создать два разных супербольшинства. (Вы можете ничего не создать, если контролируете достаточное доверие, но тогда вы быстро потеряете это доверие.)