Кошельки

Что такое сессионный ключ для dapp и как ограничить его права

Сессионный ключ разрешает dapp выполнять заданные действия без постоянных подтверждений. Проверяем контракт, лимит, срок и отзыв.

Что такое сессионный ключ для dapp и как ограничить его права

Короткий ответ: сессионный ключ – временный ключ с ограниченными полномочиями, который смарт-кошелёк разрешает использовать без каждого подтверждения основным устройством. Безопасная политика задаёт конкретные контракты и методы, предел суммы, частоту действий, сеть и срок. Если разрешение сформулировано широко, временный ключ становится почти таким же опасным, как основной.

Зачем dapp выдаётся отдельный ключ

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

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

Основной ключ при этом остаётся корневым авторизатором. Им создают и отзывают сессии, но не используют для каждого игрового клика. Такое разделение снижает число чувствительных подписей, если политика действительно проверяется on-chain.

Какие ограничения действительно полезны

Whitelist контрактов запрещает обращаться к неизвестным адресам. Selector или список методов разрешает, например, только игровое действие, но не вывод средств. Лимит стоимости ограничивает ETH и токены за одну операцию или за весь период.

Expiration автоматически завершает право. Rate limit уменьшает частоту действий. Chain ID не позволяет применить разрешение в другой EVM-сети. Чем точнее политика, тем меньше последствия утечки.

Проверьте, распространяется ли лимит на внутренние вызовы. Разрешённый контракт способен вызвать другой контракт, если политика контролирует только первый адрес. Модель кошелька должна учитывать полный результат.

Отдельно ограничьте получателей токенов. Разрешение метода transfer без whitelist адресов может позволить вывести лимит на любой аккаунт. Для торгового приложения задайте допустимые рынки и минимальный результат, если модуль это поддерживает.

Где хранится временный секрет

Браузерное хранилище удобно, но доступно вредоносным расширениям и скриптам сайта. Мобильное защищённое хранилище или отдельный аппаратный модуль может быть надёжнее. Выбирайте защиту соразмерно лимиту сессии.

Не экспортируйте приватную часть в чат для переноса на другое устройство. Проще отозвать старую сессию и создать новую. Утрата временного ключа не должна требовать восстановления основного seed.

Как создаётся сессия

  1. Dapp предлагает новый публичный ключ и набор полномочий.
  2. Основной кошелёк показывает контракты, методы, суммы и срок.
  3. Владелец подписывает установку политики один раз.
  4. Сессионный ключ выполняет разрешённые операции до отзыва или истечения.
  5. Контракт проверяет каждую операцию по политике.

Не подтверждайте нечитаемую установку модуля. Если кошелёк не декодирует права, невозможно понять, действительно ли они ограничены.

Чем это отличается от approve и Permit

Approve даёт spender право списывать конкретный токен. Сессионный ключ получает право инициировать действия смарт-кошелька. Одна сессия может включать вызовы approve, поэтому эти механизмы способны складываться.

Permit является подписанным токенным разрешением. Разницу его полей раскрывает статья о Permit и Permit2. Не считайте сессионный ключ заменой проверки spender.

Что произойдёт при утечке

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

Немедленно отзовите сессию основным ключом и проверьте историю. Затем удалите связанные allowance, если атакующий успел их создать. План отзыва описывает статья о разрешениях токенов.

Как безопасно завершить сессию

Кнопка Disconnect на сайте может удалить локальное соединение, но не on-chain-политику. Отзыв должен изменить состояние смарт-кошелька или установленного модуля. Дождитесь подтверждения и проверьте, что ключ больше не проходит в чтении контракта.

Регулярно удаляйте старые сессии, даже если срок ещё не закончился. Особенно важно это после смены устройства, удаления dapp или завершения события.

Проверьте отзыв через чтение контракта и тестовый запрещённый вызов без отправки в блок. Удаление cookie не является доказательством on-chain-отзыва.

Кто платит комиссию

Сессионные операции всё равно используют gas. Его может покрывать смарт-кошелёк или paymaster. Механизм объясняет материал кто платит gas смарт-кошелька. Спонсирование не расширяет разрешённые методы само по себе.

Практическая проверка

  • Сопоставьте dapp и полный адрес каждого контракта.
  • Разрешите только необходимые методы.
  • Поставьте малый денежный лимит и короткий срок.
  • Запретите смену владельца, модулей и вывод, если они не нужны.
  • Сохраните способ on-chain-отзыва без сайта dapp.

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

Что сообщить поддержке

Подготовьте сеть, адрес смарт-кошелька, публичный адрес сессионного ключа, контракт модуля, TxID установки и отзыва, срок и лимиты. Seed-фраза, приватный ключ, пароль и 2FA не нужны. Не передавайте приватную часть сессионного ключа: до отзыва она даёт доступ в пределах политики.

Итог

Сессионный ключ удобен, когда частые действия заранее известны и строго ограничены. Проверяйте не название dapp, а on-chain-политику: методы, контракты, суммы, срок и отзыв. Широкая бессрочная сессия превращает удобство в постоянный дополнительный ключ к кошельку.