Статья 9 из 124 мин чтения

dApp без кошелька в браузере

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

Страница свопа в браузере со значком расширения без ключей в углу, локальная связь с десктопным кошельком, воздушный зазор (air gap) и телефон
Расширение передаёт. Компьютер решает. Телефон подписывает.
Содержание

Расширение, которое не кошелёк

Расширение AirNox для браузера (browser extension) встраивает в страницу стандартные интерфейсы, которые ищут децентрализованные приложения: EIP-1193 и EIP-6963 для EVM-сетей, TON Connect, а также Solana Wallet Standard и Sui Wallet Standard. Для страницы это кошелёк. Оно привычным образом отвечает на «какие аккаунты», «какая сеть», «подпишите, пожалуйста».

Внутри же это курьер. Оно не хранит ключей, не хранит сид-фразу (seed) и ничего не может подписать. Каждый запрос страницы уходит по сугубо локальному каналу в AirNox Wallet на компьютере, и ответ возвращается тем же путём. Если завтра расширение подменят вредоносной копией, украсть ей будет нечего и подписывать нечем.

Что не так с классическим кошельком-расширением

Классический web3-кошелёк живёт целиком в браузере, вместе с ключами. Значит, ключи оказываются в самой уязвимой программе на компьютере. Код, внедрённый в страницу, может добраться до интерфейса расширения. Сохранённые секреты защищены шифрованием, которое современные видеокарты вскрывают перебором (brute force) в промышленных масштабах. Многие такие кошельки несут трекеры и рекламу. Мало какие хоть как-то защищают от подмены адреса получателя. И за это удовольствие они весь день тратят память и процессорное время. AirNox оставляет в браузере только курьера, а всё, что важно, выносит из браузера в нативную десктопную программу, а в режиме AirGap — на телефон, который никогда не бывает онлайн.

Только локально

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

Права доступа — у десктопа

Права доступа хранятся в AirNox Wallet, а не в браузере. Они выдаются для каждого origin (адреса сайта) и каждой сети по отдельности, и ничто не подразумевается само собой. Сайт, которому разрешено видеть ваш аккаунт в Ethereum, не получает доступа к аккаунту в Polygon. Сайт, допущенный к одному кошельку, не допущен к другому.

Сетка origin × сеть с отметками «разрешено» и «не разрешено» и строка «кошелёк заблокирован», где отказано во всём
Для каждого origin, для каждой сети, по умолчанию — отказ.

Origin — тот, что подтвердил браузер, а не строка, которую прислала страница. Страница не может выдать себя за другой сайт. И вся система работает по принципу fail-closed: всё, что не разрешено явно, запрещено, и запрос, которого кошелёк не понимает, тоже отклоняется.

Заблокирован — значит, нет

Пока кошелёк заблокирован, расширение не отвечает ни на что, как бы ни был сформулирован запрос. Страница не может разбудить кошелёк, перебрать аккаунты или поставить подпись в очередь до разблокировки. Вы разблокируете кошелёк сами, в самом кошельке, и только после этого браузер получает ответы.

Подпись

Транзакции, сообщения и типизированные данные идут одним и тем же путём. Сначала десктоп декодирует и проверяет запрос: распознаёт стандартные операции и помечает двойников, безлимитные разрешения на списание (allowance) и неизвестных получателей разрешений (spender). В режиме AirGap неподписанный запрос затем переходит на телефон, где его снова декодируют из байтов, показывают вам и подписывают только после того, как вы нажмёте Accept («Принять»). Подпись возвращается, десктоп отправляет транзакцию в сеть, а страница получает хеш транзакции. Переключение сети устроено так же: разрешать его или нет, решает кошелёк.

Для кошелька, чья сид-фраза живёт на компьютере, подписывает сам десктоп после той же проверки — в окне кошелька, а не на телефоне.

Что может и чего не может скомпрометированная страница

Скомпрометированная страница или заражённый скрипт в браузере могут вам лгать. Показать одну транзакцию и запросить другую. Выдать клейм за верификацию. Но подписать они не могут. Решение принимается там, где ключи, — после того как вы прочитали запрос в том виде, в каком его декодировал телефон. Approve от дрейнера (drainer), который легко проскочил бы во всплывающем окне браузера, приходит на телефон таким, какой он есть: разрешение на списание, вот этому получателю, на вот эту сумму. Если оно безлимитное, телефон так и скажет.

Именно такого компромисса мы и добивались: странице — удобство браузерного кошелька, вам — никакой его уязвимости.

Вся серия

  1. Считайте, что компьютер скомпрометирован
  2. Mass Adoption Security: подписывает телефон, который у вас уже есть
  3. Три пути через зазор: QR-коды, Bluetooth LE и NFC
  4. Невидимый в эфире: устройство подписи, которое не найти сканером
  5. Никакого доверия транспорту
  6. Что показывает телефон: анализ транзакций на устройстве подписи
  7. Телефон ведёт собственный журнал
  8. Хранилище на вашем компьютере: Argon2id и профиль, устойчивый к подбору пароля
  9. dApp без кошелька в браузере
  10. MCP-сервер с правилами: ИИ-агенты в рамках лимитов
  11. Один защищённый кошелёк для всего
  12. Компактный и нативный: C++ без среды выполнения JavaScript, от рабочей станции до Raspberry Pi

Запишитесь в лист ожидания

Оставьте почту, и мы пришлём новости о релизе. Больше ничего.