Открыть сервис

secp256k1

secp256k1 — это эллиптическая кривая, определённая в стандарте Standards for Efficient Cryptography (SEC) и широко используемая в криптографии, в первую очередь в алгоритмах цифровой подписи и протоколах децентрализованных систем. Относится к классу кривых над простыми полями (prime curves) и характеризуется простотой реализации, высокой производительностью и детерминированным выбором параметров, что делает её особенно популярной в блокчейн-технологиях.

История и происхождение

Стандарт SEC был разработан компанией Certicom (США) в 2000 году как набор рекомендаций для использования эллиптических кривых в криптографии. Кривая secp256k1 была одной из нескольких кривых, описанных в документе SEC 2: Recommended Elliptic Curve Domain Parameters. В отличие от многих других кривых, предложенных Национальным институтом стандартов и технологий США (NIST), параметры secp256k1 были выбраны детерминированно — на основе хеш-функции SHA-1, что исключало возможность скрытого ослабления кривой со стороны разработчиков.

Долгое время secp256k1 оставалась малоизвестной и редко применялась на практике. Ситуация изменилась в 2009 году, когда Сатоси Накамото выбрал эту кривую для реализации алгоритма цифровой подписи ECDSA в протоколе биткоина. Причинами выбора стали:

  • Детерминированный генератор параметров (отсутствие подозрений о «чёрном ходе»).
  • Высокая производительность при вычислениях на 256-битных полях.
  • Отсутствие патентных ограничений (кривая не была запатентована).

С ростом популярности биткоина secp256k1 стала стандартом де-факто для многих криптовалют и блокчейн-платформ.

Математические основы

Определение кривой

secp256k1 задаётся уравнением Вейерштрасса в аффинных координатах:

y² = x³ + 7 (mod p)

где pпростое число, равное:

p = 2²⁵⁶ − 2³² − 2⁹ − 2⁸ − 2⁷ − 2⁶ − 2⁴ − 1

В десятичной записи: p = 115792089237316195423570985008687907853269984665640564039457584007908834671663

Параметры кривой

Кривая определяется набором доменных параметров (domain parameters):

ПараметрЗначениеОписание
p115792089237316195423570985008687907853269984665640564039457584007908834671663Простое число, модуль поля
a0Коэффициент уравнения (x³ + ax + b)
b7Коэффициент уравнения
G(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)Базовая точка (генератор)
n115792089237316195423570985008687907852837564279074904382605163141518161494337Порядок группы (простое число)
h1Кофактор (отношение порядка группы к порядку подгруппы)

Свойства

  • Размер ключа: 256 бит (32 байта) для закрытого ключа, 512 бит (64 байта) для открытого ключа в несжатом формате.
  • Стойкость: 128 бит (эквивалентна симметричному шифрованию с ключом 128 бит).
  • Кофактор h=1: означает, что порядок группы равен порядку подгруппы, что упрощает вычисления и исключает некоторые атаки.
  • Кривая является k-1 кривой: константа b равна 7, что делает её одной из немногих стандартных кривых с таким малым значением.

Криптографические применения

Алгоритм цифровой подписи ECDSA

Основное применение secp256k1 — реализация алгоритма ECDSA (Elliptic Curve Digital Signature Algorithm). Процесс подписи и проверки включает:

  1. Генерация ключей: закрытый ключ — случайное число от 1 до n-1; открытый ключ — результат умножения закрытого ключа на базовую точку G.
  2. Подписание: хеш сообщения подписывается с использованием закрытого ключа и случайного числа (nonce).
  3. Проверка: открытый ключ и подпись позволяют проверить, что подпись была создана владельцем соответствующего закрытого ключа.

Протоколы на основе secp256k1

  • Биткоин: используется для создания адресов и подписи транзакций. Каждый биткоин-адрес является хешем открытого ключа, полученного на secp256k1.
  • Эфириум: также использует secp256k1 для подписи транзакций и создания аккаунтов.
  • Другие криптовалюты: Litecoin, Dogecoin, Monero (до перехода на Ed25519), Zcash и многие другие.
  • Протоколы второго уровня: Lightning Network, протоколы атомарных свопов, мультиподписи.

Другие применения

  • Системы аутентификации: некоторые VPN-протоколы и системы управления ключами (например, OpenPGP) поддерживают secp256k1.
  • Децентрализованные приложения (dApps): смарт-контракты в Эфириуме используют secp256k1 для верификации подписей.
  • Схемы разделения секрета: некоторые реализации Shamir’s Secret Sharing используют secp256k1.

Преимущества и недостатки

Преимущества

  • Высокая производительность: вычисления на 256-битном поле выполняются быстро на современном оборудовании.
  • Детерминированный выбор параметров: отсутствие подозрений о скрытых уязвимостях, в отличие от кривых NIST.
  • Поддержка в аппаратном обеспечении: многие криптографические чипы и кошельки оптимизированы для secp256k1.
  • Большое сообщество: обширная документация, библиотеки (libsecp256k1, OpenSSL, Botan) и инструменты.

Недостатки

  • Отсутствие поддержки парных вычислений (pairing): secp256k1 не является кривой с парным отображением, что ограничивает её применение в некоторых продвинутых протоколах (например, zk-SNARKs).
  • Меньшая стандартизация: в отличие от кривых NIST (P-256, P-384), secp256k1 не включена в стандарты FIPS, что может быть проблемой для государственных систем.
  • Уязвимость к квантовым атакам: как и все кривые на основе эллиптических кривых, secp256k1 будет взломана при появлении достаточно мощного квантового компьютера (алгоритм Шора).

Реализации и библиотеки

Наиболее известная и широко используемая реализация — libsecp256k1, написанная на языке C и поддерживаемая разработчиками биткоина. Эта библиотека обеспечивает:

  • Высокую производительность (оптимизированные ассемблерные вставки для x86_64).
  • Поддержку различных форматов ключей (сжатые, несжатые).
  • Реализацию ECDSA, а также схем подписи Schnorr (BIP340).
  • Защиту от атак по сторонним каналам.

Другие популярные реализации:

  • OpenSSL (начиная с версии 1.1.0).
  • Botan (кроссплатформенная библиотека).
  • Bouncy Castle (Java).
  • Elliptic (Node.js).
  • secp256k1-py (Python, обёртка над libsecp256k1).

Критика и альтернативы

Основная критика secp256k1 связана с её происхождением: хотя параметры детерминированы, сама кривая была предложена компанией Certicom, которая в прошлом активно патентовала криптографические алгоритмы. Однако в настоящее время все патенты на secp256k1 истекли.

В последние годы наблюдается тенденция перехода на кривые Эдвардса (Ed25519) и кривые Монтгомери (X25519) из-за их более высокой производительности и устойчивости к определённым атакам. Например, Monero и некоторые другие проекты перешли с secp256k1 на Ed25519. Тем не менее, secp256k1 остаётся доминирующей кривой в блокчейн-экосистеме благодаря огромной установленной базе и совместимости с существующими протоколами.

Перспективы

С развитием квантовых вычислений secp256k1, как и все классические криптосистемы на эллиптических кривых, будет заменена на постквантовые алгоритмы. Однако в ближайшие 10–20 лет она останется основой безопасности большинства криптовалют. Кроме того, ведутся работы по интеграции secp256k1 в протоколы с нулевым разглашением (например, через использование специальных доказательств), что может расширить её применение.

Источники

  • Certicom Research. "SEC 2: Recommended Elliptic Curve Domain Parameters". Version 2.0, 2010.
  • Nakamoto, S. "Bitcoin: A Peer-to-Peer Electronic Cash System". 2008.
  • National Institute of Standards and Technology (NIST). "FIPS 186-5: Digital Signature Standard (DSS)". 2023.
  • Pieter Wuille. "libsecp256k1: Optimized C library for EC operations on curve secp256k1". GitHub repository.
  • Bernstein, D.J. et al. "Ed25519: high-speed high-security signatures". 2011.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →