Skip to main content

Управление ключами

Управление ключами — это крайне важный аспект безопасности. Однако стоит отметить, что уровень безопасности управления ключами зависит от платформы: например, мобильное приложение с доступом к локальному хранилищу ключей (keystore/keychain) намного безопаснее, чем веб-браузер. В настоящее время управление ключами на стороне клиента у нас реализовано только в вебе. С учётом ограничений мы принимаем достаточные меры безопасности в браузере.
Эфемерная пара ключей шифруется и безопасно хранится в браузере пользователя с использованием IndexedDB — встроенной базы данных браузера. Когда пользователь инициирует действие, например подпись и отправку транзакции, сессионный токен подписывает транзакцию с помощью временной пары ключей. Смарт-контракт затем проверяет транзакцию, подтверждая, что кошелёк пользователя авторизовал сессионный токен.
  • Сгенерировать случайную пару ключей с помощью web3.Keypair.generate()
  • Сгенерировать случайный ключ шифрования
  • С помощью ключа шифрования зашифровать сгенерированную пару ключей
  • Сохранить зашифрованный ключ в IndexedDB

Модель безопасности

  1. Сессионные ключи похожи на ваш JWT-токен, адаптированный для Web3.
  2. Эти ключи имеют срок действия и область применения.
  3. После истечения срока действия ключи не могут быть повторно использованы в целевой программе. Необходимо сгенерировать новый сессионный токен.
  4. Они также разработаны как отзывные, чтобы в худшем случае, если произойдёт какая-либо ошибка, поверхность атаки ограничивалась только эфемерной парой ключей и активами, содержащимися в ней, например 0,01 SOL.

Примечание о IndexedDB

Веб-браузер — это крайне враждебная среда, и никакие меры безопасности там не могут быть полностью надёжными, начиная от cookies и сессий и заканчивая песочницей расширений. Злоумышленники всегда могут внедрить произвольный код через XSS или вредоносное расширение. Именно поэтому пользователям не рекомендуется хранить серьёзные средства в браузерных кошельках — они предназначены только для повседневных расходов. Важно чётко понимать, что сессионные ключи не являются burner-кошельками. Однако большинство Web3 сегодня работает в веб-браузерах, и именно так пользователи взаимодействуют с другими dApp. Учитывая современные ограничения, мы проектируем систему вокруг них и усиливаем безопасность другими способами.
  • Значительно ограничиваем возможности эфемерного подписанта — они строго зависят от контекста и конкретного кейса использования.
  • Это похоже на подход к JWT в типичной клиент-серверной архитектуре Web2.
Например, сессионные или JWT-токены на Facebook, Twitter или банковских сайтах могут быть уязвимы к той же проблеме. Решение заключается в ограничении области действия токена, наличии интеллектуальных систем для их отзыва и введении 2FA при подозрительной активности. Мы следуем аналогичной модели: ограничиваем область действия токена и работаем над интеллектуальной системой отзыва, которая может мгновенно отзывать скомпрометированный токен при обнаружении злонамеренной транзакции или использования вне области действия. В абсолютном худшем случае потеря средств ограничена 0,01 SOL, пополняемой для оплаты комиссии газа. Также разработчики могут обойти это сегодня, используя gasless relay, например Octane, с параметром topUp=false. Однако пока у нас нет бесшовного способа сделать это напрямую через SDK, хотя это находится в нашей дорожной карте.