Конфиденциальность, Разрешения и безопасность подписи
В DApps на базе EVM часто одно за другим появляются четыре действия: подключение кошелька, подписание сообщения, подписание транзакции и предоставление разрешения на использование криптотокенов. Эти действия не обеспечивают одинаковый доступ. Соединение создает канал связи между учетной записью и веб-сайтом. Подписание сообщения подтверждает личность или выражает намерение. Подписание транзакции создает транзакцию, которую можно транслировать. Разрешение жетон позволяет одобренной стороне (Spender) использовать активы в определенных пределах. Нулевая сумма или отсутствие комиссии сети (Gas) не делает запрос безопасным; понять каждый запрос, прежде чем подтвердить его.
1. Чем различаются четыре действия?
Действие | Основная цель | Обычно записывается на блокчейн / Обычно требуется плата за сеть ( | Основной риск |
Подключить кошелек | Делится выбранным общедоступным адресом и сетью с веб-сайтом и предоставляет ему канал для последующих запросов. | Нет / Нет | Раскрывает информацию, связанную с адресом, и позволяет позднее запрашивать подпись. |
Подписать сообщение | Создает криптографическую подпись для текста или структурированных данных. | Обычно нет / Обычно нет | Сообщение может выражать намерение войти в систему, разместить заказ или предоставить подписанное разрешение ( |
Подписать транзакцию | Утверждает транзакцию или контрактную операцию, которую можно отправить в сеть. | Да, после трансляции и успешного исполнения / Обычно да | Успешное исполнение может привести к передаче активов или изменению состояния контракта. |
Предоставьте разрешение жетон | Позволяет одобренной стороне ( | Зависит от того, как создано разрешение | После вступления разрешения в силу одобренная сторона может использовать его без другой подписи владельца актива. |
Важное различие: Разрешение жетон — это состояние разрешения, а не четвертый тип подписи, параллельный первым трем действиям. Транзакция блокчейн может выполнять функцию одобрение (approve), чтобы создать или изменить разрешение. Альтернативно, подписанное сообщение о разрешении (Permit) можно отправить позже. Сама по себе подпись не меняет блокчейн; разрешение может быть записано только после успешной отправки подписанного сообщения.
2. Что означает подключение кошелька и подписание сообщения?
Подключить кошелек
Соединение с кошельком обычно использует интерфейс подключения к кошельку (Provider). Стандартный запрос на подключение не предоставляет веб-сайту закрытый ключ или начальная фраза, а также не подписывает и не передает активы автоматически. Однако веб-сайт может получить публичный адрес и сеть, выбранные пользователем, и может отправлять последующие запросы в кошелек. Как только веб-сайт узнает общедоступный адрес, он может продолжать запрашивать общедоступную историю блокчейн этого адреса после завершения соединения. Немедленно остановитесь и проверьте официальную точку входа, если какой-либо веб-сайт запрашивает начальная фраза или закрытый ключ.
Подписать сообщение
Подписание сообщений обычно используется для войти в систему, принятия условий, заказов вне сети, голосования или структурированных данных, определенных EIP-712. Обычно он не записывает данные на блокчейн, и подписывающая сторона обычно не платит комиссию за сеть (Gas). Однако отсутствие уплаты комиссии не означает, что запрос не связан с риском активов. Когда кошелек отобразит читаемую информацию, просмотрите каждое отображаемое поле. Проверьте домен, идентификатор сети (Chain ID), поле адреса контракта (verifyingContract), утвержденная сторона (Spender), сумму и срок действия. Если кошелек отображает только необработанные данные или шестнадцатеричный контент, который вы не понимаете, остановитесь. Не продолжайте выполнение запроса. См. Что такое мошенничество с транзакциями на нулевую сумму и hex-данными?.
3. Когда подписи транзакций и жетон Разрешения вступают в силу?
Подписание транзакции не означает, что она выполнена на блокчейн.
Подписание создает подписанную транзакцию; он не меняет состояние блокчейн сам по себе. Баланс счета, состояние контракта или разрешение изменяются только после того, как транзакция будет транслирована, включена в блок и успешно выполнена. Подписанная транзакция может не быть отправлена в сеть. Он также может быть заменен, истечь или выйти из строя во время выполнения. Если в интерфейсе отображается 0 ETH, это лишь означает, что транзакция не включает ETH напрямую. Пользователь по-прежнему может платить комиссию за сеть (Gas), и операция контракта по-прежнему может создавать разрешения, передавать криптотокены или изменять другое состояние блокчейн.
Подписание сообщения о разрешении не означает, что разрешение вступило в силу.
Подписанная операция разрешения (Permit) обычно создает сообщение, которое можно отправить позже. Создание подписи не меняет объем разрешений на блокчейн. Подписанное сообщение должно быть успешно отправлено. В этот момент его значение последовательности (nonce), срок действия и другие условия проверки должны оставаться действительными. Только после этого разрешение можно будет записать на блокчейн. После вступления разрешения в силу утвержденная сторона (Spender) может позже использовать разрешение в рамках своих правил, утвержденной суммы и баланса счета. О рисках, связанных с долгосрочным Разрешения, см. Что такое Unlimited Approval?.
4. Взаимодействие DApp не всегда состоит из четырех фиксированных шагов.
Крипто-биржа жетон (Swap) может потребовать всего два действия: подключить кошелек и подписать транзакцию. В других случаях DApp может сначала запросить отдельное действие. Например, он может попросить пользователя подписать сообщение войти в систему. Он может попросить пользователя подписать транзакцию блокчейн, которая выполняет функцию одобрение (approve). Или он может попросить пользователя подписать сообщение о разрешении (Permit). Если учетная запись уже предоставляет достаточное разрешение на расходы, DApp обычно не запрашивает новое разрешение. Биржа, которая использует собственный актив сети вместо ERC-20 жетон, обычно не требует разрешения на расходование ERC-20. Не судите о безопасности по количеству шагов; рассматривайте каждое приглашение как отдельный запрос.
Отключение сайта от кошелька только прекращает локальное соединение. Это не меняет разрешение, уже записанное на блокчейн. Чтобы узнать, где хранятся Разрешения, как долго они остаются действительными и как работает отзыв, см. Отменяет ли отключение от DApp уже выданные разрешения?.
5. Что мне следует проверить перед подтверждением?
Подключение: Убедитесь, что домен веб-сайта, учетная запись и сеть соответствуют вашим ожиданиям.
Сообщение: Подтвердите цель запроса и просмотрите любой читаемый протокол, контракт, утвержденную сторону (
Spender), сумму и срок действия.Транзакция: Проверьте сеть, тип транзакции, получателя или контракт, актив, сумму и комиссию сети. Для объяснения
Gas, см. Что такое газ? Как рассчитываются лимит газа, цена газа и плата за сеть?.Разрешение: Проверьте одобренную сторону (
Spender), контракт жетон, сумма, сеть и объем. Избегайте ненужного безлимитного Разрешения.Экран устройства: Положитесь на информацию, которую устройство действительно может декодировать и отображать. Некоторые поля контракта могут остаться необъясненными на устройстве. Если важная информация отсутствует, отличается от ожидаемой или не может быть понята, отклоните запрос и проверьте его еще раз.
Более полный контрольный список см. Что следует проверить перед подтверждением транзакции на аппаратном кошельке?. Читабельную информацию о транзакциях и рисках фишинг см. Как SignGuard и Clear Signing защищают от фишинга в Web3?.
Ключевой принцип: аппаратный кошелек может защитить ключи подписи, но не может решить, соответствует ли веб-сайт, сообщение, транзакция или разрешение истинным намерениям пользователя.
