В криптографических библиотеках работа с эллиптическими кривыми требует строгого и эффективного представления точек. В SJCL (Stanford JavaScript Crypto Library) точки кривых являются фундаментальной структурой, вокруг которой строятся операции умножения, сложения и проверки принадлежности группе.
Точка эллиптической кривой в общем виде задаётся парой координат:
и удовлетворяет уравнению кривой, например для Weierstrass-формы:
[ y^2 = x^3 + ax + b]
Однако в практических реализациях криптографии прямое использование только аффинных координат оказывается неэффективным из-за дорогих операций инверсии в конечном поле.
В аффинной системе координат точка представляется как:
Это наиболее интуитивная форма, но операции сложения и удвоения требуют вычисления обратных элементов:
[ = ]
Инверсия в поле является дорогостоящей операцией, что делает аффинную форму нежелательной для интенсивных вычислений.
В SJCL аффинное представление используется преимущественно:
Основное внутреннее представление точек в SJCL основано на проективных координатах, чаще всего в форме якобиановых координат.
Точка представляется тройкой:
где аффинные координаты восстанавливаются как:
Такое представление устраняет необходимость частых делений в поле, заменяя их умножениями.
Использование ( Z ) позволяет:
В SJCL это критично, поскольку основная нагрузка приходится на операцию:
Внутренне точка в SJCL описывается как объект, связанный с кривой и содержащий координаты в виде больших чисел (BigInt-подобных объектов библиотеки):
xyz (если используется проективное представление)Типовая структура:
{
x: BN,
y: BN,
z: BN,
curve: Curve
}
где BN — класс больших чисел SJCL.
Все координаты точки принадлежат конечному полю ( _p ), где ( p ) — простое число, определяющее конкретную кривую (например secp256k1 или p256).
Операции над координатами включают:
Каждая координата точки всегда нормализуется внутри поля:
[ x x p]
В SJCL точки могут находиться в двух состояниях:
Используется при:
В этом состоянии операции быстрее, но координаты не интерпретируются напрямую как аффинные.
В группе эллиптической кривой существует специальный элемент — точка на бесконечности.
В SJCL она кодируется как:
или как специальный флаг состояния объекта.
Эта точка является нейтральным элементом операции сложения:
[ P + = P]
где ( ) — точка на бесконечности.
Сравнение двух точек в проективной форме требует приведения к общему виду:
равенство проверяется через нормализацию:
[ X_1 Z_2^2 = X_2 Z_1^2] [ Y_1 Z_2^3 = Y_2 Z_1^3]
Это позволяет избегать явного деления при сравнении.
При сложении двух точек SJCL использует формулы, оптимизированные под Jacobian-координаты:
Общая идея:
Удвоение точки ( P = (X, Y, Z) ) выполняется по специализированным формулам:
Особенность представления в SJCL заключается в том, что:
При выходе из криптографического контекста точка переводится в аффинную форму:
[ x = X Z^{-2}] [ y = Y Z^{-3}]
После этого координаты кодируются в стандартные форматы:
Выбор координатной системы напрямую влияет на:
Якобиановы координаты в SJCL обеспечивают:
Архитектурно точка в SJCL является объектом, объединяющим:
Это позволяет:
Представление точек в SJCL связано с управлением большим количеством временных объектов:
Это приводит к характерной нагрузке на сборщик мусора JavaScript, что учитывается при оптимизации алгоритмов скалярного умножения.
Для популярных кривых:
SJCL использует одинаковую модель представления точек, различается только:
Таким образом, структура точки остаётся неизменной, меняется только параметризация поля.
Точка в SJCL одновременно является:
Это позволяет реализовать:
без изменения внутренней модели представления.