Кривые, поддерживаемые SJCL: c256, c384, c521

Криптографическая библиотека SJCL (Stanford Javascript Crypto Library) опирается на набор стандартизированных эллиптических кривых, применяемых в алгоритмах ECDH и ECDSA. В реализации библиотеки выделяются три основные кривые: c256, c384 и c521. Эти обозначения соответствуют различным уровням криптографической стойкости и параметрам NIST P-curve семейства.

Эллиптическая кривая в контексте SJCL определяет математическое пространство, в котором выполняются операции над точками при генерации ключей, вычислении общего секрета и создании цифровых подписей. Каждая кривая задаёт:

  • поле простого порядка
  • коэффициенты уравнения эллиптической кривой
  • базовую точку (generator point)
  • порядок подгруппы
  • кофактор

Внутри SJCL кривые реализованы как параметры, используемые модулем sjcl.ecc.curves, где каждая конфигурация инкапсулирует полный набор характеристик для криптографических операций.

c256: кривая уровня P-256

Кривая c256 соответствует стандартизированной NIST P-256 (secp256r1 / prime256v1). Она является наиболее часто используемой в прикладной криптографии благодаря оптимальному балансу между производительностью и стойкостью.

Параметры и свойства

  • Размер ключа: 256 бит
  • Поле: простое поле порядка p ≈ 2²⁵⁶
  • Уравнение: короткая форма Вейерштрасса
  • Уровень безопасности: ~128 бит

В SJCL данная кривая применяется по умолчанию во многих сценариях, включая ECDH-обмен ключами и ECDSA-подпись.

Особенности реализации

В JavaScript-реализации SJCL c256 оптимизирована под:

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

Кривая подходит для веб-приложений, где критична скорость выполнения криптографических операций.

c384: кривая уровня P-384

Кривая c384 соответствует NIST P-384 (secp384r1). Она относится к классу более устойчивых криптографических систем и используется в сценариях с повышенными требованиями к безопасности.

Параметры и свойства

  • Размер ключа: 384 бит
  • Уровень безопасности: ~192 бит
  • Увеличенное поле и коэффициенты кривой
  • Более сложные арифметические операции по сравнению с c256

Особенности использования

В SJCL c384 применяется в системах, где требуется долговременная криптографическая стойкость. Это включает:

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

Цена повышения безопасности выражается в снижении производительности по сравнению с c256, поскольку операции над 384-битными числами требуют больше вычислительных ресурсов в JavaScript-среде.

c521: кривая уровня P-521

Кривая c521 соответствует NIST P-521 и представляет собой один из наиболее криптографически стойких вариантов, реализованных в SJCL.

Параметры и свойства

  • Размер ключа: 521 бит
  • Уровень безопасности: ~256 бит
  • Нестандартная длина поля (не кратна 8 бит)
  • Наиболее тяжёлая по вычислительной стоимости среди трёх кривых

Математические особенности

Кривая P-521 использует поле простых чисел вида 2⁵²¹ - 1 с дополнительными корректировками, что делает арифметику более сложной в программной реализации. В JavaScript это особенно заметно из-за отсутствия аппаратной поддержки больших целых чисел на уровне процессора.

Использование в SJCL

c521 применяется в сценариях, где безопасность доминирует над производительностью:

  • критическая инфраструктура
  • государственные и финансовые системы с высокими требованиями
  • долгосрочное шифрование данных, рассчитанное на десятилетия устойчивости

Сравнительный анализ c256, c384 и c521

Различия между кривыми в SJCL можно рассматривать через три ключевых аспекта: безопасность, производительность и область применения.

Уровень безопасности

  • c256 — базовый уровень (128 бит)
  • c384 — усиленный уровень (192 бит)
  • c521 — максимальный уровень (256 бит)

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

Производительность

В JavaScript-среде производительность резко зависит от размера чисел:

  • c256 демонстрирует наименьшую задержку операций
  • c384 требует существенно больше ресурсов
  • c521 является наиболее затратной в вычислительном плане

Основные операции, влияющие на скорость:

  • скалярное умножение точки
  • инверсия в конечном поле
  • сложение точек кривой

Размер ключей и данных

  • c256: компактные ключи и подписи
  • c384: средний размер
  • c521: увеличенные структуры данных, влияющие на сетевой трафик и хранение

Реализация в SJCL

В библиотеке SJCL каждая кривая инкапсулируется объектом с параметрами, доступным через:

  • sjcl.ecc.curves.c256
  • sjcl.ecc.curves.c384
  • sjcl.ecc.curves.c521

Каждый объект содержит:

  • параметры поля
  • базовую точку G
  • порядок n
  • методы для генерации ключевых пар
  • поддержку ECDH и ECDSA

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

Процесс генерации ключевой пары зависит от выбранной кривой. Внутри SJCL используется криптографически стойкий генератор случайных чисел для выбора приватного ключа d, после чего вычисляется публичный ключ Q = d × G.

Различие кривых напрямую влияет на:

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

Применение в криптографических протоколах

ECDH (Elliptic Curve Diffie-Hellman)

Все три кривые поддерживаются для обмена ключами. Совместный секрет вычисляется как:

  • S = dA × QB = dB × QA

где выбор кривой определяет размер и стойкость результата.

ECDSA (Digital Signature Algorithm)

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

Практические аспекты выбора кривой

Выбор между c256, c384 и c521 определяется балансом между вычислительными ресурсами и требуемым уровнем защиты.

  • c256 применяется в большинстве веб-сценариев
  • c384 используется при повышенных требованиях к безопасности
  • c521 ориентирована на критические системы с длительным жизненным циклом данных

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