Блокчейн
Эллиптические кривые (ECC)
Каждый Bitcoin-кошелёк - это точка на математической кривой. Точка, координаты которой вычислены из случайного 256-битного числа. И вот что поразительно: вычислить точку из числа занимает миллисекунду, а восстановить число обратно из точки - дольше, чем существует Вселенная. Эта асимметрия, записанная в уравнении y² = x³ + 7, защищает триллион долларов криптовалютного рынка прямо сейчас.
- **Bitcoin и Ethereum** - каждый адрес, каждая транзакция подписана на secp256k1. Более 1 триллиона защищено этой кривой
- **Signal, WhatsApp, Telegram** - 2+ миллиарда пользователей обмениваются сообщениями через X25519 (Curve25519). Каждое сообщение шифруется с помощью эллиптических кривых
- **SSH и TLS 1.3** - подключение к серверу через `ssh-keygen -t ed25519` использует Ed25519. Большинство современных HTTPS-соединений используют ECDHE на Curve25519
Дэниел Бернштейн: криптограф-бунтарь
В 1995 году 24-летний аспирант Дэн Бернштейн подал в суд на правительство США. Он доказывал, что ограничения на экспорт криптографического ПО нарушают Первую поправку (свобода слова). И **выиграл** - суд постановил, что исходный код является формой свободного самовыражения. Десять лет спустя, в 2005-2006, Бернштейн опубликовал Curve25519 и Salsa20 - алгоритмы, спроектированные быть **устойчивыми к ошибкам реализации**. Его философия: если разработчик может сделать ошибку - он её сделает; задача криптографа - сделать ошибку невозможной.
Curve25519 стала стандартом де-факто для нового поколения протоколов: Signal, WireGuard, TLS 1.3. Подход «безопасность по дизайну» изменил всю индустрию.
Предварительные знания
secp256k1: кривая Bitcoin
Каждый Bitcoin-адрес, каждая транзакция на сумму в миллиарды долларов - всё это держится на одной математической формуле: **y² = x³ + 7**. Эта формула задаёт эллиптическую кривую **secp256k1** - кривую, которую Сатоши Накамото выбрал для Bitcoin.
Эллиптическая кривая - это множество точек (x, y), удовлетворяющих уравнению вида **y² = x³ + ax + b**. Для secp256k1 коэффициенты a = 0, b = 7. Но в криптографии мы работаем не с вещественными числами, а с числами по модулю огромного простого числа **p**.
**NIST vs Koblitz кривые.** Существует два семейства кривых: - **NIST-кривые** (P-256, P-384) - параметры выбраны NIST, но происхождение "seed"-значений не объяснено. Криптографы подозревают возможный бэкдор от NSA. - **Koblitz-кривые** (secp256k1) - параметры определяются самой структурой, нет "волшебных" констант. Формула y² = x³ + 7 - одна из простейших возможных. Сатоши выбрал secp256k1 именно из-за прозрачности: параметры не содержат ничего подозрительного.
Почему a = 0, b = 7? Из всех кривых y² = x³ + b (с a = 0) кривая с b = 7 даёт **структурно удобные** параметры: порядок группы n - простое число, что важно для безопасности. Плюс, вычисления на кривой с a = 0 **быстрее** - одно умножение можно пропустить при вычислении x³ + ax + b.
**secp256k1 не идеальна для всех задач.** Она требует аккуратной реализации: - ECDSA на secp256k1 нуждается в качественном генераторе случайных чисел для nonce k. Плохой nonce k → утечка приватного ключа. - В 2013 году Android-кошелёк Bitcoin потерял средства из-за бага в генераторе случайных чисел, который выдавал одинаковые значения k.
Почему Сатоши выбрал secp256k1, а не стандартную NIST P-256?
Curve25519: безопасность по дизайну
В 2006 году криптограф Дэниел Бернштейн предложил альтернативу: **Curve25519** - кривую, спроектированную так, чтобы **исключить целые классы ошибок** реализации. Если secp256k1 требует аккуратности от разработчика, то Curve25519 делает неправильную реализацию **почти невозможной**.
Curve25519 использует **форму Монтгомери**: **By² = x³ + Ax² + x**, где A = 486662, B = 1. Модуль - простое число **p = 2²⁵⁵ − 19** (отсюда название). Эта форма позволяет выполнять скалярное умножение, используя **только координату x** - это Montgomery Ladder.
**Два лица одной кривой:** - **X25519** - протокол обмена ключами (Diffie-Hellman на Curve25519). Используется в TLS 1.3, Signal, WireGuard. - **Ed25519** - алгоритм цифровых подписей. Использует **биративно эквивалентную** кривую Edwards (twisted Edwards curve): **−x² + y² = 1 − (121665/121666)x²y²**. Одна математическая структура, два применения. Solana, Cardano и Polkadot используют Ed25519 для подписей.
Почему Curve25519 «безопасна по дизайну»? 1. **Constant-time операции** - алгоритм Montgomery Ladder работает за одинаковое время для любого ключа, защищая от timing attacks. 2. **Нет cofactor-ловушек** - кофактор h = 8 обрабатывается автоматически. 3. **Простой модуль** p = 2²⁵⁵ − 19 позволяет эффективную арифметику без ветвлений. 4. **Детерминированные подписи** - Ed25519 не требует случайного nonce, в отличие от ECDSA.
Signal Protocol и Curve25519
Как мессенджер защищает миллиарды сообщений
Signal Protocol (используется в Signal, WhatsApp, Facebook Messenger): 1. X25519 - обмен ключами при установке сессии 2. Ed25519 - подписи для аутентификации 3. Double Ratchet - обновление ключей после каждого сообщения Каждый из 2+ миллиардов пользователей WhatsApp использует Curve25519 при каждом сообщении. Это самая массово используемая эллиптическая кривая в мире.
Какое ключевое преимущество Ed25519 перед ECDSA на secp256k1?
Скалярное умножение: из приватного - публичный
Вся криптография на эллиптических кривых строится на одной операции - **скалярное умножение точки**: имея число k (приватный ключ) и точку G (генератор), вычислить **Q = k * G** (публичный ключ). Результат - другая точка на кривой.
Но что значит «умножить число на точку»? Для этого нужны две базовые операции: 1. **Сложение точек (P + Q)** - геометрически: проводим прямую через P и Q, она пересекает кривую в третьей точке R', отражаем R' относительно оси x → получаем R = P + Q. 2. **Удвоение точки (P + P = 2P)** - проводим касательную к кривой в точке P, находим второе пересечение, отражаем.
Тогда k * G - это просто G + G + G + ... + G (k раз). Но если k = 10⁷⁷ (типичный приватный ключ), складывать точку саму с собой 10⁷⁷ раз - нереально. Здесь помогает **алгоритм double-and-add**.
**Генерация ключей в Bitcoin:** 1. Выбираем случайное число k (256 бит) - это **приватный ключ** 2. Вычисляем Q = k * G - это **публичный ключ** (точка на кривой) 3. Хешируем Q через SHA-256 + RIPEMD-160 → **Bitcoin-адрес** Вся операция занимает < 1 мс. А вот восстановить k из Q - вычислительно невозможно.
Приватный ключ k = 1 000 000. Сколько операций нужно алгоритму double-and-add для вычисления k * G?
ECDLP: почему нельзя найти k по k*G
Мы умеем быстро вычислить Q = k * G (~256 шагов). Но можно ли решить обратную задачу: зная Q и G, найти k? Это **ECDLP - Elliptic Curve Discrete Logarithm Problem** - задача, на которой держится безопасность всей криптографии на эллиптических кривых.
Ответ: **практически невозможно**. Лучший известный алгоритм для решения ECDLP - **Pollard's rho** - требует порядка $\sqrt{n}$ операций, где n - порядок группы. Для secp256k1 это $\sqrt{2^{256}} = 2^{128}$ операций.
**ECC vs RSA - сравнение стойкости:**
| Уровень безопасности | ECC (бит ключа) | RSA (бит ключа) | Соотношение |
|---|---|---|---|
| 80 бит | 160 | 1024 | 6.4x |
| 128 бит | 256 | 3072 | 12x |
| 256 бит | 512 | 15360 | 30x |
256-битный ECC-ключ даёт ту же безопасность, что и 3072-битный RSA. Компактные ключи = меньше данных в каждой транзакции = больше транзакций в блоке.
Почему ECDLP так трудна? В обычной арифметике: если 5 * 7 = 35, то 35 / 7 = 5. Но на эллиптической кривой нет операции «деления точки». Мы можем сложить G с собой k раз, но по результату Q **нельзя понять**, сколько раз складывали. Точки «перемешиваются» при каждом сложении непредсказуемым образом.
Аналогия: смешивание красок
Интуитивное объяснение односторонности ECDLP
Жёлтый + Синий = Зелёный Смешать легко: берёшь два цвета, получаешь третий. Разделить обратно? Невозможно. Зелёный не расскажет, сколько именно жёлтого и синего в нём было. ECC работает аналогично: k * G = Q Умножить (смешать) - быстро. Разделить (найти k по Q) - невозможно. Единственный способ: перебирать все возможные k и проверять, не совпадёт ли k*G с Q. Для 256-битного ключа - это 2^128 попыток.
**Квантовая угроза.** Алгоритм Шора на квантовом компьютере решает ECDLP за **полиномиальное время**. Для взлома secp256k1 понадобится квантовый компьютер с ~2500 логических кубитов. По оценкам 2025 года, это может стать реальностью к 2030-2035 годам. **Уже сейчас ведётся подготовка:** - NIST стандартизировал post-quantum алгоритмы (ML-KEM, ML-DSA) в 2024 - Ethereum исследует lattice-based подписи - Bitcoin-сообщество обсуждает миграцию на hash-based подписи (SPHINCS+)
Квантовые компьютеры уже могут взломать ECC, поэтому криптовалюты небезопасны
На начало 2026 года крупнейшие квантовые компьютеры имеют ~1000 физических кубитов. Для взлома secp256k1 алгоритмом Шора нужно ~2500 **логических** (безошибочных) кубитов, что требует миллионов физических. Реальная угроза - горизонт 2030-2035 годов, и индустрия уже готовится: NIST стандартизировал post-quantum алгоритмы, а блокчейн-проекты исследуют миграционные пути.
Ключевые идеи
- **secp256k1** (y² = x³ + 7) - кривая Bitcoin с прозрачными параметрами. Сатоши выбрал её вместо NIST-кривых из-за отсутствия подозрительных «seed»-констант
- **Curve25519** - кривая Бернштейна, спроектированная для безопасности по дизайну. X25519 для обмена ключами, Ed25519 для подписей - используется в Signal, SSH, TLS 1.3
- **Скалярное умножение** k * G вычисляется за ~256 шагов (double-and-add), превращая приватный ключ в публичный за миллисекунду
- **ECDLP** - обратная задача (найти k по Q = k * G) требует 2¹²⁸ операций классическим методом. Именно эта асимметрия, заложенная в уравнение y² = x³ + 7, позволяет одной миллисекунде вычислений защитить триллион долларов
Связанные темы
Эллиптические кривые - математическая основа для цифровых подписей, commitment-схем и продвинутой криптографии:
- Цифровые подписи — ECDSA (secp256k1) и EdDSA (Ed25519) строятся поверх операций на эллиптических кривых
- Commitment-схемы — Pedersen Commitment использует скалярное умножение на эллиптических кривых для сокрытия значений
- BLS-подписи — BLS использует pairing-friendly кривые (BLS12-381) - следующий уровень ECC с операцией спаривания
Вопросы для размышления
- Если квантовые компьютеры смогут решить ECDLP к 2035 году, какие шаги должен предпринять Bitcoin уже сейчас? Можно ли мигрировать на post-quantum алгоритмы без хардфорка?
- Почему Ethereum 2.0 перешёл с secp256k1 (ECDSA) на BLS12-381 для валидаторов, но оставил secp256k1 для пользовательских транзакций?
- При проектировании новой криптовалюты в 2026 году - какую кривую выбрать и почему: secp256k1, Ed25519 или сразу post-quantum?
Связанные уроки
- bc-06-digital-signatures — ECC provides the mathematical group for ECDSA; signature concepts must be understood first
- bc-10-bls — BLS signatures use pairing-friendly elliptic curves; ECC is the required foundation
- bc-13-kzg — KZG polynomial commitments use elliptic curve pairings; ECC math is prerequisite
- bc-02-hashing — Hash functions and ECC are the two cryptographic primitives used together in almost every blockchain operation
- crypto-26-ecc-math
- crypto-02-modular-arithmetic