Блокчейн/Уровень VIII · Эпоха мемкоинов/8.2 Solana/Урок 2
Кошельки и подписание
Подпись, которая тратит, одобрение, которое её переживает, и риск подписать то, что не можешь прочитать
МатериалыКомпьютер с веб-браузеромБлок-эксплорер Solana (например, Solscan)Аппаратный кошелек или мобильное устройство с установленным Phantom/Solflare
Любопытство
- Почему у транзакции в Solana есть срок действия?
- Что именно одобряет пользователь, подписывая версионированную транзакцию?
- Как одна транзакция может ссылаться на гораздо большее число аккаунтов, чем указано в ней полностью?
Исследование
- Ключи Solana — это пары ключей ed25519. Большинство кошельков выводят их из сид-фразы BIP39 по пути деривации m/44'/501'/0'/0'. Этот стандарт позволяет пользователям восстановить все свои аккаунты в разном совместимом программном обеспечении, если у них сохранилась исходная мнемоническая фраза из двенадцати или двадцати четырёх слов. Приватный ключ остаётся локально; публичный ключ служит ончейн-адресом аккаунта.
- Транзакция содержит перечень конкретных инструкций и аккаунтов, с которыми эти инструкции работают. Важно, что в неё входит недавний блокхеш (recent blockhash). Этот хеш служит механизмом истечения срока действия: если транзакция не обработана в течение примерно 150 блоков, то есть примерно 60–90 секунд, блокхеш устаревает и сеть отклоняет транзакцию. Durable nonce позволяет подписывать транзакции, которые остаются действительными дольше: вместо недавнего блокхеша используется значение, хранящееся в специальном nonce-аккаунте.
- Подпись одобряет каждую инструкцию в транзакции. Вредоносная нагрузка может перевести токен-аккаунты или изменить их настройки полномочий так, что пользователь явно не заметит этих конкретных подынструкций. Кошельки вроде Phantom, Solflare и Backpack симулируют такие транзакции, чтобы показать понятный человеку предпросмотр. Однако пользователь всё равно может одобрить вредоносные инструкции через «слепую подпись» (blind signing), когда сырые данные принимаются без проверки того, что они на самом деле делают.
- Версионированные транзакции вводят таблицы поиска адресов (address lookup tables), позволяя одной транзакции ссылаться на множество аккаунтов по индексу, а не перечислять все адреса целиком. Эта оптимизация уменьшает размер в байтах для сложных операций, затрагивающих множество минтов токенов или позиций. Обратная сторона — сложность: чтобы понять итоговые адреса, нужно расшифровать индексы таблицы по текущему состоянию аккаунта, на который она ссылается.
- Аппаратные кошельки обеспечивают изолированную среду для подписи и подключаются через USB или QR-коды, защищая ключи от вредоносного ПО на хост-системе. Однако безопасность зависит от целостности хост-приложения, которое формирует и отображает данные транзакции. Если хост скомпрометирован, он может подсунуть вредоносные данные, а пользователь подпишет то, что выглядит легитимно. Проверка всех параметров прямо на экране аппаратного устройства закрывает этот конкретный вектор атаки.
- Чтобы изучить структуру транзакции, откройте блок-эксплорер Solana и выберите любую недавнюю транзакцию с многошаговой операцией. Раскройте раздел «Instructions», чтобы увидеть каждый отдельный вызов программы. Затем откройте вкладку «Accounts» и посмотрите, из каких аккаунтов каждая инструкция читала данные и в какие записывала. Сопоставьте это с сырыми данными, чтобы понять, как предпросмотр симуляции соответствует реальным изменениям состояния.
Ключевые факты
- Ключи Solana — это пары ed25519, выводимые из сидов BIP39 по пути m/44'/501'/0'/0'.
- Транзакции содержат недавний блокхеш, из-за которого они истекают примерно через 150 блоков (60–90 секунд).
- Подпись одобряет все инструкции, поэтому при игнорировании предпросмотра возможна слепая подпись вредоносной нагрузки.
- Версионированные транзакции используют таблицы поиска адресов, чтобы компактно ссылаться на множество аккаунтов.
- Аппаратные кошельки изолируют ключи, но для отображения данных транзакции зависят от хост-приложений.
- Кошельки симулируют транзакции, чтобы перед запросом подписи показать понятный человеку предпросмотр.
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 различных интерфейсов кошельков или способов подписи в Solana. Укажите их основную модель безопасности (программная, аппаратная, MPC) и одну конкретную функцию, которую они предлагают для проверки транзакций.
6СгруппироватьСгруппируйте 9 вариантов в 6 категорий в зависимости от того, какой объём данных транзакции виден пользователю до подписи: полные сырые данные, только предпросмотр по результатам симуляции, проверка на экране аппаратного устройства или непрозрачное исполнение.
3Выделить главноеСократите 6 групп до 3 ключевых компромиссов между удобством использования и прозрачностью для безопасности в кошельках Solana.
1КристаллизоватьНапишите одно предложение о том, что на самом деле авторизует подпись в Solana по сравнению с другими блокчейнами.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.
- Solana Documentation: Transactions and Durable Nonces
- Phantom Developer Documentation: Signing and Simulation
- BIP39: Mnemonic Code for Generating Deterministic Keys
- Solana Documentation: Versioned Transactions and Address Lookup Tables