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

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

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

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

Добавлен: 22.11.2023

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

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

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

СОДЕРЖАНИЕ

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

Результаты

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

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

Группы

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

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

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

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

Логарифм

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

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

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

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

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

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

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

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

Часть 3: ECDH и ECDSA

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

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

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

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

Baby-step, giant-step

ρ Полларда

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

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


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

Протокол Диффи-Хеллмана. Вместо ключа классической криптосистемы можно взять случайную точку (x, y),

Рассмотрим пример. E – это эллиптическая кривая и P – это точка этой кривой. Абонент А выбирает случайное число ???? , вычисляет координаты точки ???? ???? и отправляет абоненту В. Абонент В делает тоже самое и отправляет абоненту А. Точка ???? = ???? ???? ???? является общим ключом. Абонент

А вычисляет эту точку, умножая свой ключ на ключ полученный от абонента В, а В вычисляет, умножая свой ключ на полученный ключ абонента A. Благодаря тому что группа точек является абелевой, Результат не зависит от того в каком порядке буду происходить вычисления, тогда абоненты получат одинаковую точку (x,y) и могут использовать координату x как ключ одинаковой криптосистемы. Проблемой для сторонних людей будет в вычислении секретной точки, так как они не будут знать секретные ключи абонентов. В этом и заключается проблема Диффи-Хеллмана.
    1. Протокол Дифии-Хеллмана


Передача информации с помощью открытых каналов была большой проблемой. Для этой проблемы нашлось решение после того как появился алгоритм Диффи-Хеллмана. Этот алгоритм дал возможность пересылать сообщения без отправки каких-либо полезных сведений для расшифровки. Сам алгоритм позволяет пользователям обмениваться ключами без опасности
перехвата информации.

Криптографию с открытыми ключами предложили использовать Уитфилд Диффи и Мартин Хеллман.

Они привнесли в криптографию понятие что можно использовать ключи шифрования и расшифрования исключая возможность утечки информации закрытого ключа с помощью открытого ключа. Впервые этот алгоритм был представлен на Национальной компьютерной конференции 1976 года.

Ниже мы опишем его числовую реализацию.
    1. Числовая реализация


Возьмем в пример простую ситуацию. Абоненту А нужно отправить сообщение абоненту В и злоумышленник пытается его перехватить. Логичным решением будет шифрование, но даже если способ шифрования известен злоумышленнику, то без ключа он его не расшифрует. Однако для расшифрования абоненту А необходим ключ абонента В, который он передаст по сети, в это время злоумышленник может перехватить его и расшифровать сообщение. Эту проблему решает протокол Диффи-Хеллмана. Диффи-Хеллман работает по принципу неполного обмена ключом шифрования по сети. У каждой стороны есть открытый ключ (который может видеть каждый, включая злоумышенника) и закрытый ключ (его может видеть только пользователь компьютера). На рисунке 3.1 показана

схема личных и открытых ключей.



Рисунок 3.1 Схема ключей и абонентов

Предположим, что абонент А не знает ничего кроме открытого ключа

абонента В. Нужно создать частичный ключ шифрования используя 3 известных параметра. Открытый и закрытый ключ абонента А и открытый ключ абонента В.

???? = ????????????ri???????????? ????

(3.1)

????????????????i????????

????????????

????????????

???? = ????????????ri???????????? ????

(3.2)

????????????????i????????

????????????

????????????



Полученный частичный ключ мы отправляем абоненту В, абонент В отправляет свой частичный ключ абоненту А. Злоумышленник перехватывает отправленные частичные ключи и будет пытаться с помощью него и открытых ключей получить закрытые. Особенность вычисления по модулю в том, что функция заставляет значение циклически изменяться. Если к примеру, полученное число 151 значение будет между 151-1 и 0. Существует бесконечно множество чисел, по модулю которые равны частичному ключу абонента А или В, что делает подборку чисел практически невозможной. Далее идет генерация полного ключа. После того как абоненты обменялись частичными ключами вычисляем полные ключи

???? = ????????????ri ???????????? ????

(3.3)

ƒ????????????

????????????????i????????

????????????

???? = ????????????ri ???????????? ????

(3.4)

ƒ????????????

????????????????i????????

????????????

Полученные полные ключи должны совпасть по значению. Заключается это в следующем соотношении:

(???????????????????? ????)???????????????? ???? = (???????????????????? ????)???????????????? ???? = ???????????????????????? ???? (3.5) В нем a и b это закрытые ключи, а g и p открытые ключи. Абонентам удалось обменяться друг с другом по сети достаточным количеством информации, чтобы сгенерировать общий ключ шифрования
, не ставя под угрозу свои закрытые ключи. После этого абонент В передает зашифрованное сообщение и абонент А расшифровывает его.
    1.   1   2   3   4   5   6   7   8   9   ...   14

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


Перейдем к программной реализации алгоритма. Алгоритм Диффи- Хеллмана реализован на языке Python, в среде разработки VSC (Visual Studio Code).

Для начала нам нужно создать конструктор. Для этого используем методinit().



Рисунок 3.2 конструктор для создания ключей

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

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

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



Рисунок 3.3 функция генерации частичного ключа

В этой функции мы вычисляем частичный ключ с помощью открытого, закрытого ключа одного пользователя и открытого ключа другого пользователя. Для вычисления используем формулы 3.1, 3.2.

Затем создаем функции для вычисления полного ключа. Для этого мы используем наши частичные ключи