Основы ECC: кривые и операции

Эллиптическая криптография строится на алгебраической структуре точек, удовлетворяющих определённому уравнению над конечным полем. В контексте JavaScript-библиотеки Jsrsasign используются кривые, определённые над простыми полями вида ?p, где все вычисления выполняются по модулю простого числа p.

Базовая форма эллиптической кривой в краткой Вейерштрассовой форме задаётся уравнением:

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

Коэффициенты a и b выбираются так, чтобы выполнялось условие невырожденности:

[ 4a^3 + 27b^2 p]

Это условие гарантирует отсутствие сингулярных точек (точек самопересечения и касания), что критически важно для корректности криптографических операций.

Множество точек и структура группы

Эллиптическая кривая в криптографии рассматривается не как непрерывная геометрическая фигура, а как конечное множество точек:

  • Все пары (x, y), удовлетворяющие уравнению
  • Специальная точка на бесконечности, обозначаемая O

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

Ключевые свойства группы:

  • Замкнутость: результат сложения точек также является точкой кривой
  • Ассоциативность: (P + Q) + R = P + (Q + R)
  • Существование нейтрального элемента O
  • Существование обратного элемента для каждой точки

Геометрическая интерпретация сложения точек

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

Сложение различных точек

Для двух точек P и Q:

  1. Строится прямая через P и Q
  2. Прямая пересекает кривую в третьей точке R’
  3. Отражение R’ относительно оси X даёт результат P + Q

Если точки совпадают, используется операция удвоения.

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

Для точки P:

  1. Строится касательная к кривой в точке P
  2. Касательная пересекает кривую в точке R’
  3. Отражение R’ относительно оси X даёт 2P

Алгебраические формулы операций

В практической реализации, включая Jsrsasign, используются точные формулы над полем ?p.

Сложение точек P(x₁, y₁) и Q(x₂, y₂)

При x₁ ≠ x₂:

[ = ]

[ x_3 = ^2 - x_1 - x_2]

[ y_3 = (x_1 - x_3) - y_1]

Удвоение точки P(x₁, y₁)

[ = ]

[ x_3 = ^2 - 2x_1]

[ y_3 = (x_1 - x_3) - y_1]

Все операции выполняются по модулю p, включая обратные элементы, вычисляемые через расширенный алгоритм Евклида.

Скалярное умножение как основная операция

Криптографическая безопасность ECC основана на операции скалярного умножения:

[ kP = P + P + + P (k )]

Прямое вычисление неэффективно, поэтому применяется двоичный метод (double-and-add):

  • число k представляется в двоичном виде
  • выполняются последовательные удвоения и сложения

Сложность операции — O(log k), что делает ECC практичной для криптографии.

Конечные поля и модульная арифметика

Все вычисления происходят в поле ?p:

  • сложение: (a + b) mod p
  • умножение: (a × b) mod p
  • обратный элемент: a⁻¹ mod p

Особое значение имеет вычисление обратного элемента, поскольку деление в ECC заменяется умножением на обратное значение.

Кривые в Jsrsasign

Библиотека Jsrsasign предоставляет поддержку стандартных кривых, таких как:

  • secp256r1 (P-256)
  • secp256k1 (используется в Bitcoin и других системах)
  • другие кривые NIST и SECG

Каждая кривая задаётся набором параметров:

  • p — модуль поля
  • a, b — коэффициенты уравнения
  • G — базовая точка (generator point)
  • n — порядок группы
  • h — кофактор

Базовая точка и генерация ключей

Базовая точка G используется как исходный элемент группы. Секретный ключ представляет собой скаляр k, а публичный ключ вычисляется как:

[ K = kG]

Свойство односторонности операции делает невозможным восстановление k из K при достаточно больших параметрах.

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

В Jsrsasign точка обычно представляется объектом с координатами:

  • x
  • y
  • curve

Операции выполняются через методы кривой, которые инкапсулируют арифметику поля.

Пример логики работы:

  • создание точки на кривой
  • проверка принадлежности кривой
  • выполнение операций add и mul

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

Точка считается валидной, если выполняется уравнение кривой:

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

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

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

Инверсии и особенности вычислений

Основная вычислительная сложность ECC связана с нахождением обратных элементов по модулю p.

Для числа a необходимо найти a⁻¹ такое, что:

[ a a^{-1} p]

В библиотечных реализациях используется расширенный алгоритм Евклида или его оптимизированные варианты.

Поведение точки на бесконечности

Точка O играет роль нуля в группе:

  • P + O = P
  • P + (-P) = O

Обратная точка определяется как:

[ (x, y) (x, -y p)]

Эта структура обеспечивает замкнутость группы и корректность всех операций.

Связь операций с криптографическими схемами

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

  • ECDH (обмен ключами)
  • ECDSA (цифровая подпись)
  • ECIES (гибридное шифрование)

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

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

В JavaScript вычисления ECC требуют:

  • работы с большими числами (BigInt или специализированные библиотеки)
  • оптимизации модульной арифметики
  • предотвращения утечек через побочные каналы

Jsrsasign реализует эти операции на уровне абстракций кривых и точек, скрывая низкоуровневые детали от пользователя API.