WATS Wallet logoWATS Wallet
Технически8 мин чтения

Что такое слепое подписание? Почему нельзя подписывать то, что вы не можете прочитать

Слепое подписание — это подтверждение транзакции или сообщения, которое кошелёк не может показать в читаемом виде: сырая calldata, непрозрачный hex-блоб или голый хеш. Разбираем, почему eth_sign нельзя подтверждать никогда, как дрейнеры зависят от нечитаемых запросов и как clear signing и симуляция позволяют прочитать запрос до подписи.

Слепое подписание — это подтверждение транзакции или сообщения, которое ваш кошелёк не может показать в человекочитаемом виде: сырая calldata, непрозрачный hex-блоб или голый 32-байтовый хеш вместо понятной фразы о том, что именно разрешает подпись. Это не сбой криптографии: подпись абсолютно валидна и в сети обладает полной силой, поэтому подписание нечитаемых данных выдаёт разрешения, которых вы ни разу не видели, — и именно на этом построен почти любой дрейнер кошельков. Лекарство — clear signing, прозрачное подписание: кошелёк расшифровывает запрос в предложение, которое можно проверить, и симулирует его, показывая, какие активы на самом деле сдвинутся, — плюс привычка, которую за вас не обеспечит никакой софт: отклоняйте всё, что не можете прочитать. Поскольку подпись — это ровно тот момент, когда передаются полномочия, важно и то, чтобы создающий её ключ принадлежал только вам: WATS Hot Wallet некастодиален в Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Solana и TON, поэтому ничего не двигается без подписи, которую вы одобрили лично.

Что такое слепое подписание?

Слепое подписание — это любое подтверждение, в котором запрос и его отображение разошлись. Блокчейн исполняет то, что написано в подписанных байтах; ваш экран — единственное место, где ваше намерение можно сравнить с реальным содержимым. Когда на экране hex, такое сравнение невозможно — и злоумышленники строят атаки именно вокруг этой невозможности.

Разрыв здесь информационный, а не математический. Подпись не кодирует «я согласился обменять 100 USDC»; она кодирует «этот ключ авторизует эти байты». Означают ли эти байты своп, безлимитный approval или офчейн-ордер, продающий ваш NFT за бесценок, — на этот вопрос может ответить только интерфейс, а слепое подписание наступает тогда, когда интерфейс отвечать отказывается.

Где встречается слепое подписание

Слепое подписание — не отдельная функция, а целое семейство ситуаций, в которых отображение не справляется с данными. Обычные подозреваемые:

Тип запросаЧто вы обычно видитеРиск
eth_signСырой хеш или hex-блобКритический — непроверяем по своей природе; отклоняйте всегда
Сырые типизированные данные (EIP-712)Структурированные поля — spender, сумма, срок действияВысокий, когда смысл неясен: читаемое поле — ещё не понятое поле
Транзакция к контрактуРасшифрованное действие или сырая calldata, если кошелёк не смог её расшифроватьПолностью зависит от расшифровки в кошельке
Экран аппаратного кошелька только с хешемНа дисплее устройства один лишь хешВысокий — устройство подтверждает присутствие, а не понимание

Закономерность во всех четырёх строках одна: риск идёт следом за читаемостью. Где отображение редеет, там опасность густеет.

Почему eth_sign настолько опасен?

Среди методов подписи eth_sign — самая чистая форма проблемы: он просит кошелёк подписать произвольное 32-байтовое значение, показанное вам сырым hex, без каких-либо префиксов, помечающих сообщение как «просто сообщение». Поскольку у входных данных нет доменного разделения, это может быть что угодно — в том числе хеш транзакции, выводящей активы с вашего счёта. Проверить такой запрос по одному лишь окну подтверждения не сможет даже дотошный эксперт: он непроверяем по своей природе. Именно поэтому крупные кошельки объявили метод устаревшим или удалили его совсем, и поэтому у практического правила нет исключений: по состоянию на 2026 год сайт, запрашивающий eth_sign, либо опасно устарел, либо откровенно враждебен, и оба ответа означают «отклонить».

Что на самом деле показывает аппаратный кошелёк?

Аппаратный кошелёк хранит ключи офлайн и показывает запросы на экране, который вредонос не может подменить, — но такой экран полезен ровно настолько, насколько понятно то, что на нём отрисовано. Для взаимодействий с контрактами, которых устройство не понимает, многие модели исторически откатывались к показу одного лишь хеша — за переключателем в настройках, буквально названным blind signing. Подтверждение хеша на доверенном экране доказывает, что вы нажали кнопку; о том, что именно вы одобрили, оно не доказывает ничего. Обещание аппаратной безопасности звучит как что видишь, то и подписываешь, и оно тихо рушится, когда видите вы тридцать два байта шума. Аппаратная изоляция защищает ключ, а не решение.

Как дрейнеры используют слепое подписание?

Набор дрейнера — это прежде всего атака на опыт подписания. Сайт выглядит как страница минта, клейма аирдропа или портал поддержки; а запрос, который он отправляет, — это безлимитный approval токена, setApprovalForAll на целую коллекцию NFT или офчейн-подпись Permit либо ордера, которая переместит активы позже, уже без единого окна подтверждения. Объединяет их подача: жертва подписала запрос, который не могла прочитать — или прочитала, но не поняла, — а дальше последовало опустошение. Полный сценарий разобран в материале о том, что такое дрейнер кошельков, а механика разрешений — включая то, почему одна подпись без газа способна обнулить баланс токена, — в статье про approvals токенов и Permit. Обе приводят к одной первопричине: кража происходит в момент подписи, а слепое подписание — это то, что позволяет атакующему пройти этот момент незамеченным.

Что такое clear signing — и как далеко он продвинулся?

Ответ индустрии — clear signing, прозрачное подписание: принцип, по которому кошелёк обязан перевести каждый запрос на язык, понятный человеку, прежде чем просить подпись. На 2026 год он держится на двух механизмах. Расшифровка: кошелёк распознаёт вызываемые контракт и функцию и отрисовывает их в виде фразы — approve токена X, спендер Y, сумма безлимитная, — а инициативы вроде ERC-7730 строят открытые реестры метаданных, чтобы даже экраны аппаратных кошельков могли показывать вызовы контрактов человеческим языком, а не хешем. Симуляция: кошелёк или сервис, к которому он обращается, прогоняет транзакцию на текущем состоянии сети до того, как вы подпишете, и показывает предварительный результат — какие активы уйдут, какие придут, какие разрешения изменятся. Симуляция — прогноз, а не гарантия: состояние может измениться между предпросмотром и включением в блок, а враждебный контракт способен повести себя иначе после попадания в блок, — но предпросмотр, показывающий, что ваши NFT уходят на неизвестный адрес, останавливает большинство опустошений на месте. Внедрение по кошелькам и сетям на 2026 год всё ещё неровное, поэтому проверьте, что именно ваш кошелёк отрисовывает для рутинного действия, прежде чем полагаться на его предупреждения.

Практические правила: нечитаемое значит недоверенное

Чтобы оставаться в безопасности, не нужно уметь читать calldata — нужны привычки, при которых нечитаемый запрос по умолчанию отклоняется:

  • Никогда не подтверждайте запрос eth_sign. Легитимных массовых сценариев для него не осталось — сам такой запрос и есть красный флаг.
  • Выбирайте кошельки, которые расшифровывают и симулируют. Если ваш кошелёк показывает сырой hex для рутинного действия, это проблема кошелька, ради которой стоит его сменить.
  • Читайте поля, которые важны, в запросах на типизированные данные: spender, сумма, срок действия, оператор. Безлимитная сумма или незнакомый спендер — это знак «стоп».
  • Держите режимы blind signing в аппаратном кошельке выключенными, если только вы точно не понимаете, зачем они нужны одной конкретной транзакции, — и выключайте их обратно сразу после.
  • Подключайтесь осознанно. Большинство плохих запросов приходит через поспешные подключения — порядок действий из статьи о том, как безопасно подключить кошелёк к dApp, держит парадную дверь под охраной.
  • Нечитаемое равно недоверенное. Отклонённая подпись стоит вам одной лишней попытки. Неверная подпись может стоить всего. Эта асимметрия решает за вас.

При чём здесь WATS

Слепое подписание — проблема отображения. Расшифровка и симуляция могут показать запрос понятными словами, но ни один кошелёк — включая WATS — не может решить за вас, действительно ли вам нужен этот запрос. Что кошелёк действительно определяет, так это кто контролирует ключ, превращающий ваше решение в полномочие. WATS Hot Wallet полностью некастодиален: ключи держите вы, WATS никогда не хранит ключ, и ни один перевод не покидает ваш счёт без подписи, которую вы одобрили, — в Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Solana или TON. Это убирает целый класс риска — за вас никто не подпишет, — оставляя дисциплину чтения, описанную выше, целиком на вас.

WATS NFC Metal Card занимает такое же честное место. Она не хранит приватные ключи и не расшифровывает calldata: это устройство аутентификации касанием с уникальным ID карты, связанное ровно с одним устройством, которое аутентифицирует доступ к ключам, живущим в приложениях WATS. Это добавляет физический фактор — то, что вы держите в руке, а не только то, что на экране, — но нечитаемый запрос читаемым не сделает. Этого не сделает ничто, кроме самого окна подтверждения.

Поэтому относитесь к двум половинам задачи по отдельности. Половина про чтение — это привычка: никогда не подписывайте то, что не можете прочитать, и отклоняйте всё, что приходит голым hex. Половина про хранение — выбор, который делается один раз: держите ключи в некастодиальном кошельке и оставляйте полномочие подписи там, где ему место. Установите WATS Hot Wallet, превратите каждый нечитаемый запрос в автоматический отказ и свяжите WATS NFC Metal Card со своим устройством, если хотите физический фактор, аутентифицирующий вас к ключам в приложениях WATS.

Часто задаваемые вопросы

Слепое подписание — это то же самое, что eth_sign?

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

Защищает ли аппаратный кошелёк от слепого подписания?

Лишь частично. Аппаратный кошелёк хранит ключи офлайн и показывает запросы на экране, который вредонос не может подделать, — но если устройство не может расшифровать вызов контракта, оно способно показать только хеш, а подтверждение хеша не говорит вам ничего о том, что вы одобрили. Защита улучшается по мере того, как стандарты метаданных clear signing доходят до экранов устройств; на 2026 год этот процесс идёт. Аппаратура изолирует ключ, но сама по себе транзакцию не объясняет.

Защищает ли некастодиальный кошелёк от слепого подписания?

Он защищает ключ, а не решение. Некастодиальность означает, что подпись можете создать только вы: WATS Hot Wallet — пример такого кошелька, ключи держите вы, WATS никогда не хранит ключ, и ничего не двигается в Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Solana или TON без вашего одобрения. Это снимает риск того, что за вас подпишет кто-то другой, но подпись, которую вы одобрили сами, всё равно обязывает, поэтому читать запрос до подтверждения — по-прежнему ваша задача. WATS NFC Metal Card добавляет физический фактор аутентификации касанием для ключей, живущих в приложениях WATS: она не хранит приватных ключей и не расшифровывает calldata.

Что делать, если кошелёк показывает только сырой hex?

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