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

Подпись 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, которая включает три этапа: генерация ключей, создание подписи и верификация.

Генерация ключей

  1. Закрытый ключ (private key) — это случайная 256-битная последовательность (32 байта). Она генерируется криптографически стойким генератором случайных чисел.
  2. Из закрытого ключа с помощью хеш-функции SHA-512 вычисляется хеш \(H(k)\). Первые 32 байта хеша используются для вычисления открытого ключа: они «скручиваются» (clamping) — обнуляются младшие 3 бита, устанавливается второй старший бит в 1, а старший бит в 0. Это обеспечивает корректность работы с кривой.
  3. Полученное 256-битное число \(a\) умножается на базовую точку \(B\): \(A = a \cdot B\). Результат — открытый ключ (public key) размером 32 байта (только координата \(y\) со знаком бита чётности).

Создание подписи

Для подписи сообщения \(M\) (произвольной длины) выполняются следующие шаги:

  1. Из хеша \(H(k)\) берутся оставшиеся 32 байта (после первых 32) — это секретное значение \(r\).
  2. Вычисляется \(r = H(r \| M)\), где \(H\) — SHA-512, а \(\|\) — конкатенация. Это даёт детерминированное, но непредсказуемое значение для каждого сообщения.
  3. Вычисляется точка \(R = r \cdot B\).
  4. Вычисляется хеш \(H(R \| A \| M)\), где \(A\) — открытый ключ. Результат интерпретируется как число \(S\).
  5. Вычисляется \(S = r + a \cdot H(R \| A \| M) \mod l\).
  6. Подпись состоит из пары \((R, S)\), где \(R\) — 32 байта (координата \(y\) точки), \(S\) — 32 байта (целое число). Общий размер подписи — 64 байта.

Верификация

Проверка подписи \((R, S)\) для сообщения \(M\) и открытого ключа \(A\):

  1. Вычисляется \(H(R \| A \| M)\).
  2. Проверяется равенство: \(S \cdot B = R + H(R \| A \| M) \cdot A\).
  3. Если равенство выполняется, подпись считается действительной. В противном случае — подпись недействительна.

Характеристики

Размеры ключей и подписи

  • Закрытый ключ: 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 для создания аппаратных ключей безопасности.

Сравнение с другими алгоритмами

ПараметрEd25519ECDSA (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 →