Блокчейн

Эллиптические кривые (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. Подход «безопасность по дизайну» изменил всю индустрию.

Предварительные знания

  • Digital Signatures: ECDSA and EdDSA

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 бит16010246.4x
128 бит256307212x
256 бит5121536030x

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
Эллиптические кривые (ECC)

0

1

Войти

Медиа часто путают «физические кубиты» и «логические кубиты». Каждый логический кубит требует ~1000 физических для коррекции ошибок. Это создаёт разрыв между заголовками новостей и реальными возможностями квантовых компьютеров.

Публичный ключ Q и генератор G известны. Какова сложность нахождения приватного ключа k на secp256k1?