Эллиптическая криптография строится на алгебраической структуре точек, удовлетворяющих определённому уравнению над конечным полем. В контексте JavaScript-библиотеки Jsrsasign используются кривые, определённые над простыми полями вида ?p, где все вычисления выполняются по модулю простого числа p.
Базовая форма эллиптической кривой в краткой Вейерштрассовой форме задаётся уравнением:
[ y^2 = x^3 + ax + b p]
Коэффициенты a и b выбираются так, чтобы выполнялось условие невырожденности:
[ 4a^3 + 27b^2 p]
Это условие гарантирует отсутствие сингулярных точек (точек самопересечения и касания), что критически важно для корректности криптографических операций.
Эллиптическая кривая в криптографии рассматривается не как непрерывная геометрическая фигура, а как конечное множество точек:
Эти элементы образуют абелеву группу относительно операции сложения точек.
Ключевые свойства группы:
Хотя вычисления выполняются алгебраически, операция сложения имеет геометрическую интерпретацию.
Для двух точек P и Q:
Если точки совпадают, используется операция удвоения.
Для точки P:
В практической реализации, включая Jsrsasign, используются точные формулы над полем ?p.
При x₁ ≠ x₂:
[ = ]
[ x_3 = ^2 - x_1 - x_2]
[ y_3 = (x_1 - x_3) - y_1]
[ = ]
[ x_3 = ^2 - 2x_1]
[ y_3 = (x_1 - x_3) - y_1]
Все операции выполняются по модулю p, включая обратные элементы, вычисляемые через расширенный алгоритм Евклида.
Криптографическая безопасность ECC основана на операции скалярного умножения:
[ kP = P + P + + P (k )]
Прямое вычисление неэффективно, поэтому применяется двоичный метод (double-and-add):
Сложность операции — O(log k), что делает ECC практичной для криптографии.
Все вычисления происходят в поле ?p:
Особое значение имеет вычисление обратного элемента, поскольку деление в ECC заменяется умножением на обратное значение.
Библиотека Jsrsasign предоставляет поддержку стандартных кривых, таких как:
Каждая кривая задаётся набором параметров:
Базовая точка G используется как исходный элемент группы. Секретный ключ представляет собой скаляр k, а публичный ключ вычисляется как:
[ K = kG]
Свойство односторонности операции делает невозможным восстановление k из K при достаточно больших параметрах.
В Jsrsasign точка обычно представляется объектом с координатами:
Операции выполняются через методы кривой, которые инкапсулируют арифметику поля.
Пример логики работы:
Точка считается валидной, если выполняется уравнение кривой:
[ y^2 x^3 + ax + b p]
Эта проверка используется при:
Основная вычислительная сложность ECC связана с нахождением обратных элементов по модулю p.
Для числа a необходимо найти a⁻¹ такое, что:
[ a a^{-1} p]
В библиотечных реализациях используется расширенный алгоритм Евклида или его оптимизированные варианты.
Точка O играет роль нуля в группе:
Обратная точка определяется как:
[ (x, y) (x, -y p)]
Эта структура обеспечивает замкнутость группы и корректность всех операций.
Операции над точками лежат в основе:
Во всех случаях безопасность сводится к сложности задачи дискретного логарифмирования на эллиптических кривых.
В JavaScript вычисления ECC требуют:
Jsrsasign реализует эти операции на уровне абстракций кривых и точек, скрывая низкоуровневые детали от пользователя API.