Guides ·

Генерация кошелька Solana: ключи ed25519 и адреса


Solana --- один из самых используемых блокчейнов для DeFi и потребительских приложений, но процесс генерации кошельков существенно отличается от Bitcoin и Ethereum. Другая эллиптическая кривая, другие пути деривации, другая кодировка адресов и другие подходы к управлению ключами. Если вы приходите из мира Bitcoin или Ethereum, эти различия важны --- и их непонимание может привести к потере средств или компрометации безопасности.

Это руководство охватывает полный процесс генерации кошелька Solana: эллиптическую кривую ed25519, специфические для Solana пути деривации, кодировку адресов Base58 и вопросы безопасности, уникальные для экосистемы Solana.

Чем Solana отличается от Bitcoin и Ethereum

На высшем уровне различие заключается в эллиптической кривой. Bitcoin и Ethereum используют secp256k1 --- кривую от Standards for Efficient Cryptography Group (SECG). Solana использует ed25519 --- кривую в форме Эдвардса, разработанную Дэниелом Дж. Бернштейном и коллегами. Выбор кривой отражается на каждом уровне стека.

Свойство Bitcoin / Ethereum Solana
Эллиптическая кривая secp256k1 ed25519
Схема подписи ECDSA EdDSA (Ed25519)
Размер приватного ключа 32 байта 64 байта (расширенный)
Размер публичного ключа 33 байта (сжатый) 32 байта
Кодировка адреса Bech32 / Hex Base58
Путь деривации m/44'/0'/0' или m/44'/60'/0'/0 m/44'/501'/0'/0'

Дизайнерские решения Solana отражают её приоритеты: высокую пропускную способность и быструю верификацию подписей. Подписи Ed25519 верифицируются примерно в два раза быстрее, чем подписи ECDSA на secp256k1, что важно при обработке тысяч транзакций в секунду. Для более глубокого технического сравнения двух кривых смотрите secp256k1 vs ed25519.

Кривая ed25519

Ed25519 --- конкретная реализация алгоритма цифровой подписи на кривых Эдвардса (EdDSA), работающая на Curve25519. Кривая определена над простым полем 2^255 - 19 (отсюда название) и использует скрученную форму Эдвардса:

-x^2 + y^2 = 1 + d*x^2*y^2

где d --- определённая константа. Уровень безопасности составляет приблизительно 128 бит --- сопоставимо с secp256k1 --- но характеристики реализации существенно отличаются.

Генерация ключей

Приватный ключ Solana начинается как 32-байтовый случайный скаляр, часто называемый «seed» в терминологии ed25519 (не путать с BIP39 seed-фразой). Это 32-байтовое значение хешируется SHA-512, создавая 64-байтовый расширенный ключ. Нижние 32 байта (после bit clamping) становятся скаляром для подписи. Верхние 32 байта используются как дополнительная случайность в процессе подписи.

Публичный ключ выводится умножением базовой точки кривой B на «зажатый» скаляр. Результат --- 32-байтовая точка в сжатой форме Эдвардса. Этот 32-байтовый публичный ключ одновременно является адресом Solana --- дополнительного шага хеширования, как Keccak-256 у Ethereum, нет.

Случайные 32 байта → SHA-512 → 64-байтовый расширенный ключ
    → Нижние 32 байта (зажатые) × Базовая точка B → 32-байтовый публичный ключ = адрес Solana

Детерминированные подписи

Одно из преимуществ ed25519 перед ECDSA --- детерминированность подписей. ECDSA требует случайный nonce для каждой подписи, и неисправный генератор случайных чисел может катастрофически раскрыть приватный ключ (это неоднократно случалось в истории Bitcoin и Ethereum). Ed25519 выводит nonce из сообщения и приватного ключа, полностью устраняя этот класс уязвимостей.

Производительность

Верификация подписей Ed25519 быстра --- примерно 70 000 верификаций в секунду на одном современном ядре CPU. Это примерно вдвое быстрее верификации ECDSA на secp256k1. Для архитектуры Solana, нацеленной на 400-миллисекундное время блока и высокую пропускную способность транзакций, это преимущество в скорости значительно.

Пути деривации Solana

Как и Bitcoin с Ethereum, кошельки Solana используют деривацию HD-кошельков для генерации нескольких ключей из одной seed-фразы. Стандарт по-прежнему BIP39 для генерации мнемоники и BIP32 для иерархической деривации, но с путями, специфичными для Solana.

Стандартный путь: m/44'/501'/0'/0'

Каноническийe путь деривации Solana:

m/44'/501'/0'/0'

Расшифровка по BIP44:

  • 44' --- Назначение: многоаккаунтная иерархия BIP44.
  • 501' --- Тип монеты: 501 --- зарегистрированный в SLIP44 индекс для Solana.
  • 0' --- Аккаунт: первый аккаунт.
  • 0' --- Уровень «сдачи», но в конвенции Solana это индекс адреса.

Обратите внимание, что все четыре уровня используют усиленную (hardened) деривацию (обозначается апострофом). Это отличается от Ethereum m/44'/60'/0'/0/0, где для последних двух уровней используется обычная деривация. Выбор Solana в пользу полностью усиленных путей обеспечивает более сильную изоляцию между производными ключами: компрометация одного производного ключа не может привести к компрометации соседних ключей.

Несколько аккаунтов

Для дополнительных аккаунтов увеличивайте индекс аккаунта:

  • Первый аккаунт: m/44'/501'/0'/0'
  • Второй аккаунт: m/44'/501'/1'/0'
  • Третий аккаунт: m/44'/501'/2'/0'

Некоторые кошельки (например, Phantom) могут также поддерживать увеличение последнего индекса:

  • m/44'/501'/0'/0'
  • m/44'/501'/0'/1'
  • m/44'/501'/0'/2'

Вопросы совместимости

Не все кошельки Solana используют одинаковый путь деривации. Исторически Solana CLI использовал m/44'/501' (только два уровня), тогда как большинство GUI-кошельков используют m/44'/501'/0'/0'. Это расхождение означает, что одна и та же seed-фраза может давать разные адреса в разных кошельках. При восстановлении кошелька всегда уточняйте, какой путь деривации ожидает кошелёк.

Solana Seed Phrase Generator от SafeSeed отображает точный используемый путь деривации, чтобы вы знали, какой путь соответствует какому адресу.

Пошаговая генерация кошелька

Вот полный процесс генерации кошелька Solana из BIP39 seed-фразы, разбитый на отдельные шаги.

Шаг 1: Генерация энтропии

Используйте криптографически безопасный генератор случайных чисел для создания 128 бит (для 12-словной фразы) или 256 бит (для 24-словной фразы) энтропии. В SafeSeed для этого используется Web Crypto API браузера через crypto.getRandomValues().

Шаг 2: Создание мнемоники

Добавьте биты контрольной суммы SHA-256 к энтропии, разделите на 11-битные сегменты и сопоставьте каждый сегмент со словом из списка слов BIP39. Результат --- 12 или 24 английских слова. Этот процесс идентичен для Bitcoin и Ethereum --- BIP39 не зависит от блокчейна. Полную разбивку смотрите в BIP39 простыми словами.

Шаг 3: Получение мастер-seed

Примените PBKDF2-HMAC-SHA512 с 2 048 итерациями к строке мнемоники (с необязательной солью-парольной фразой), создавая 512-битный мастер-seed.

Шаг 4: Получение ключа Solana

Пройдите по пути деривации m/44'/501'/0'/0', выполняя деривацию дочерних ключей HMAC-SHA512 на каждом уровне. Поскольку Solana использует ed25519, а не secp256k1, деривация дочерних ключей следует стандарту SLIP-0010 (а не BIP32 напрямую), который определяет, как иерархически выводить ключи ed25519.

На выходе в конце пути --- 32-байтовый ed25519-seed.

Шаг 5: Генерация пары ключей

Подайте 32-байтовый seed на генерацию ключей ed25519:

  1. Вычислите SHA-512 от seed, чтобы получить 64 байта.
  2. Примените bit clamping к нижним 32 байтам (очистить 3 младших бита, очистить старший бит, установить второй старший бит).
  3. Умножьте базовую точку B на зажатый скаляр, чтобы получить 32-байтовый публичный ключ.

Пара ключей состоит из 64-байтового расширенного приватного ключа (seed + публичный ключ) и 32-байтового публичного ключа.

Шаг 6: Кодирование адреса

32-байтовый публичный ключ кодируется в Base58, создавая читаемый человеком адрес Solana. Никакого дополнительного хеширования, никакого префиксного байта --- просто сырая Base58-кодировка байтов публичного ключа.

Вы можете сгенерировать и изучить весь этот поток с помощью Solana Private Key Generator от SafeSeed, который показывает seed-фразу, путь деривации, приватный ключ, публичный ключ и конечный адрес.

Формат адреса Base58

Адреса Solana используют кодировку Base58 --- тот же алфавит Base58, что и устаревшие адреса Bitcoin, который исключает визуально запутывающие символы: 0 (ноль), O (заглавная o), I (заглавная i) и l (строчная L).

Типичный адрес Solana выглядит так:

7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV

Свойства

  • Длина: 32--44 символа (чаще всего 43--44). Длина варьируется, потому что кодировка Base58 не фиксированной ширины; ведущие нулевые байты создают ведущие символы 1.
  • Набор символов: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
  • Нет префикса: В отличие от Bitcoin (начинается с 1, 3 или bc1) или Ethereum (начинается с 0x), адреса Solana не имеют фиксированного префикса. Это затрудняет визуальную идентификацию, но сохраняет адреса короткими.
  • Нет встроенной контрольной суммы: В отличие от Base58Check (используемого устаревшими адресами Bitcoin), кодировка Base58 в Solana не включает контрольную сумму. Ошибка при переписывании может создать валидно выглядящий адрес, принадлежащий другому человеку или никому.

Отсутствие контрольной суммы делает аккуратное обращение необходимым. Всегда используйте копирование-вставку вместо ручного переписывания. По возможности используйте QR-коды. И проверяйте формат адреса с помощью Solana Address Validator перед отправкой средств. Для более широкого сравнения форматов адресов разных блокчейнов смотрите Форматы криптоадресов.

Вопросы безопасности для Solana

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

Офлайн-генерация критически важна

Поскольку адреса Solana не содержат встроенной контрольной суммы, ошибки при генерации сложнее обнаружить. Генерация кошелька офлайн --- на машине без сетевого подключения --- устраняет риск утечки данных и даёт контролируемую среду для тщательной проверки результата. Инструменты SafeSeed спроектированы для этого: загрузите страницу, отключитесь от сети, генерируйте и запишите. Общие принципы офлайн-генерации смотрите в Безопасность онлайн-генераторов seed-фраз.

Файлы пар ключей

Solana CLI хранит приватные ключи как JSON-массивы из 64 байтов (пара ключей ed25519) в файлах, обычно называемых id.json. Если вы экспортируете кошелёк из GUI и импортируете в CLI (или наоборот), вы можете столкнуться с этим форматом. Защищайте файлы пар ключей с той же тщательностью, что и seed-фразы: шифруйте их, храните на air-gapped носителях и никогда не оставляйте на подключённых к сети машинах.

Токен-аккаунты

В отличие от Ethereum, где токены ERC-20 хранятся по тому же адресу, что и ETH, Solana использует Associated Token Accounts (ATAs) --- отдельные ончейн-аккаунты для каждого типа токена. Это деталь реализации, а не вопрос безопасности ключей, но это означает, что ваш адрес Solana сам по себе не отражает полную картину ваших активов. Все ATAs, выведенные из данного адреса кошелька, контролируются тем же приватным ключом, поэтому бэкап вашей seed-фразы по-прежнему достаточен.

Program Derived Addresses (PDAs)

Модель программирования Solana использует Program Derived Addresses --- адреса, детерминированно генерируемые из ID программы и набора seeds, которые намеренно не имеют соответствующего приватного ключа. PDAs используются смарт-контрактами (программами) для управления ончейн-состоянием. Вам не нужно генерировать или сохранять PDAs; это не пользовательские кошельки.

Durable Nonces и подпись транзакций

Транзакции Solana включают недавний blockhash для защиты от повторного воспроизведения, что означает, что транзакции истекают примерно через 60--90 секунд. Это актуально для офлайн-подписи: нужно получить актуальный blockhash (или использовать durable nonce) на онлайн-машине, передать его на офлайн-машину для подписи, а затем отправить подписанную транзакцию до истечения blockhash. Аппаратные кошельки делают это автоматически, но если вы строите собственный конвейер офлайн-подписи, временное ограничение --- важный аспект проектирования.

Лучшие практики безопасности приватных ключей

Основы остаются неизменными вне зависимости от сети: никогда не делитесь seed-фразой, никогда не храните её в цифровом виде на подключённом к сети устройстве и используйте холодное хранение для значительных активов. Подробное рассмотрение смотрите в Лучшие практики безопасности приватных ключей.

Процесс генерации кошелька Solana концептуально схож с Bitcoin и Ethereum --- энтропия становится seed-фразой, seed-фраза становится мастер-ключом, и пути деривации создают отдельные аккаунты. Но лежащая в основе кривая (ed25519), стандарт деривации (SLIP-0010) и формат адреса (сырой Base58 без контрольной суммы) создают уникальный набор деталей реализации, важных для совместимости, восстановления и безопасности. Понимание этих различий --- не академический вопрос; это основа защиты ваших активов на Solana.