Файл: Разработка программного обеспечения алгоритма Диффи Хелмана на основе эллиптических кривых.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 22.11.2023

Просмотров: 298

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Программная реализация

Результаты

Часть 1: эллиптические кривые над вещественными числами и групповой закон

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

Группы

Групповой закон для эллиптических кривых

Геометрическое сложение

Алгебраическое сложение

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

Логарифм

Часть 2: эллиптические кривые над конечными полями и задача дискретного логарифмирования

Поле целых чисел по модулю p

Эллиптические кривые над 

Сложение точек

Алгебраическая сумма

Порядок группы эллиптической кривой

Скалярное умножение и циклические подгруппы

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

Часть 3: ECDH и ECDSA

Параметры области определения

Криптография на эллиптических кривых

Часть 4: алгоритмы для взлома защиты ECC и сравнение с RSA

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

Baby-step, giant-step

ρ Полларда

Сравниние ρ Полларда и Baby-step giant-step

Дальнейшие рассуждения




  • Сложение: 

  • Вычитание: 

  • Умножение: 

  • Аддитивная инверсия:  . Действительно: 

  • Мультипликативная инверсия: 


Если эти уравнения вам незнакомы и вы хотите изучить основы модулярной арифметики, пройдите курс в Академии Хана.

Как мы уже сказали целые числа по модулю   — это поле, поэтому все перечисленные выше свойства сохраняются. Учтите, что требование того, чтобы   было простым числом, очень важно! Множество целых чисел по модулю 4 не является полем: 2 не имеет мультипликативной инверсии (т.е. уравнение   не имеет решений).

Деление по модулю p



Скоро мы определим эллиптические кривые для  , но прежде нам нужно чётко понимать, что   означает над  . Попросту говоря:  , или, прямым текстом,   в числителе и   в знаменателе равно   раз обратная величина  . Это нас не удивляет, но даёт нам простой способ выполнения деления: найти обратную величину числа, а затем выполнить простое умножение.

Вычисление обратного числа можно «просто» выполнить с помощью расширенного алгоритма Евклида, который в худшем случае имеет сложность   (или  , если мы учитываем битовую длину).

Мы не будем вдаваться в подробности расширенного алгоритма Евклида, это не входит в рамки статьи, но я представлю работающую реализацию на Python:

def extended_euclidean_algorithm(a, b):

"""

Возвращает кортеж из трёх элементов (gcd, x, y), такой, что

a * x + b * y == gcd, где gcd - наибольший

общий делитель a и b.
В этой функции реализуется расширенный алгоритм

Евклида и в худшем случае она выполняется O(log b).

"""

s, old_s = 0, 1

t, old_t = 1, 0

r, old_r = b, a
while r != 0:

quotient = old_r // r

old_r, r = r, old_r - quotient * r

old_s, s = s, old_s - quotient * s

old_t, t = t, old_t - quotient * t
return old_r, old_s, old_t

def inverse_of(n, p):

"""

Возвращает обратную величину

n по модулю p.
Эта функция возвращает такое целое число m, при котором

(n * m) % p == 1.

"""

gcd, x, y = extended_euclidean_algorithm(n, p)

assert (n * x + p * y) % p == gcd
if gcd != 1:

# Или n равно 0, или p не является простым.

raise ValueError(

'{} has no multiplicative inverse '

'modulo {}'.format(n, p))

else:

return x % p

Эллиптические кривые над 



Теперь у нас есть все необходимые элементы для ограничения эллиптических кривых полем  . Множество точек, которые в предыдущей части имели следующий вид:



теперь превращаются в:



где 0 — по-прежнему точка в бесконечности, а   и   — два целых числа в  .




Кривая   с  . Заметьте, что для каждого   существует максимум две точки. Также заметьте симметрию относительно  .




Кривая   — особая и имеет тройную точку в  . Она не является истинной эллиптической кривой.

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

Сложение точек



Очевидно, что нам нужно немного изменить определение сложения, чтобы оно работало для  . Для вещественных чисел мы сказали, что сумма трёх точек на одной прямой равна нулю ( ). Мы можем сохранить это определение, но что значит расположение трёх точек на одной прямой над  ?


Можно сказать, что три точки находятся на одной прямой, если существует прямая, соединяющая их. Разумеется, прямые над   отличаются от прямых над  . Можно сказать, что прямая над   — это множество точек  , удовлетворяющих уравнению   (это стандартное уравнение прямой с добавленной частью " ").




Сложение точек для кривой  , при   и  . Заметьте, как соединяющая точки прямая   «повторяет» себя на плоскости.

Учитывая то, что мы по-прежнему находимся в группе, сложение точек сохраняет уже известные нам свойства:


  •  (из определения единичного элемента).

  • Для   обратная величина   — это точка, имеющая ту же абсциссу, но обратную ординату. Или, если угодно,  . Например, если кривая над   имеет точку  , то обратной величиной будет  .

  • Кроме того,   (из определения обратной величины).


Алгебраическая сумма



Уравнения для выполнения сложений точек в точности такие же, как в предыдущей части, за исключением того, что нам нужно добавлять в конце каждого выражения " ". Поэтому, если   и  , то   можно вычислить следующим способом:




Если  , то наклон   принимает форму:



Иначе, если  , мы получаем:




Уравнения не изменились, и это не совпадение: на самом деле, эти уравнения работают над любым полем, и над конечным, и над бесконечным (за исключением   и  , которые являются особыми случаями). Я чувствую, что это нужно объяснить. Но есть проблема: для доказательств группового закона обычно требуются сложные математические понятия. Однако я нашёл доказательство Стефана Фридла в котором используются только простейшие концепции. Прочитайте его, если вам интересно, почему эти уравнения работают (почти) над любым полем.

Вернёмся к кривым — мы не будем определять геометрический способ: на самом деле, с ним возникнут проблемы. Например, в предыдущей части мы сказали, что для вычисления   нам придётся взять касательную к кривой в  . Но при отсутствии непрерывности слово «касательная» теряет всякий смысл. Мы можем найти способ обойти эту и другие проблемы, однако чисто геометрический способ будет слишком сложным и совершенно непрактичным.

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