Файл: Разработка программного обеспечения алгоритма Диффи Хелмана на основе эллиптических кривых.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 22.11.2023
Просмотров: 271
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Часть 1: эллиптические кривые над вещественными числами и групповой закон
Групповой закон для эллиптических кривых
Часть 2: эллиптические кривые над конечными полями и задача дискретного логарифмирования
Порядок группы эллиптической кривой
Скалярное умножение и циклические подгруппы
Криптография на эллиптических кривых
Часть 4: алгоритмы для взлома защиты ECC и сравнение с RSA
Взлом задачи дискретного логарифмирования
Индивидуальный проект на тему: Разработка программного обеспечения алгоритма Диффи Хелмана на основе эллиптических кривых.
Протокол Диффи-Хеллмана. Вместо ключа классической криптосистемы можно взять случайную точку (x, y),
Рассмотрим пример. E – это эллиптическая кривая и P – это точка этой кривой. Абонент А выбирает случайное число ???? , вычисляет координаты точки ???? ???? и отправляет абоненту В. Абонент В делает тоже самое и отправляет абоненту А. Точка ???? = ???? ???? ???? является общим ключом. Абонент
А вычисляет эту точку, умножая свой ключ на ключ полученный от абонента В, а В вычисляет, умножая свой ключ на полученный ключ абонента A. Благодаря тому что группа точек является абелевой, Результат не зависит от того в каком порядке буду происходить вычисления, тогда абоненты получат одинаковую точку (x,y) и могут использовать координату x как ключ одинаковой криптосистемы. Проблемой для сторонних людей будет в вычислении секретной точки, так как они не будут знать секретные ключи абонентов. В этом и заключается проблема Диффи-Хеллмана.
-
Протокол Дифии-Хеллмана
Передача информации с помощью открытых каналов была большой проблемой. Для этой проблемы нашлось решение после того как появился алгоритм Диффи-Хеллмана. Этот алгоритм дал возможность пересылать сообщения без отправки каких-либо полезных сведений для расшифровки. Сам алгоритм позволяет пользователям обмениваться ключами без опасности
перехвата информации.
Криптографию с открытыми ключами предложили использовать Уитфилд Диффи и Мартин Хеллман.
Они привнесли в криптографию понятие что можно использовать ключи шифрования и расшифрования — исключая возможность утечки информации закрытого ключа с помощью открытого ключа. Впервые этот алгоритм был представлен на Национальной компьютерной конференции 1976 года.
Ниже мы опишем его числовую реализацию.
-
Числовая реализация
Возьмем в пример простую ситуацию. Абоненту А нужно отправить сообщение абоненту В и злоумышленник пытается его перехватить. Логичным решением будет шифрование, но даже если способ шифрования известен злоумышленнику, то без ключа он его не расшифрует. Однако для расшифрования абоненту А необходим ключ абонента В, который он передаст по сети, в это время злоумышленник может перехватить его и расшифровать сообщение. Эту проблему решает протокол Диффи-Хеллмана. Диффи-Хеллман работает по принципу неполного обмена ключом шифрования по сети. У каждой стороны есть открытый ключ (который может видеть каждый, включая злоумышенника) и закрытый ключ (его может видеть только пользователь компьютера). На рисунке 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 2 3 4 5 6 7 8 9 ... 14
Программная реализация
Перейдем к программной реализации алгоритма. Алгоритм Диффи- Хеллмана реализован на языке Python, в среде разработки VSC (Visual Studio Code).
Для начала нам нужно создать конструктор. Для этого используем методinit().
Рисунок 3.2 – конструктор для создания ключей
В этом конструкторе создаются переменные для открытых и закрытых ключей. Так как пользователь А будет знать лишь свой открытый, закрытый ключ и открытый ключ пользователя В, нам не нужно создавать дополнительную переменную для закрытого ключа. В этот метод мы передаем два открытых ключа и закрытый ключ для каждого пользователя. Так же имеется переменная для полного ключа, которую в дальнейшем мы
будем вычислять с помощью открытых и частичных ключей, поэтому на данном этапе она остается пустой.
Далее нам нужна функция для генерации частичного ключа для обоих пользователей.
Рисунок 3.3 – функция генерации частичного ключа
В этой функции мы вычисляем частичный ключ с помощью открытого, закрытого ключа одного пользователя и открытого ключа другого пользователя. Для вычисления используем формулы 3.1, 3.2.
Затем создаем функции для вычисления полного ключа. Для этого мы используем наши частичные ключи