Кривая secp256k1
secp256k1 — это эллиптическая кривая, определённая над конечным полем, используемая в криптографии на эллиптических кривых (ECC). Она является одной из стандартных кривых, рекомендованных для применения в системах цифровой подписи и обмена ключами, и получила широкое распространение благодаря использованию в криптовалютах, в первую очередь в биткойне. Кривая secp256k1 относится к семейству кривых, определённых в стандарте Standards for Efficient Cryptography (SEC) и является частью набора кривых, предложенных компанией Certicom.
Математическое определение
Кривая secp256k1 задаётся уравнением Вейерштрасса в аффинных координатах:
\[ y^2 = x^3 + ax + b \mod p \]
где параметры имеют следующие значения:
- \(a = 0\)
- \(b = 7\)
- \(p\) — простое число, равное \(2^{256} - 2^{32} - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1\), что в шестнадцатеричной записи соответствует \(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F\).
Таким образом, уравнение кривой принимает вид \(y^2 = x^3 + 7 \mod p\). Значение \(p\) является простым числом длиной 256 бит, что определяет размер поля, над которым определена кривая.
Группа точек
Множество точек эллиптической кривой secp256k1 вместе с бесконечно удалённой точкой (нейтральным элементом) образует абелеву группу относительно операции сложения точек. Порядок этой группы (количество точек на кривой) обозначается как \(n\) и равен \(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\). Это простое число, что делает кривую secp256k1 кривой с простым порядком, то есть все точки (кроме бесконечно удалённой) имеют порядок \(n\).
Генератор
Для криптографических целей выбирается базовая точка (генератор) \(G\), которая порождает всю группу. Координаты генератора:
- \(G_x = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798\)
- \(G_y = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8\)
История и стандартизация
Кривая secp256k1 была предложена в 2000 году в стандарте SEC 2 (Recommended Elliptic Curve Domain Parameters), опубликованном компанией Certicom. Стандарт SEC 2 определяет несколько кривых с различными длинами ключей, включая secp192k1, secp224k1, secp256k1, secp384r1 и secp521r1. Кривые с суффиксом «k1» (koblitz) отличаются тем, что их параметры \(a\) и \(b\) выбраны таким образом, чтобы уравнение кривой имело вид \(y^2 = x^3 + b\) (то есть \(a = 0\)), что упрощает вычисления и позволяет применять некоторые оптимизации.
В отличие от кривых семейства «r1» (random), параметры которых получены из псевдослучайных чисел, кривые «k1» используют простые константы, что снижает вероятность наличия скрытых уязвимостей, заложенных разработчиками. Кривая secp256k1 не является стандартом NIST (Национального института стандартов и технологий США), но широко используется в открытых криптографических системах.
Криптографические свойства
Стойкость
Стойкость криптосистем на основе secp256k1 основана на сложности задачи дискретного логарифма на эллиптической кривой (ECDLP). Для кривой с 256-битным порядком \(n\) сложность решения ECDLP оценивается примерно как \(2^{128}\) операций, что соответствует 128-битному уровню безопасности. Это означает, что для взлома ключа потребуется вычислительная мощность, недоступная современным компьютерам при разумных временных затратах.
Эффективность
Кривая secp256k1 оптимизирована для эффективной реализации. Благодаря тому, что \(a = 0\), сложение и удвоение точек требуют меньше операций умножения по модулю, чем для кривых с ненулевым \(a\). Это делает secp256k1 одной из самых быстрых кривых среди стандартных 256-битных кривых. Кроме того, простое число \(p\) имеет специальную форму, близкую к степени двойки, что позволяет использовать быстрые алгоритмы модульного умножения, такие как алгоритм Монтгомери.
Применение
Криптовалюты
Основное применение кривой secp256k1 — в криптовалютах на основе блокчейна. Впервые она была использована в биткойне, где применяется для генерации пар ключей (закрытого и открытого) и создания цифровых подписей по алгоритму ECDSA (Elliptic Curve Digital Signature Algorithm). Каждый адрес биткойна получается из открытого ключа, который, в свою очередь, вычисляется как точка на кривой secp256k1, полученная умножением закрытого ключа на генератор \(G\).
Другие криптовалюты, такие как эфириум, лайткойн, догкойн и многие другие, также используют secp256k1 для своих криптографических операций. В эфириуме, помимо ECDSA, кривая применяется в алгоритме восстановления открытого ключа по подписи (ecrecover).
Другие области
Хотя secp256k1 наиболее известна в контексте криптовалют, она может использоваться и в других криптографических протоколах, таких как:
- Протоколы обмена ключами (например, ECDH — Elliptic Curve Diffie-Hellman)
- Схемы шифрования на эллиптических кривых (ECIES — Elliptic Curve Integrated Encryption Scheme)
- Системы доказательств с нулевым разглашением (zero-knowledge proofs)
Однако в традиционных приложениях (например, в TLS) чаще применяются кривые NIST (secp256r1, secp384r1), которые имеют более широкую поддержку в стандартных библиотеках.
Реализации
Кривая secp256k1 реализована во многих криптографических библиотеках и программных продуктах:
- libsecp256k1 — эталонная реализация, разработанная командой Bitcoin Core. Написана на языке C с оптимизациями для различных архитектур (включая ARM и x86-64). Используется в большинстве клиентов биткойна.
- OpenSSL — начиная с версии 1.1.0, включает поддержку secp256k1.
- Bouncy Castle — криптографическая библиотека для Java и C#.
- Cryptography — библиотека для Python.
- eth-crypto — библиотека для JavaScript, используемая в экосистеме эфириума.
Критика и альтернативы
Кривая secp256k1 не лишена критики. Основные замечания касаются отсутствия официальной стандартизации со стороны NIST и возможных проблем с безопасностью, связанных с использованием кривых Коблица (koblitz). Кривые Коблица имеют свойство, что их порядок делится на 2, что может быть использовано в некоторых атаках, хотя для secp256k1 порядок простой, что исключает эту уязвимость.
Альтернативами secp256k1 являются:
- secp256r1 (NIST P-256) — кривая, рекомендованная NIST, с более сложными параметрами, но более широко поддерживаемая в стандартных протоколах.
- Curve25519 — кривая, предложенная Дэниелом Бернштейном, используемая в протоколах X25519 и Ed25519. Она обеспечивает более высокую производительность и устойчивость к некоторым атакам, но не поддерживает ECDSA напрямую.
- SM2 — китайский национальный стандарт, используемый в государственных системах.
Интересные факты
- Параметры secp256k1 были выбраны таким образом, чтобы минимизировать вероятность скрытых уязвимостей. В отличие от кривых NIST, где параметры получены из псевдослучайных чисел, здесь используются простые константы (0 и 7), что делает кривую «прозрачной» для проверки.
- Кривая secp256k1 является одной из немногих кривых, которые не были предложены NIST, но получили массовое распространение благодаря биткойну.
- В 2013 году исследователи обнаружили, что некоторые реализации secp256k1 в биткойне были уязвимы к атаке по сторонним каналам (timing attack), что привело к обновлению программного обеспечения.
Источники
- Certicom Research. «SEC 2: Recommended Elliptic Curve Domain Parameters». Version 2.0, 2010.
- Hankerson, D., Menezes, A., Vanstone, S. «Guide to Elliptic Curve Cryptography». Springer, 2004.
- Bitcoin Wiki. «Secp256k1». Доступно по ссылке: https://en.bitcoin.it/wiki/Secp256k1
- NIST. «Digital Signature Standard (DSS)». FIPS PUB 186-4, 2013.
- Bernstein, D. J. «Curve25519: New Diffie-Hellman Speed Records». 2006.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →