Математические основы подписи

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

Модульная арифметика определяется выражением:

a ≡ b (mod n)

где два числа считаются эквивалентными, если их разность делится на n без остатка.

Ключевые операции:

  • сложение по модулю: (a + b) mod n
  • умножение по модулю: (a · b) mod n
  • возведение в степень по модулю: a^k mod n

Особое значение имеет операция модульного обратного элемента:

a⁻¹ mod n

такое число, которое удовлетворяет:

a · a⁻¹ ≡ 1 (mod n)

Без вычисления обратных элементов невозможны алгоритмы RSA и DSA, а также многие операции в эллиптических кривых.


Большие числа и вычисления произвольной точности

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

Поэтому используется представление через BigInt или специализированные библиотеки, такие как BigInteger в составе jsrsasign.

Число представляется как последовательность машинных слов, над которыми выполняются:

  • длинное сложение с переносом
  • умножение в столбик с редукцией
  • алгоритм быстрого возведения в степень (square-and-multiply)

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

a^e mod n

вычисляется за O(log e), а не за линейное число умножений.


Хэш-функции как отображение произвольных данных в фиксированное пространство

Криптографическая подпись не применяется к исходному сообщению напрямую. Сначала выполняется хэширование.

Хэш-функция:

H(m) → d

где:

  • m — сообщение произвольной длины
  • d — фиксированный битовый набор (256, 384, 512 бит)

Свойства:

  • детерминированность
  • лавинный эффект
  • необратимость
  • устойчивость к коллизиям

В jsrsasign используются алгоритмы семейства SHA:

  • SHA-1 (устаревший)
  • SHA-256
  • SHA-384
  • SHA-512

Математически хэш-функции строятся на битовых операциях:

  • XOR
  • AND
  • циклические сдвиги
  • модульное сложение по 2³² или 2⁶⁴

Принцип цифровой подписи как математическая функция

Цифровая подпись определяется как результат преобразования:

S = Sign(privkey, H(m))

Проверка:

Verify(pubkey, H(m), S) → true/false

Таким образом, подпись связывает:

  • приватный ключ
  • хэш сообщения
  • результат криптографического преобразования

RSA как система на основе факторизации

RSA строится на сложности разложения большого числа на простые множители.

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

Выбираются простые числа:

p, q

Вычисляется модуль:

n = p · q

Функция Эйлера:

φ(n) = (p − 1)(q − 1)

Выбирается открытая экспонента e, такая что:

gcd(e, φ(n)) = 1

Закрытая экспонента d вычисляется как:

d ≡ e⁻¹ (mod φ(n))


Подпись RSA

Подпись формируется как:

S = H(m)^d mod n

Проверка:

H(m) ≟ S^e mod n


Математическая устойчивость RSA

Без знания p и q невозможно вычислить φ(n), а значит невозможно найти d.

Сложность задачи эквивалентна факторизации:

n → p, q

При достаточно больших ключах (2048+ бит) это вычислительно неосуществимо.


DSA и дискретный логарифм

DSA основан на задаче дискретного логарифмирования.

Выбираются параметры:

  • большое простое p
  • простое q, делящее p − 1
  • генератор g

Ключи:

  • приватный x
  • публичный y = g^x mod p

Подпись DSA

Выбирается случайное k:

r = (g^k mod p) mod q s = k⁻¹ (H(m) + x·r) mod q

Подпись: (r, s)


Проверка

w = s⁻¹ mod q u1 = H(m) · w mod q u2 = r · w mod q

v = (g^u1 · y^u2 mod p) mod q

Подпись верна, если:

v = r


Эллиптические кривые и ECDSA

В jsrsasign широко используется ECDSA, основанный на свойствах эллиптических кривых над конечными полями.

Уравнение кривой

y² = x³ + ax + b (mod p)

где p — простое число.


Геометрическая структура

Точки кривой образуют абелеву группу:

  • операция сложения точек
  • существование нейтрального элемента (точка на бесконечности)
  • обратные элементы

Скалярное умножение точки

Основная операция:

Q = k · G

где:

  • G — базовая точка
  • k — скаляр (секрет)
  • Q — публичная точка

Вычисление выполняется через:

  • удвоение точки
  • сложение точек
  • алгоритм double-and-add

Подпись ECDSA

Выбирается случайное k:

R = k · G r = x(R) mod n

s = k⁻¹ (H(m) + r·d) mod n

где d — приватный ключ.

Подпись: (r, s)


Проверка ECDSA

w = s⁻¹ mod n u1 = H(m) · w mod n u2 = r · w mod n

X = u1·G + u2·Q

Подпись корректна, если:

r ≡ x(X) mod n


Алгоритмы работы с точками эллиптической кривой

Сложение точек P и Q определяется разными случаями:

Разные точки

λ = (y2 − y1) / (x2 − x1)

x3 = λ² − x1 − x2 y3 = λ(x1 − x3) − y1

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

λ = (3x1² + a) / (2y1)

x3 = λ² − 2x1 y3 = λ(x1 − x3) − y1

Все операции выполняются по модулю p.


Роль генерации случайных чисел

Без криптографически стойкого генератора случайных чисел невозможна безопасность ECDSA и DSA.

Случайное число k должно:

  • быть непредсказуемым
  • не повторяться
  • иметь равномерное распределение

Утечка k приводит к восстановлению приватного ключа d:

d = (s·k − H(m)) · r⁻¹ mod n


Бинарные операции и представление данных

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

Используются:

  • UTF-8 кодирование
  • побайтовое представление
  • побитовые сдвиги
  • конкатенация блоков фиксированной длины

Хэш-функция работает именно с этим бинарным представлением.


Связь математических моделей с реализацией jsrsasign

jsrsasign реализует описанные модели через:

  • BigInteger для модульной арифметики
  • SHA-2 реализации для хэширования
  • ASN.1 для структуры ключей
  • ECDSA/RSA/DSA алгоритмы подписи

ASN.1 структура кодирует ключи в виде:

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

что позволяет интероперабельность с PEM/DER форматами.


Вычислительная сложность криптографических операций

Основные оценки:

  • возведение в степень: O(log n)
  • скалярное умножение на эллиптической кривой: O(log n)
  • факторизация RSA: экспоненциальная сложность
  • дискретный логарифм: экспоненциальная сложность

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


Числовые поля и конечные структуры

Все операции выполняются в конечных полях:

  • ℤ/nℤ для RSA и DSA
  • GF(p) для эллиптических кривых

Свойства:

  • замкнутость
  • наличие обратных элементов
  • конечное число элементов

Это исключает накопление ошибок округления, характерное для вещественных чисел.


Алгебраическая основа устойчивости подписей

Безопасность схем определяется трудностью обратных задач:

  • RSA → факторизация
  • DSA → дискретный логарифм
  • ECDSA → дискретный логарифм на эллиптической кривой

Все они принадлежат классу задач, для которых не известны эффективные квантово-устойчивые решения в классической модели вычислений.


Сопоставление операций подписи

Общая структура всех алгоритмов:

  1. Хэширование сообщения
  2. Генерация случайного параметра
  3. Модульные операции в конечном поле
  4. Формирование подписи
  5. Проверка через публичные данные

Несмотря на различие математических структур, все схемы опираются на одну идею: односторонние функции в конечных алгебраических системах.