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

RFC 7748

RFC 7748 — это документ Интернет-инженерной целевой группы (IETF), озаглавленный «Эллиптические кривые для безопасности» (Elliptic Curves for Security). Он определяет два конкретных эллиптических криптографических набора параметров: Curve25519 и Curve448, предназначенных для использования в протоколах обмена ключами и цифровых подписей. RFC 7748 был опубликован в январе 2016 года и представляет собой стандарт, призванный обеспечить высокую производительность и устойчивость к атакам по сторонним каналам.

История создания

Разработка RFC 7748 была мотивирована необходимостью в современных, безопасных и эффективных криптографических примитивах. К началу 2010-х годов стало очевидно, что широко используемые кривые, такие как NIST P-256, имеют ряд недостатков, включая сложность реализации, уязвимость к атакам по времени и подозрения в возможном наличии «чёрных ходов» (backdoors) от Агентства национальной безопасности США.

Основой для Curve25519 послужила работа американского криптографа Дэниела Бернстайна, который в 2006 году представил Curve25519 как высокоскоростную кривую для обмена ключами по схеме Диффи — Хеллмана. Curve448 была разработана Майком Хэмбургом из компании Google на основе идей Бернстайна, но с более высоким уровнем безопасности (224-битный эквивалент). RFC 7748 систематизировал эти наработки, унифицировал параметры и предоставил строгие спецификации для реализации.

Основные параметры

RFC 7748 определяет два набора параметров, каждый из которых включает эллиптическую кривую, базовую точку и порядок группы.

Curve25519

  • Название: Curve25519 (также известна как X25519).
  • Тип кривой: Монтгомери (Montgomery curve) вида \( v^2 = u^3 + 486662u^2 + u \).
  • Поле: Простое поле \( GF(p) \), где \( p = 2^{255} - 19 \).
  • Порядок кривой: \( 8 \cdot q \), где \( q \) — простое число ( \( 2^{252} + 27742317777372353535851937790883648493 \) ).
  • Кофактор: 8.
  • Базовая точка: \( u = 9 \).
  • Уровень безопасности: 128 бит (эквивалент симметричного шифра AES-128).

Curve448

  • Название: Curve448 (также известна как X448).
  • Тип кривой: Монтгомери вида \( v^2 = u^3 + 156326u^2 + u \).
  • Поле: Простое поле \( GF(p) \), где \( p = 2^{448} - 2^{224} - 1 \).
  • Порядок кривой: \( 4 \cdot q \), где \( q \) — простое число.
  • Кофактор: 4.
  • Базовая точка: \( u = 5 \).
  • Уровень безопасности: 224 бита (эквивалент AES-224).

Применение

RFC 7748 нашёл широкое применение в современных протоколах безопасности, где требуется высокая производительность и устойчивость к атакам.

Обмен ключами

Основное применение — протокол обмена ключами Диффи — Хеллмана на эллиптических кривых (ECDH). В RFC 7748 описаны алгоритмы X25519 и X448, которые реализуют этот протокол. Они используются в:

  • TLS 1.3: Протокол транспортного уровня (Transport Layer Security) версии 1.3 включает Curve25519 и Curve448 в качестве обязательных для реализации наборов параметров для обмена ключами.
  • SSH: Протокол Secure Shell (SSH) поддерживает X25519 и X448 для установления защищённого соединения.
  • IPsec: Протокол безопасности интернет-протокола (IPsec) также может использовать эти кривые для обмена ключами.
  • Signal Protocol: Протокол сквозного шифрования, используемый в мессенджерах Signal, WhatsApp (продукт Meta, признанной экстремистской и запрещённой в РФ) и других, базируется на Curve25519.

Цифровые подписи

Хотя RFC 7748 напрямую не определяет алгоритмы подписей, Curve25519 и Curve448 часто используются в комбинации с алгоритмом EdDSA (Edwards-curve Digital Signature Algorithm), который описан в RFC 8032. Ed25519 (на основе Curve25519) и Ed448 (на основе Curve448) являются стандартными алгоритмами подписей.

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

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

  • Высокая производительность: Кривые Монтгомери позволяют реализовать скалярное умножение (основную операцию в ECDH) без вычисления координаты \( v \), что значительно ускоряет вычисления. Curve25519 особенно быстра на современных процессорах.
  • Устойчивость к атакам по времени: RFC 7748 требует, чтобы все реализации были «константными по времени» (constant-time), то есть время выполнения не зависело от секретных данных. Это делает их устойчивыми к атакам по сторонним каналам.
  • Простота реализации: Параметры кривых выбраны так, чтобы минимизировать сложность реализации. Например, простое число \( 2^{255} - 19 \) позволяет эффективно использовать арифметику с плавающей точкой и SIMD-инструкции.
  • Отсутствие подозрений в «чёрных ходах»: В отличие от кривых NIST, параметры Curve25519 и Curve448 были выбраны открыто и прозрачно, что снижает риск наличия скрытых уязвимостей.

Критика

  • Ограниченная гибкость: RFC 7748 определяет только два набора параметров, что может быть недостаточно для некоторых специализированных приложений (например, для криптографии на основе пар).
  • Кофактор: Наличие кофактора (8 для Curve25519 и 4 для Curve448) требует осторожности при реализации протоколов, чтобы избежать атак с малыми подгруппами.
  • Совместимость: Некоторые устаревшие системы не поддерживают эти кривые, что может потребовать использования дополнительных протоколов для обратной совместимости.

Статус и стандартизация

RFC 7748 является предложенным стандартом (Proposed Standard) IETF. Он был одобрен и опубликован в 2016 году. В 2017 году Национальный институт стандартов и технологий США (NIST) включил Curve25519 и Curve448 в проект обновления стандарта SP 800-186, что подтверждает их признание в криптографическом сообществе. В России эти кривые не являются обязательными для использования в государственных информационных системах, где применяются национальные стандарты ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012, однако они могут использоваться в коммерческих и международных продуктах.

Интересные факты

  • Название «Curve25519» происходит от простого числа \( 2^{255} - 19 \), которое является основой поля.
  • Дэниел Бернстайн, автор Curve25519, намеренно выбрал простое число \( 2^{255} - 19 \), так как оно позволяет выполнять модульное умножение без использования дорогостоящих операций деления.
  • Curve448 была разработана для обеспечения 224-битного уровня безопасности, что делает её подходящей для приложений, требующих более высокой стойкости, чем 128-битная.
  • RFC 7748 включает в себя подробные тестовые векторы для проверки корректности реализации, что упрощает разработку и тестирование.

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

На главную BFOmetr →