secp256k1 vs ed25519: эллиптические кривые в криптовалютах
Содержание
Каждая криптовалютная транзакция требует цифровой подписи --- математического доказательства того, что отправитель действительно контролирует аккаунт. Эта подпись создаётся алгоритмом, опирающимся на свойства эллиптической кривой. Две кривые, доминирующие в мире блокчейнов --- secp256k1 и ed25519. Они служат одной фундаментальной цели, но их конструкция, характеристики производительности и история внедрения существенно различаются.
Это руководство объясняет, что делают эллиптические кривые в криптографии, чем отличаются secp256k1 и ed25519, и что эти различия означают для генерации ключей, безопасности кошельков и используемых вами блокчейнов.
Что такое эллиптические кривые?¶
Эллиптическая кривая в контексте криптографии --- математическая структура, определённая уравнением вида y^2 = x^3 + ax + b (для кривых вроде secp256k1) или родственной формой (для кривых вроде ed25519). Безопасность криптографии на эллиптических кривых (ECC) основана на задаче дискретного логарифма на эллиптических кривых (ECDLP): дана точка P на кривой и точка Q = k * P (где k --- скаляр, а * обозначает умножение точки), вычислительно неосуществимо определить k только из P и Q.
В терминах криптовалют:
- k --- ваш приватный ключ --- секретное число.
- P --- точка-генератор --- фиксированная, публично известная точка на кривой.
- Q --- ваш публичный ключ --- выведенный из приватного ключа через умножение точки.
Любой может проверить, что Q соответствует k * P, если ему известны Q и подпись, созданная с помощью k, но извлечь k из Q невозможно. Именно поэтому безопасно делиться публичным ключом (и выведенным из него адресом), сохраняя приватный ключ в тайне.
ECC обеспечивает ту же безопасность, что и RSA, при значительно меньших размерах ключей. 256-битный ключ эллиптической кривой даёт примерно тот же уровень безопасности, что и 3 072-битный RSA-ключ. Эта компактность необходима для блокчейнов, где каждый байт транзакции стоит хранилища и пропускной способности.
secp256k1: кривая Bitcoin и Ethereum¶
secp256k1 --- эллиптическая кривая, используемая Bitcoin, Ethereum и большинством блокчейнов их экосистемы. Название расшифровывается так:
- sec --- Standards for Efficient Cryptography
- p --- кривая определена над простым полем
- 256 --- простое число длиной 256 бит
- k --- кривая Коблица (класс с преимуществами вычислительной эффективности)
- 1 --- первая (и единственная) кривая этого типа в стандарте
Уравнение кривой: y^2 = x^3 + 7 (над конечным полем, определённым простым числом p = 2^256 - 2^32 - 977).
Сатоши Накамото выбрал secp256k1 для Bitcoin в 2009 году. В то время это был необычный выбор. Большинство систем использовали кривую NIST P-256 (также secp256r1). Буква «r» в secp256r1 указывает на использование доказуемо случайного seed для параметров, тогда как параметры secp256k1 выбраны для вычислительной эффективности, а не случайности. Некоторые криптографы давно опасались, что кривые NIST могут иметь параметры, подобранные АНБ --- опасение, усиленное скандалом Dual_EC_DRBG в 2013 году. secp256k1 полностью избегает этих подозрений, поскольку его параметры просты и прозрачны: a = 0, b = 7.
Подписи: ECDSA¶
Алгоритм подписи, сопряжённый с secp256k1 в Bitcoin и Ethereum --- ECDSA (Elliptic Curve Digital Signature Algorithm). При отправке Bitcoin- или Ethereum-транзакции кошелёк использует ECDSA для создания подписи из вашего приватного ключа и хеша транзакции. Валидаторы сети проверяют подпись с помощью публичного ключа.
ECDSA-подписи на secp256k1 занимают 64 байта (два 32-байтных значения, обычно называемых r и s) плюс байт восстановления, который включают некоторые реализации. Они детерминистичны при использовании RFC 6979 (который применяют и Bitcoin, и Ethereum), то есть одно и то же сообщение и приватный ключ всегда дают одну и ту же подпись --- случайность при подписании не требуется.
Одна особенность ECDSA --- малеабельность подписи: для валидной подписи (r, s) пара (r, -s mod n) тоже валидна. Bitcoin решил это через BIP66 (строгое DER-кодирование) и позже SegWit. Ethereum решает это принудительной канонической формой s.
Производительность¶
Верификация secp256k1 на оптимизированных реализациях (вроде libsecp256k1 в Bitcoin Core) быстра: несколько тысяч верификаций в секунду на современном оборудовании. Однако подписание и верификация ECDSA по своей природе сложнее, чем EdDSA (алгоритм, сопряжённый с ed25519), который изначально проектировался для скорости.
ed25519: современный выбор Solana¶
ed25519 --- эллиптическая кривая, разработанная Дэниелом Дж. Бернштейном и коллегами. Она опубликована в 2011 году, через два года после запуска Bitcoin, и представляет новое поколение дизайна кривых, приоритизирующее и безопасность, и производительность.
Название отсылает к форме кривой Эдвардса над простым полем 2^255 - 19 (отсюда «25519»). Конкретная кривая --- скрученная кривая Эдвардса "edwards25519", бирационально эквивалентная Curve25519 (широко используемой в обмене ключами, например в Signal и TLS 1.3).
Solana выбрала ed25519 как кривую для подписей, как и несколько других современных блокчейнов. Выбор отражает преимущества ed25519 в пропускной способности --- критический аспект для высокопроизводительной архитектуры Solana.
Подписи: EdDSA¶
Алгоритм подписи, сопряжённый с ed25519 --- EdDSA (Edwards-curve Digital Signature Algorithm). Solana конкретно использует Ed25519 (EdDSA с edwards25519), создающий 64-байтные подписи.
EdDSA спроектирован для избежания подводных камней ECDSA:
- Не требуется случайность при подписании. EdDSA-подписи изначально детерминистичны --- nonce выводится из приватного ключа и сообщения через хеширование. При ECDSA плохой генератор случайных чисел при подписании может полностью раскрыть приватный ключ (это произошло с ключом подписи PS3 от Sony в 2010 году).
- Нет малеабельности подписи. EdDSA-подписи имеют единственную каноническую форму.
- Быстрая пакетная верификация. Несколько подписей Ed25519 можно верифицировать одновременно быстрее, чем по одной --- значительное преимущество для высокопроизводительных блокчейнов.
- Проще реализация. Алгоритм имеет меньше граничных случаев и условных ветвлений, что уменьшает площадь атаки для атак по побочным каналам.
Производительность¶
Ed25519 стабильно быстрее ECDSA-secp256k1 в тестах. Подписание примерно в 2--3 раза быстрее, верификация единичной подписи примерно сопоставима, но пакетная верификация --- где Ed25519 по-настоящему блестает --- может верифицировать сотни подписей значительно быстрее, чем по одной. В Solana, где блоки могут содержать тысячи транзакций, эта разница в производительности существенна.
ECDSA vs EdDSA: прямое сравнение¶
| Свойство | ECDSA (secp256k1) | EdDSA (ed25519) |
|---|---|---|
| Тип кривой | Short Weierstrass | Twisted Edwards |
| Размер ключа | 256 бит | 256 бит |
| Размер подписи | 64-65 байт | 64 байта |
| Уровень безопасности | ~128 бит | ~128 бит |
| Скорость подписания | Быстро | Быстрее (2-3x) |
| Скорость верификации | Быстро | Сопоставимо (единичная), быстрее (пакетная) |
| Детерминистическое подписание | Опционально (RFC 6979) | Встроено (by design) |
| Малеабельность подписи | Возможна (смягчена на практике) | Отсутствует |
| Уязвимость nonce | Да (плохой ГСЧ раскрывает ключ) | Нет (nonce выводится из ключа + сообщения) |
| Внедрение | Bitcoin, Ethereum, BNB Chain, Tron, Dogecoin, Litecoin | Solana, XRP (частично), Cardano, Polkadot |
Оба алгоритма обеспечивают примерно 128 бит безопасности, то есть атакующему потребуется выполнить примерно 2^128 операций для взлома ключа. Это далеко за пределами возможностей любого современного или обозримого классического компьютера. Различия лежат в безопасности реализации и производительности, а не в базовой криптостойкости.
Подробнее о безопасности ключей на практике --- Безопасность приватного ключа: лучшие практики.
Какие блокчейны используют какую кривую?¶
Выбор кривой --- одно из самых фундаментальных архитектурных решений блокчейна.
Блокчейны на secp256k1¶
- Bitcoin --- Оригинал. Использует ECDSA с secp256k1 для стандартных транзакций и подписи Шнорра (тоже на secp256k1) для Taproot.
- Ethereum --- ECDSA с secp256k1. Все EVM-совместимые сети наследуют этот выбор.
- BNB Chain --- EVM-совместимая, secp256k1.
- Polygon --- EVM-совместимая, secp256k1.
- Arbitrum и Optimism --- L2 Ethereum, наследуют secp256k1.
- Tron --- secp256k1 с ECDSA.
- Dogecoin --- Форк Bitcoin, secp256k1.
- Litecoin --- Форк Bitcoin, secp256k1.
- Avalanche (C-Chain) --- EVM-совместимая, secp256k1.
Блокчейны на ed25519¶
- Solana --- Использует исключительно Ed25519. Это ключевая причина способности Solana обрабатывать тысячи транзакций в секунду.
- XRP --- Поддерживает и secp256k1, и ed25519. Пользователи выбирают кривую при генерации ключей.
- Cardano --- Ed25519 (конкретно Ed25519-BIP32, расширенный вариант).
- Polkadot --- Преимущественно Sr25519 (Schnorr over Ristretto25519), тесно связанный с ed25519.
Разделение в значительной степени поколенческое. Блокчейны, спроектированные до 2015 года, обычно используют secp256k1 (по примеру Bitcoin). Блокчейны после 2017 года всё чаще выбирают ed25519 или родственные кривые.
Влияние на генерацию ключей¶
Выбор эллиптической кривой напрямую влияет на генерацию ключей и адресов. Инструменты SafeSeed обрабатывают разницу автоматически, но понимание процесса помогает знать, что происходит «под капотом».
Генерация ключей secp256k1¶
- Сгенерируйте случайное 256-битное число (приватный ключ). Оно должно быть между 1 и
n - 1, где n --- порядок secp256k1 (~2^256). - Вычислите публичный ключ: умножьте приватный ключ на точку-генератор G на secp256k1. Результат --- точка (x, y) на кривой.
- Несжатый публичный ключ --- 65 байт (префикс 04 + 32 байта x + 32 байта y). Сжатая форма --- 33 байта (префикс 02 или 03 + 32 байта x).
- Хешируйте публичный ключ для получения адреса (SHA-256 + RIPEMD-160 для Bitcoin; Keccak-256 для Ethereum).
Генерировать ключи secp256k1 можно с помощью Bitcoin Private Key Generator или Ethereum Private Key Generator.
Генерация ключей ed25519¶
- Сгенерируйте случайный 32-байтный seed (не то же, что BIP39 seed --- это сырой ключевой материал).
- Хешируйте seed через SHA-512, получив 64 байта. Первые 32 байта (с определёнными зафиксированными битами) становятся скаляром для подписания. Последние 32 байта используются для генерации nonce при подписании.
- Вычислите публичный ключ: умножьте скаляр на базовую точку B на edwards25519. Результат --- 32-байтная сжатая точка.
- Формат адреса зависит от блокчейна. В Solana публичный ключ (в Base58-кодировке) является адресом.
Генерировать ключи ed25519 можно с помощью Solana Private Key Generator.
Кросс-кривые: последствия¶
Поскольку secp256k1 и ed25519 математически несовместимы, приватный ключ, валидный на одной кривой, не имеет осмысленной связи с ключом на другой. Когда вы восстанавливаете seed-фразу в кошельке, поддерживающем и Bitcoin, и Solana, кошелёк выполняет два полностью раздельных процесса деривации от одного мастер-seed --- один с secp256k1 для Bitcoin/Ethereum-аккаунтов, другой с ed25519 для Solana-аккаунтов. Общий seed --- единственная связь между ними.
Поэтому путь деривации включает тип монеты: путь Bitcoin (m/44'/0'/0'/0/0) и путь Solana (m/44'/501'/0'/0') расходятся на уровне типа монеты, и каждая ветвь использует свою кривую. Подробное объяснение путей деривации --- HD-кошельки и пути деривации.
А как насчёт квантовых вычислений?¶
И secp256k1, и ed25519 одинаково уязвимы перед достаточно мощным квантовым компьютером, выполняющим алгоритм Шора, способный решить задачу дискретного логарифма за полиномиальное время. Ни одна кривая не является «более квантово-устойчивой». Криптографическое сообщество разрабатывает постквантовые схемы подписей, но ни один крупный блокчейн пока не мигрировал. Актуальная оценка --- Квантовые компьютеры и угроза криптовалютам.
Выбор правильного инструмента¶
Как пользователь, вы не выбираете между secp256k1 и ed25519 напрямую. Этот выбор делает за вас используемый блокчейн. Bitcoin и Ethereum предписывают secp256k1. Solana предписывает ed25519. Что вы можете выбрать --- инструменты, корректно реализующие кривую, требуемую вашим блокчейном.
Генераторы SafeSeed обрабатывают это автоматически. Bitcoin Seed Phrase Generator выводит ключи secp256k1. Ethereum Seed Phrase Generator --- аналогично. Solana Seed Phrase Generator выводит ключи ed25519. Все работают полностью на стороне клиента, используя Web Crypto API браузера для безопасной генерации случайных чисел. Никакой материал приватного ключа никогда не покидает ваше устройство.
Понимание кривой, лежащей в основе вашего блокчейна, не меняет повседневное использование кошелька. Но оно помогает понять, почему адреса Solana выглядят иначе, чем адреса Ethereum, почему нельзя использовать необработанный приватный ключ Solana в Ethereum и почему предположения о безопасности ваших средств столь надёжны. Эти кривые --- математический фундамент владения криптовалютой: невидимы в обычном использовании, но абсолютно основополагающи.