Подпись Ed25519
Ed25519 — это алгоритм электронной цифровой подписи (ЭЦП), основанный на эллиптической кривой Curve25519 и использующий схему подписи EdDSA (Edwards-curve Digital Signature Algorithm). Он относится к классу асимметричных криптографических алгоритмов, обеспечивающих аутентификацию, целостность и неотказуемость данных. Ed25519 отличается высокой производительностью, устойчивостью к атакам по сторонним каналам и компактным размером ключей и подписей, что делает его одним из наиболее распространённых алгоритмов в современных криптографических системах.
История
Алгоритм Ed25519 был разработан в 2011 году американским криптографом Дэниелом Бернштейном (Daniel J. Bernstein) совместно с коллегами Нильсом Дюфом (Niels Duif), Таньей Ланге (Tanja Lange), Питером Швабе (Peter Schwabe) и Бо-Инь Янгом (Bo-Yin Yang). Основой для алгоритма послужила эллиптическая кривая Curve25519, предложенная Бернштейном в 2006 году для протокола обмена ключами X25519. Curve25519 представляет собой кривую Монтгомери, однако для реализации подписи Бернштейн преобразовал её в кривую Эдвардса (Edwards curve), что дало преимущества в скорости и безопасности.
В 2012 году алгоритм был стандартизирован в документе IETF RFC 8032 «Edwards-Curve Digital Signature Algorithm (EdDSA)», где Ed25519 стал одним из двух вариантов EdDSA (второй — Ed448). С тех пор Ed25519 активно внедряется в операционные системы (Linux, OpenBSD), протоколы (SSH, TLS 1.3), криптографические библиотеки (OpenSSL, libsodium) и блокчейн-системы (например, Bitcoin, Ethereum, Cardano).
Математические основы
Ed25519 базируется на эллиптической кривой, заданной уравнением в форме Эдвардса:
\[ -x^2 + y^2 = 1 + d \cdot x^2 \cdot y^2 \]
где \(d = -121665/121666\) (в поле простого порядка \(p = 2^{255} - 19\)). Кривая определена над конечным полем \(F_p\), где \(p\) — простое число, равное \(2^{255} - 19\). Это значение выбрано для оптимизации вычислений: оно позволяет эффективно реализовать арифметику в поле, используя 255-битные числа.
Базовой точкой (генератором) \(B\) является точка с координатами:
- \(x = 15112221349535890701277615253407397429919981488210819940385139540922218472520\)
- \(y = 46316835694926478169428394003475163141307993866256225615783033603165251855960\)
Порядок базовой точки \(l\) равен \(2^{252} + 27742317777372353535851937790883648493\) — это простое число, что обеспечивает устойчивость к атакам на основе дискретного логарифма.
Схема подписи
Ed25519 реализует схему EdDSA, которая включает три этапа: генерация ключей, создание подписи и верификация.
Генерация ключей
- Закрытый ключ (private key) — это случайная 256-битная последовательность (32 байта). Она генерируется криптографически стойким генератором случайных чисел.
- Из закрытого ключа с помощью хеш-функции SHA-512 вычисляется хеш \(H(k)\). Первые 32 байта хеша используются для вычисления открытого ключа: они «скручиваются» (clamping) — обнуляются младшие 3 бита, устанавливается второй старший бит в 1, а старший бит в 0. Это обеспечивает корректность работы с кривой.
- Полученное 256-битное число \(a\) умножается на базовую точку \(B\): \(A = a \cdot B\). Результат — открытый ключ (public key) размером 32 байта (только координата \(y\) со знаком бита чётности).
Создание подписи
Для подписи сообщения \(M\) (произвольной длины) выполняются следующие шаги:
- Из хеша \(H(k)\) берутся оставшиеся 32 байта (после первых 32) — это секретное значение \(r\).
- Вычисляется \(r = H(r \| M)\), где \(H\) — SHA-512, а \(\|\) — конкатенация. Это даёт детерминированное, но непредсказуемое значение для каждого сообщения.
- Вычисляется точка \(R = r \cdot B\).
- Вычисляется хеш \(H(R \| A \| M)\), где \(A\) — открытый ключ. Результат интерпретируется как число \(S\).
- Вычисляется \(S = r + a \cdot H(R \| A \| M) \mod l\).
- Подпись состоит из пары \((R, S)\), где \(R\) — 32 байта (координата \(y\) точки), \(S\) — 32 байта (целое число). Общий размер подписи — 64 байта.
Верификация
Проверка подписи \((R, S)\) для сообщения \(M\) и открытого ключа \(A\):
- Вычисляется \(H(R \| A \| M)\).
- Проверяется равенство: \(S \cdot B = R + H(R \| A \| M) \cdot A\).
- Если равенство выполняется, подпись считается действительной. В противном случае — подпись недействительна.
Характеристики
Размеры ключей и подписи
- Закрытый ключ: 32 байта (256 бит).
- Открытый ключ: 32 байта (256 бит).
- Подпись: 64 байта (512 бит).
Производительность
Ed25519 значительно быстрее традиционных алгоритмов, таких как RSA (с длиной ключа 2048 бит) и ECDSA (на кривой secp256k1). По данным бенчмарков (например, в библиотеке libsodium), генерация подписи Ed25519 занимает около 0,1–0,2 миллисекунды на современных процессорах, а верификация — около 0,05–0,1 миллисекунды. Это достигается за счёт оптимизированной арифметики в поле \(2^{255} - 19\) и использования кривой Эдвардса, которая позволяет избежать дорогостоящих операций инверсии.
Безопасность
- Стойкость: Эквивалентна 128-битному уровню безопасности (по классификации NIST). Для взлома требуется решить задачу дискретного логарифма на эллиптической кривой, что при современном уровне развития вычислительной техники считается практически невозможным.
- Устойчивость к атакам: Ed25519 детерминирован (подпись для одного и того же сообщения и ключа всегда одинакова), что исключает атаки, связанные с утечкой случайных чисел (например, атака на ECDSA с повторным использованием \(k\)). Алгоритм также устойчив к атакам по сторонним каналам (timing attacks, power analysis) благодаря постоянному времени выполнения операций.
- Квантовая устойчивость: Как и все классические алгоритмы на эллиптических кривых, Ed25519 уязвим перед квантовыми компьютерами (алгоритм Шора), но в настоящее время квантовые компьютеры, способные взломать 256-битные кривые, не существуют.
Применение
Ed25519 широко используется в различных областях информационной безопасности:
- Протокол SSH: Начиная с OpenSSH 6.5 (2014 год), Ed25519 поддерживается как один из алгоритмов для аутентификации по ключу. Ключи Ed25519 короче и быстрее, чем RSA или ECDSA.
- TLS 1.3: В стандарте RFC 8446 (2018 год) Ed25519 включён в список поддерживаемых алгоритмов для цифровых подписей в сертификатах и обмене ключами.
- Блокчейн и криптовалюты: Многие блокчейн-платформы (например, Stellar, Cardano, Solana) используют Ed25519 для подписи транзакций. В Bitcoin и Ethereum Ed25519 не применяется напрямую, но используется в некоторых решениях второго уровня (например, Lightning Network).
- Операционные системы: В Linux (начиная с ядра 4.15) и OpenBSD Ed25519 используется для подписи пакетов и модулей ядра.
- Криптографические библиотеки: libsodium (рекомендуемая библиотека для Ed25519), OpenSSL (с версии 1.1.1), NaCl, Bouncy Castle.
- Системы управления версиями: Git поддерживает подписи коммитов с помощью Ed25519 (через OpenSSH или GPG).
- Аутентификация в веб-приложениях: Протокол WebAuthn (FIDO2) поддерживает Ed25519 для создания аппаратных ключей безопасности.
Сравнение с другими алгоритмами
| Параметр | Ed25519 | ECDSA (secp256k1) | RSA (2048 бит) |
|---|---|---|---|
| Размер открытого ключа | 32 байта | 33 байта (сжатый) | 256 байт |
| Размер подписи | 64 байта | 64–72 байта | 256 байт |
| Время генерации подписи | ~0,1 мс | ~0,2 мс | ~5 мс |
| Время верификации | ~0,05 мс | ~0,1 мс | ~0,5 мс |
| Устойчивость к атакам по сторонним каналам | Высокая | Средняя | Средняя |
| Детерминированность | Да | Нет (требуется случайный \(k\)) | Да |
Критика и ограничения
- Несовместимость с некоторыми стандартами: Ed25519 не поддерживается в старых версиях TLS (до 1.3) и некоторых криптографических библиотеках (например, в стандартной библиотеке Java до версии 15).
- Отсутствие поддержки в некоторых аппаратных модулях: Многие аппаратные модули безопасности (HSM) и смарт-карты не поддерживают Ed25519, что ограничивает его применение в корпоративных средах.
- Потенциальная уязвимость к атакам на основе квантовых вычислений: Как и все алгоритмы на эллиптических кривых, Ed25519 может быть взломан квантовым компьютером с достаточным количеством кубитов.
- Сложность реализации: Несмотря на простоту схемы, корректная реализация Ed25519 требует учёта множества деталей (например, «скручивание» ключа, проверка точек на кривой), что может привести к ошибкам безопасности.
Интересные факты
- Название «Ed25519» происходит от «Edwards curve» (Эдвардса) и «25519» — от числа \(2^{255} - 19\).
- Алгоритм Ed25519 был разработан в рамках проекта «NaCl» (Networking and Cryptography library), который ставил целью создание простых и безопасных криптографических примитивов.
- В 2020 году Национальный институт стандартов и технологий США (NIST) включил Ed25519 в свой проект стандарта SP 800-186 «Recommendations for Discrete Logarithm-based Cryptography: Elliptic Curve Domain Parameters».
- В России Ed25519 не входит в перечень стандартизированных алгоритмов ГОСТ Р 34.10-2012, однако может использоваться в коммерческих и открытых проектах.
Источники
- Bernstein, D. J., Duif, N., Lange, T., Schwabe, P., & Yang, B. Y. (2012). High-speed high-security signatures. Journal of Cryptographic Engineering, 2(2), 77–89.
- RFC 8032 — Edwards-Curve Digital Signature Algorithm (EdDSA). IETF, 2017.
- Bernstein, D. J. (2006). Curve25519: New Diffie-Hellman Speed Records. Public Key Cryptography – PKC 2006, 207–228.
- libsodium documentation — Ed25519 signatures. https://doc.libsodium.org/public-key_cryptography/public-key_signatures
- OpenSSH release notes (2014). OpenSSH 6.5. https://www.openssh.com/txt/release-6.5
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →