Перейти к содержанию

Защита от повторного исполнения межсетевых сообщений

Защита от повторного исполнения связывает аутентифицированное исходное сообщение с одной версией протокола и одним доменом назначения, разрешая повторные попытки, но не более одного успешного экономического эффекта.

Обновлено

Только в образовательных целях; не является инвестиционным советом или инвестиционной рекомендацией. Инвестиции могут привести к убыткам.

Краткий ответ

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

Аутентичность, финальность и защита от повтора проверяются отдельно. Действительная подпись, аттестация валидаторов или доказательство хранения могут подтвердить данные, не доказывая финальность исходного события, привязку нужных назначения и получателя или отсутствие прежней обработки на стороне назначения. Авторизованный ретранслятор тоже служит лишь каналом доставки; его личность не заменяет аутентификацию сообщения.

Универсального межсетевого messageId не существует. Сериализацию и идентичность задает конкретная спецификация протокола. Надежный конверт обычно связывает протокол и версию, исходный домен и мессенджер либо эмитент, исходного отправителя, nonce либо идентичность исходной транзакции или лога, домен и получателя назначения, стоимость, полезную нагрузку и срок действия. Wormhole, CCTP, Optimism и ERC-5164 используют разные поля и автоматы состояний, поэтому их идентификаторы невзаимозаменяемы.

Как это работает

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

Доставка часто гарантируется хотя бы один раз, тогда как требуемый бизнес-эффект должен фактически произойти один раз. Полезный автомат различает состояния: попыток не было, обрабатывается, неудача или допускается повтор, успех или использовано. Неудачный вызов назначения сам по себе не является атакой повтора. Например, ERC-5164 требует не более одного успешного исполнения сообщения, но разрешает новую попытку после неудачи. При этом действуют специфичные для продукта правила повтора, учета газа и стоимости.

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

Область nonce имеет значение. Последовательный nonce обеспечивает порядок, но отсутствующее сообщение может заблокировать последующие. Неупорядоченный nonce или битовая карта допускает независимую доставку, но требует точного вычисления слова и бита. Для пакета необходимо определить атомарность всего пакета либо отдельные доказательство и состояние обработки для каждого листа. Если после частичного исполнения отметить использованным только корень пакета, успешные листы могут повториться, а неудачные — навсегда застрять.

Политика реорганизации исходной сети входит в защиту от повтора. Наблюдение, подписанное до достаточной финальности, может оставаться криптографически действительным, даже если исходное событие позднее перестанет быть каноническим. Еще одна граница — обновления: схема хранения прокси, отображения обработанных сообщений, домены версий, старые точки входа, ротация пиров, форки и повторное использование идентификатора сети должны сохранять или намеренно аннулировать прежние идентичности, не открывая уже использованные сообщения.

Используйте следующий порядок:

  1. Зафиксируйте протокол, развернутую версию, исходный и целевой домены, доверенный мессенджер или эмитент, отправителя, получателя, стоимость, полезную нагрузку, nonce или идентичность события и семантику срока действия.
  2. Воспроизведите каноническое кодирование и тестовый вектор messageId из спецификации; отвергайте неоднозначную конкатенацию, пропущенные поля и предположения, заимствованные у другого моста.
  3. Проверьте включение в исходную сеть и требуемую политику финальности либо подтверждений, затем правильные корень доказательства, кворум подписей, набор валидаторов или наблюдателей и версию.
  4. Независимо проверьте назначение, получателя, междоменного отправителя, стоимость, полезную нагрузку и срок; считайте передающего ретранслятора транспортом, а не источником полномочий.
  5. Прочитайте постоянное состояние сообщения и установите состояние обработки или использования до любого недоверенного внешнего вызова, предусмотрев защиту от повторного входа и явный тест отката транзакции.
  6. Определите переходы успеха, неудачи и повтора, поведение последовательного nonce или битовой карты, атомарность пакета и учет стоимости; докажите, что повторная доставка не повторяет успешный лист.
  7. Проверьте обновления, миграцию хранения, отключение старых точек входа, ротацию пиров, форки и аварийное восстановление, затем сверьте квитанции, события, состояние обработки и целевые балансы.

Примеры

  • Привязка домена назначения. Две инструкции содержат nonce 42 и стоимость 1,000, но одна нацелена на сеть 10, а другая — на 8453. Идентификатор без назначения считает 2 messages одним кандидатом на коллизию; каноническое кодирование с назначением создает 2 distinct IDs. Фактическую хеш-функцию и представление домена задает протокол.
  • Неупорядоченная битовая карта. Для nonce 513: word = floor(513 / 256) = 2, bit = 513 mod 256 = 1, mask = 1 << 1 = 2. Первый успех меняет слово битовой карты 2 с 0 на 2. Дубликат обнаруживает 2 & 2 = 2 и отклоняется, а nonce 512 независимо использует бит 0.
  • Повторная попытка не является вторым эффектом. Одно аутентифицированное сообщение доставляется 3 раза. Целевые вызовы с 110,000 и 125,000 единиц газа неудачны и откатываются; третий с 140,000 единиц успешно исполняется один раз. Общий газ равен 110,000 + 125,000 + 140,000 = 375,000; при 20 gwei это 0.0075 ETH. Доставок 3, но успешных бизнес-эффектов 1.
  • Учет частичного пакета. Четыре независимо исполняемых листа несут 25 + 40 + 15 + 20 = 100 единиц. Листы 0, 1 и 3 успешно исполняются на 25 + 40 + 20 = 85; лист 2 неудачен, и 15 остаются в ожидании. Использование только корня пакета заблокирует 15; повтор всего пакета без состояния листов может повторить 85. Применяйте атомарный откат или состояние обработки каждого листа согласно спецификации.

Риски

  • В идентификаторе отсутствует сеть или домен назначения.
  • В идентификаторе отсутствует исходный мессенджер или эмитент.
  • В домене нет версии протокола или сообщения.
  • Пространство nonce сталкивается между отправителями или развертываниями.
  • Неоднозначное плотное кодирование создает коллизии разных полей.
  • Форк или повторный идентификатор сети вновь делает старый домен действительным.
  • Исходное событие принимается до достаточной финальности и удаляется реорганизацией.
  • Принимается неверный корень доказательства либо набор валидаторов или наблюдателей.
  • Старый домен подписи остается действительным после обновления.
  • Повреждение хранения прокси сбрасывает или совмещает состояния обработанных сообщений.
  • Миграция пропускает использованные сообщения либо оставляет активной старую точку входа.
  • Состояние отмечается лишь после внешнего вызова, допуская повторный вход.
  • Неудачный вызов помечается успешным и больше не допускает повтора.
  • Успешный вызов не сохраняется и повторяет экономический эффект.
  • Пропущенный последовательный nonce блокирует все последующие сообщения.
  • Ошибочно вычисляется слово, бит или аннулирование битовой карты.
  • Состояние корня пакета противоречит частичному исполнению листов.
  • Повторная попытка снова исполняет уже успешные листы.
  • Неверно трактуются единицы крайнего срока, истечения или часов назначения.
  • Список разрешенных ретрансляторов принимается за авторизацию сообщения.

Распространенные заблуждения

  • Один nonce глобально уникален. Его пространство определяют отправитель, протокол, развертывание, исходный и целевой домены.
  • Только авторизованный ретранслятор предотвращает повтор. Ретрансляторы доставляют данные; полномочия и защиту обеспечивают целевая проверка и постоянное состояние использования.
  • Каждая повторная доставка является атакой. Сети с доставкой хотя бы один раз могут повторять неудачное сообщение; инвариант требует не более одного успешного эффекта.
  • Действительное доказательство или подпись подтверждает финальность и намерение. Оно может не связывать нужную цель, относиться к неверной версии или подтверждать исходное состояние, которое позднее реорганизуется.
  • Успешная транзакция моста подтверждает завершение ровно один раз. Проверяйте статус квитанции, хранилище обработки, события получателя и фактические балансы, включая каждый лист пакета.

Связанные темы

Источники

Навигация

Поиск по вики...