Введение в криптографию на эллиптических кривых

Криптография на эллиптических кривых строится на свойствах алгебраических кривых специального вида, заданных над конечными полями. Её ключевая идея заключается в том, что операции над точками на такой кривой легко выполняются в прямом направлении, но крайне трудно обращаются назад при отсутствии секретной информации.

Эллиптическая кривая в криптографическом контексте задаётся уравнением вида:

y² = x³ + ax + b

где коэффициенты a и b выбираются таким образом, чтобы кривая не имела вырожденных точек (дискриминант не равен нулю). Важно, что речь идёт не о геометрической эллиптической фигуре, а об алгебраической структуре, обладающей групповой операцией.

Набор точек на кривой вместе с дополнительной “точкой на бесконечности” образует абелеву группу. Это означает, что для любых двух точек P и Q определена операция сложения P + Q, а также существует нейтральный элемент и обратные элементы.

Геометрическая интерпретация сложения точек выглядит следующим образом:

  • проводится прямая через две точки P и Q,
  • она пересекает кривую в третьей точке,
  • отражение этой точки относительно оси X даёт результат P + Q.

Эта операция, несмотря на свою геометрическую формулировку, реализуется алгебраически и хорошо определена для вычислений в конечных полях.

Скаляры и повторное сложение

Ключевым механизмом криптографии на эллиптических кривых является операция скалярного умножения:

k · P = P + P + … + P (k раз)

где k — целое число, а P — точка на кривой.

Скалярное умножение выполняется эффективно с помощью алгоритмов типа double-and-add, но обратная задача — нахождение k по известным P и k·P — является вычислительно сложной.

Именно эта асимметрия лежит в основе безопасности ECC.

Задача дискретного логарифма на эллиптических кривых

Безопасность криптографии на эллиптических кривых основана на задаче дискретного логарифма:

При известных P и Q = k·P необходимо найти k.

Эта задача называется ECDLP (Elliptic Curve Discrete Logarithm Problem). В отличие от классического дискретного логарифма в конечных полях, для эллиптических кривых не существует известных субэкспоненциальных алгоритмов общего вида, что делает такие системы значительно более эффективными при меньших размерах ключей.

Ключи в ECC

В криптографии на эллиптических кривых используются пары ключей:

  • приватный ключ: случайное число k
  • публичный ключ: точка Q = k·G

где G — фиксированная базовая точка (генератор группы), определённая параметрами выбранной кривой.

Публичный ключ представляет собой точку на кривой, а приватный — скалярное значение, которое должно оставаться в секрете.

Основные стандартизованные кривые

В практических реализациях используются заранее определённые кривые, прошедшие криптографический анализ:

  • P-256 (secp256r1)
  • P-384
  • P-521

Эти кривые определены над простыми конечными полями и широко применяются в протоколах TLS, цифровых подписях и обмене ключами.

Выбор кривой влияет на баланс между производительностью и уровнем безопасности. Например, P-256 обеспечивает сопоставимую стойкость с RSA-3072 при существенно меньших размерах ключей.

Преимущества по сравнению с классическими схемами

Криптография на эллиптических кривых обладает рядом особенностей, определяющих её широкое применение:

  • меньшие размеры ключей при эквивалентной стойкости
  • более высокая производительность операций
  • снижение нагрузки на сеть при передаче ключей
  • экономия ресурсов в ограниченных устройствах

Эти свойства особенно важны для мобильных устройств, IoT и высоконагруженных систем.

Алгоритмические задачи в ECC

На практике ECC используется не напрямую, а через протоколы:

  • ECDH (Elliptic Curve Diffie-Hellman) — обмен ключами
  • ECDSA (Elliptic Curve Digital Signature Algorithm) — цифровые подписи

ECDH позволяет двум сторонам выработать общий секрет, не передавая его напрямую. Каждая сторона комбинирует свой приватный ключ с публичным ключом другой стороны, получая одинаковый результат благодаря свойствам скалярного умножения.

ECDSA обеспечивает механизм проверки подлинности сообщений. Подпись формируется с использованием приватного ключа и случайного числа, а проверка выполняется с использованием публичного ключа.

Web Crypto API и работа с эллиптическими кривыми

В браузерной криптографии ECC реализуется через Web Crypto API, где алгоритмы задаются через параметр namedCurve.

Основные поддерживаемые варианты:

  • P-256
  • P-384
  • P-521

Генерация ключевой пары выполняется через интерфейс:

crypto.subtle.generateKey(
  {
    name: "ECDH",
    namedCurve: "P-256"
  },
  true,
  ["deriveKey", "deriveBits"]
);

Для ECDSA:

crypto.subtle.generateKey(
  {
    name: "ECDSA",
    namedCurve: "P-256"
  },
  true,
  ["sign", "verify"]
);

Публичный ключ может быть экспортирован в формате SPKI, приватный — в PKCS#8, что соответствует стандартам X.509.

Обмен ключами через ECDH

Процесс обмена ключами в ECC основан на вычислении общего секрета:

  • одна сторона использует свой приватный ключ и публичный ключ партнёра
  • вторая сторона выполняет аналогичную операцию
  • результат совпадает благодаря свойствам групповой операции на кривой

В Web Crypto API это реализуется через deriveBits или deriveKey.

Подписи ECDSA

Алгоритм ECDSA использует хэширование сообщения и математические свойства кривой для формирования подписи, состоящей из двух значений (r, s). Проверка подписи подтверждает, что сообщение было подписано владельцем соответствующего приватного ключа.

Важным аспектом является качество генерации случайного числа k, используемого при подписи. Его повторное использование или предсказуемость приводит к полной компрометации приватного ключа.

Безопасность и криптографические допущения

Безопасность ECC основана на нескольких предположениях:

  • сложность задачи дискретного логарифма на эллиптических кривых
  • корректный выбор параметров кривой
  • отсутствие структурных уязвимостей в конкретной кривой
  • криптографически стойкая генерация случайных чисел

Любые ошибки в реализации генератора случайных чисел или неправильное использование API могут свести на нет математическую стойкость системы.

Особенности конечных полей

В практических реализациях кривые определяются над конечными полями вида:

Fp, где p — большое простое число

Все операции выполняются по модулю p. Это делает множество точек конечным, а вычисления — полностью дискретными.

Такая структура позволяет эффективно реализовывать криптографические алгоритмы в программном и аппаратном обеспечении.

Сравнение с RSA с точки зрения структуры безопасности

RSA основан на факторизации больших чисел, тогда как ECC опирается на дискретный логарифм в группе точек.

При сопоставимом уровне безопасности:

  • ECC требует меньших ключей
  • операции быстрее на мобильных устройствах
  • снижена нагрузка на память и сеть

Однако реализация ECC требует более строгого соблюдения математических деталей и аккуратной работы с параметрами кривых.

Роль стандартизации

Использование заранее определённых кривых в Web Crypto API связано с необходимостью исключить небезопасные или слабые параметры. Нестандартизованные кривые могут содержать скрытые уязвимости или быть плохо изученными с точки зрения криптоанализа.

Стандартизация обеспечивает совместимость между браузерами и криптографическими библиотеками, а также снижает риск ошибок конфигурации.