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

Содержание
Расширение, которое не кошелёк
Расширение 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 — тот, что подтвердил браузер, а не строка, которую прислала страница. Страница не может выдать себя за другой сайт. И вся система работает по принципу fail-closed: всё, что не разрешено явно, запрещено, и запрос, которого кошелёк не понимает, тоже отклоняется.
Заблокирован — значит, нет
Пока кошелёк заблокирован, расширение не отвечает ни на что, как бы ни был сформулирован запрос. Страница не может разбудить кошелёк, перебрать аккаунты или поставить подпись в очередь до разблокировки. Вы разблокируете кошелёк сами, в самом кошельке, и только после этого браузер получает ответы.
Подпись
Транзакции, сообщения и типизированные данные идут одним и тем же путём. Сначала десктоп декодирует и проверяет запрос: распознаёт стандартные операции и помечает двойников, безлимитные разрешения на списание (allowance) и неизвестных получателей разрешений (spender). В режиме AirGap неподписанный запрос затем переходит на телефон, где его снова декодируют из байтов, показывают вам и подписывают только после того, как вы нажмёте Accept («Принять»). Подпись возвращается, десктоп отправляет транзакцию в сеть, а страница получает хеш транзакции. Переключение сети устроено так же: разрешать его или нет, решает кошелёк.
Для кошелька, чья сид-фраза живёт на компьютере, подписывает сам десктоп после той же проверки — в окне кошелька, а не на телефоне.
Что может и чего не может скомпрометированная страница
Скомпрометированная страница или заражённый скрипт в браузере могут вам лгать. Показать одну транзакцию и запросить другую. Выдать клейм за верификацию. Но подписать они не могут. Решение принимается там, где ключи, — после того как вы прочитали запрос в том виде, в каком его декодировал телефон. Approve от дрейнера (drainer), который легко проскочил бы во всплывающем окне браузера, приходит на телефон таким, какой он есть: разрешение на списание, вот этому получателю, на вот эту сумму. Если оно безлимитное, телефон так и скажет.
Именно такого компромисса мы и добивались: странице — удобство браузерного кошелька, вам — никакой его уязвимости.
Вся серия
- Считайте, что компьютер скомпрометирован
- Mass Adoption Security: подписывает телефон, который у вас уже есть
- Три пути через зазор: QR-коды, Bluetooth LE и NFC
- Невидимый в эфире: устройство подписи, которое не найти сканером
- Никакого доверия транспорту
- Что показывает телефон: анализ транзакций на устройстве подписи
- Телефон ведёт собственный журнал
- Хранилище на вашем компьютере: Argon2id и профиль, устойчивый к подбору пароля
- dApp без кошелька в браузере
- MCP-сервер с правилами: ИИ-агенты в рамках лимитов
- Один защищённый кошелёк для всего
- Компактный и нативный: C++ без среды выполнения JavaScript, от рабочей станции до Raspberry Pi