Представление точек кривой в SJCL

В криптографических библиотеках работа с эллиптическими кривыми требует строгого и эффективного представления точек. В SJCL (Stanford JavaScript Crypto Library) точки кривых являются фундаментальной структурой, вокруг которой строятся операции умножения, сложения и проверки принадлежности группе.

Математическая основа точки кривой

Точка эллиптической кривой в общем виде задаётся парой координат:

  • ( x )
  • ( y )

и удовлетворяет уравнению кривой, например для Weierstrass-формы:

[ y^2 = x^3 + ax + b]

Однако в практических реализациях криптографии прямое использование только аффинных координат оказывается неэффективным из-за дорогих операций инверсии в конечном поле.

Аффинное представление

В аффинной системе координат точка представляется как:

  • ( P = (x, y) )

Это наиболее интуитивная форма, но операции сложения и удвоения требуют вычисления обратных элементов:

[ = ]

Инверсия в поле является дорогостоящей операцией, что делает аффинную форму нежелательной для интенсивных вычислений.

В SJCL аффинное представление используется преимущественно:

  • для ввода и вывода данных
  • для проверки корректности точки
  • на границах API

Проективные и якобиановы координаты

Основное внутреннее представление точек в SJCL основано на проективных координатах, чаще всего в форме якобиановых координат.

Точка представляется тройкой:

  • ( P = (X, Y, Z) )

где аффинные координаты восстанавливаются как:

  • ( x = X / Z^2 )
  • ( y = Y / Z^3 )

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

Преимущества якобиановых координат

Использование ( Z ) позволяет:

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

В SJCL это критично, поскольку основная нагрузка приходится на операцию:

  • ( k P ) (скалярное умножение точки)

Структура точки в SJCL

Внутренне точка в SJCL описывается как объект, связанный с кривой и содержащий координаты в виде больших чисел (BigInt-подобных объектов библиотеки):

  • x
  • y
  • z (если используется проективное представление)
  • ссылка на объект кривой

Типовая структура:

{
  x: BN,
  y: BN,
  z: BN,
  curve: Curve
}

где BN — класс больших чисел SJCL.

Особенности реализации BN в контексте точек

Все координаты точки принадлежат конечному полю ( _p ), где ( p ) — простое число, определяющее конкретную кривую (например secp256k1 или p256).

Операции над координатами включают:

  • сложение по модулю ( p )
  • умножение по модулю ( p )
  • возведение в квадрат по модулю ( p )

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

[ x x p]

Нормализованное и ненормализованное состояние точки

В SJCL точки могут находиться в двух состояниях:

Нормализованное состояние

  • ( Z = 1 )
  • координаты соответствуют аффинным

Используется при:

  • сравнении точек
  • сериализации
  • внешнем представлении

Ненормализованное состояние

  • ( Z )
  • используется внутри вычислений

В этом состоянии операции быстрее, но координаты не интерпретируются напрямую как аффинные.

Представление бесконечно удалённой точки

В группе эллиптической кривой существует специальный элемент — точка на бесконечности.

В SJCL она кодируется как:

  • ( Z = 0 )

или как специальный флаг состояния объекта.

Эта точка является нейтральным элементом операции сложения:

[ P + = P]

где ( ) — точка на бесконечности.

Сравнение точек

Сравнение двух точек в проективной форме требует приведения к общему виду:

  • ( (X_1, Y_1, Z_1) )
  • ( (X_2, Y_2, Z_2) )

равенство проверяется через нормализацию:

[ X_1 Z_2^2 = X_2 Z_1^2] [ Y_1 Z_2^3 = Y_2 Z_1^3]

Это позволяет избегать явного деления при сравнении.

Представление точек в операциях сложения

При сложении двух точек SJCL использует формулы, оптимизированные под Jacobian-координаты:

  • промежуточные значения вычисляются через ( Z ), ( Z^2 ), ( Z^3 )
  • минимизируется количество инверсий

Общая идея:

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

Удвоение точки

Удвоение точки ( P = (X, Y, Z) ) выполняется по специализированным формулам:

  • вычисляется наклон касательной
  • обновляются координаты ( X’, Y’, Z’ )

Особенность представления в SJCL заключается в том, что:

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

Сериализация точек

При выходе из криптографического контекста точка переводится в аффинную форму:

  • вычисляется ( Z^{-1} )
  • пересчитываются координаты:

[ x = X Z^{-2}] [ y = Y Z^{-3}]

После этого координаты кодируются в стандартные форматы:

  • uncompressed (0x04 || x || y)
  • compressed (0x02/0x03 || x)

Влияние представления точек на производительность

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

  • скорость ECDH
  • скорость ECDSA подписи
  • эффективность генерации ключей

Якобиановы координаты в SJCL обеспечивают:

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

Внутренняя абстракция точки в SJCL

Архитектурно точка в SJCL является объектом, объединяющим:

  • математическую структуру
  • методы арифметики
  • ссылку на параметры кривой

Это позволяет:

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

Особенности работы с памятью

Представление точек в SJCL связано с управлением большим количеством временных объектов:

  • промежуточные BN-значения
  • временные координаты ( Z^2 ), ( Z^3 )
  • копии точек при операциях

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

Связь с кривыми secp256k1 и P-256

Для популярных кривых:

  • secp256k1
  • NIST P-256

SJCL использует одинаковую модель представления точек, различается только:

  • параметр ( p )
  • коэффициенты кривой ( a, b )
  • базовая точка ( G )

Таким образом, структура точки остаётся неизменной, меняется только параметризация поля.

Представление точки как элемент группы

Точка в SJCL одновременно является:

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

Это позволяет реализовать:

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

без изменения внутренней модели представления.