Блокчейн/Уровень VII · Эволюция/7.1 Ethereum: мировой компьютер/Урок 4
Явная подпись: UTXO против одобрения токенов
Подпись, которая тратит, и разрешение, которое её переживает
МатериалыАппаратный кошелек с поддержкой PSBTДоступ к Etherscan или аналогичному блок-эксплореруИнтерфейс Revoke.cash
Любопытство
- Почему смарт-контракт может переместить ваши токены спустя годы после того, как вы с ним взаимодействовали?
- В чем структурная разница между подписанием транзакции и предоставлением постоянных полномочий?
- Как формат файла делает все входы и выходы биткоин-транзакции видимыми до того, как она будет подписана?
Исследование
- В сетях на основе EVM передача токенов регулируется стандартом ERC-20. Чтобы перевести токены из внешнего кошелька в контракт, владелец должен сначала вызвать функцию `approve`, предоставляя контракту разрешение тратить определённое количество этих токенов от его имени. Это разрешение записывается в состоянии контракта и сохраняется до тех пор, пока не будет аннулировано или исчерпано. Пользователь, который предоставил разрешение на использование 10 000 токенов для децентрализованной биржи, сохраняет это право даже после завершения обмена.
- EIP-2612 добавил функцию `permit`, которая позволяет пользователю подписать офчейн-сообщение, устанавливающее такое разрешение, без немедленной отправки транзакции. Подпись остаётся действительной, пока её не используют или не истечёт её срок, и даёт те же права на расходование. Как только разрешение существует, тот, кто контролирует одобренный адрес-распорядитель (spender), может вывести всю разрешённую сумму вызовом `transferFrom`, даже если пользователь с тех пор не взаимодействовал с этим контрактом.
- Этой архитектурой пользуются дрейнеры кошельков. Фишинговые сайты обманом заставляют пользователей подписать неограниченный `approve` или `permit` в пользу вредоносного адреса. После подписи у атакующего появляется постоянное право перемещать токены когда угодно. Отзыв таких разрешений требует дополнительных транзакций и оплаты газа, что создаёт трение. В итоге одна подпись может создать постоянную уязвимость, незаметную, если пользователь сам не проверяет свои действующие разрешения с помощью инструментов вроде Revoke.cash или Etherscan.
- Модель UTXO в биткоине устроена иначе. Постоянных разрешений в ней нет. Каждая транзакция явно тратит конкретные непотраченные выходы транзакций (UTXO) и создаёт новые. Подпись разрешает перемещение конкретной монеты с конкретного адреса на конкретный адрес назначения, не оставляя после себя никаких остаточных полномочий. Если пользователь подписал транзакцию, отправляющую 1 BTC на биржу, эту подпись нельзя повторно использовать, чтобы позже отправить ещё 1 BTC.
- BIP-174 определяет формат частично подписанной биткоин-транзакции (PSBT). До подписания PSBT содержит все входы и выходы, что позволяет программным и аппаратным кошелькам точно показать, что тратится и куда уходит. Пользователь видит полную структуру транзакции — входы, выходы, комиссии — и подписывает именно эти данные; при стандартном типе подписи она охватывает всю транзакцию целиком. Поскольку никаких скрытых разрешений не создаётся, вредоносная подпись может переместить только монеты, указанные в этой единственной транзакции, и не может оставить бэкдор для будущих переводов.
- Обратная сторона — компонуемость. Одобрения в EVM позволяют выстраивать сложные многошаговые взаимодействия, в которых контракты управляют балансами токенов от имени пользователей в ходе нескольких действий. Явная модель биткоина требует отдельной подписи для каждого перемещения, что ограничивает возможность так же гибко делегировать полномочия смарт-контрактам. Пользователи получают безопасность за счёт прозрачности и отсутствия постоянных разрешений, но жертвуют удобством автоматизированных агентов, действующих длительно.
Ключевые факты
- Функция ERC-20 `approve` предоставляет контракту разрешение тратить токены от имени владельца и действует до её отзыва.
- EIP-2612 позволяет устанавливать лимиты расходования токенов с помощью офчейн-подписей без немедленной транзакции.
- Дрейнеры кошельков используют неограниченные или забытые одобрения, чтобы выводить токены из скомпрометированных кошельков.
- Биткоин-транзакции тратят конкретные UTXO и создают новые выходы; постоянных разрешений при этом не возникает.
- BIP-174 (PSBT) позволяет пользователям просмотреть все входы и выходы биткоин-транзакции перед подписанием.
- Компонуемость EVM опирается на постоянные разрешения, а безопасность биткоина — на явные разовые подписи.
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 распространенных действий в DeFi или криптовалютах, которые требуют подписи пользователя. Укажите, какие из них создают постоянные разрешения, а какие представляют собой одноразовые переводы.
6СгруппироватьСгруппируйте эти 9 в 6 групп по тому, что оставляет после себя каждая подпись.
3Выделить главноеСократите 6 групп до 3 основных причин, по которым постоянные разрешения создают особые риски для безопасности по сравнению с разовыми переводами.
1КристаллизоватьНапишите одно предложение о том, что разрешает подпись в каждой модели и сохраняется ли это разрешение после неё.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.