Криптография на эллиптических кривых строится на свойствах алгебраических кривых специального вида, заданных над конечными полями. Её ключевая идея заключается в том, что операции над точками на такой кривой легко выполняются в прямом направлении, но крайне трудно обращаются назад при отсутствии секретной информации.
Эллиптическая кривая в криптографическом контексте задаётся уравнением вида:
y² = x³ + ax + b
где коэффициенты a и b выбираются таким образом, чтобы кривая не имела вырожденных точек (дискриминант не равен нулю). Важно, что речь идёт не о геометрической эллиптической фигуре, а об алгебраической структуре, обладающей групповой операцией.
Набор точек на кривой вместе с дополнительной “точкой на бесконечности” образует абелеву группу. Это означает, что для любых двух точек P и Q определена операция сложения 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). В отличие от классического дискретного логарифма в конечных полях, для эллиптических кривых не существует известных субэкспоненциальных алгоритмов общего вида, что делает такие системы значительно более эффективными при меньших размерах ключей.
В криптографии на эллиптических кривых используются пары ключей:
где G — фиксированная базовая точка (генератор группы), определённая параметрами выбранной кривой.
Публичный ключ представляет собой точку на кривой, а приватный — скалярное значение, которое должно оставаться в секрете.
В практических реализациях используются заранее определённые кривые, прошедшие криптографический анализ:
Эти кривые определены над простыми конечными полями и широко применяются в протоколах TLS, цифровых подписях и обмене ключами.
Выбор кривой влияет на баланс между производительностью и уровнем безопасности. Например, P-256 обеспечивает сопоставимую стойкость с RSA-3072 при существенно меньших размерах ключей.
Криптография на эллиптических кривых обладает рядом особенностей, определяющих её широкое применение:
Эти свойства особенно важны для мобильных устройств, IoT и высоконагруженных систем.
На практике ECC используется не напрямую, а через протоколы:
ECDH позволяет двум сторонам выработать общий секрет, не передавая его напрямую. Каждая сторона комбинирует свой приватный ключ с публичным ключом другой стороны, получая одинаковый результат благодаря свойствам скалярного умножения.
ECDSA обеспечивает механизм проверки подлинности сообщений. Подпись формируется с использованием приватного ключа и случайного числа, а проверка выполняется с использованием публичного ключа.
В браузерной криптографии ECC реализуется через Web Crypto API, где
алгоритмы задаются через параметр namedCurve.
Основные поддерживаемые варианты:
P-256P-384P-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.
Процесс обмена ключами в ECC основан на вычислении общего секрета:
В Web Crypto API это реализуется через deriveBits или
deriveKey.
Алгоритм ECDSA использует хэширование сообщения и математические свойства кривой для формирования подписи, состоящей из двух значений (r, s). Проверка подписи подтверждает, что сообщение было подписано владельцем соответствующего приватного ключа.
Важным аспектом является качество генерации случайного числа k, используемого при подписи. Его повторное использование или предсказуемость приводит к полной компрометации приватного ключа.
Безопасность ECC основана на нескольких предположениях:
Любые ошибки в реализации генератора случайных чисел или неправильное использование API могут свести на нет математическую стойкость системы.
В практических реализациях кривые определяются над конечными полями вида:
Fp, где p — большое простое число
Все операции выполняются по модулю p. Это делает множество точек конечным, а вычисления — полностью дискретными.
Такая структура позволяет эффективно реализовывать криптографические алгоритмы в программном и аппаратном обеспечении.
RSA основан на факторизации больших чисел, тогда как ECC опирается на дискретный логарифм в группе точек.
При сопоставимом уровне безопасности:
Однако реализация ECC требует более строгого соблюдения математических деталей и аккуратной работы с параметрами кривых.
Использование заранее определённых кривых в Web Crypto API связано с необходимостью исключить небезопасные или слабые параметры. Нестандартизованные кривые могут содержать скрытые уязвимости или быть плохо изученными с точки зрения криптоанализа.
Стандартизация обеспечивает совместимость между браузерами и криптографическими библиотеками, а также снижает риск ошибок конфигурации.