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

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

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

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

Добавлен: 22.11.2023

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

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

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

СОДЕРЖАНИЕ

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

Результаты

Часть 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 StudioCode).Дляначаланамнужносоздатьконструктор.Дляэтогоиспользуемметодinit().Рисунок3.2–конструктордлясозданияключейВ этом конструкторе создаются переменные для открытых и закрытыхключей. Так как пользователь А будет знать лишь свой открытый, закрытыйключиоткрытыйключпользователяВ,намненужносоздаватьдополнительнуюпеременнуюдлязакрытогоключа.Вэтотметодмыпередаем два открытых ключа и закрытый ключ для каждого пользователя.Такжеимеетсяпеременнаядляполногоключа,которуювдальнейшеммыбудемвычислятьспомощьюоткрытыхичастичныхключей,поэтомунаданномэтапе она остается пустой.Далее нам нужна функция для генерации частичного ключа для обоихпользователей.Рисунок3.3–функциягенерациичастичногоключаВ этой функции мы вычисляем частичный ключ с помощью открытого,закрытогоключаодногопользователяиоткрытогоключадругогопользователя.Для вычисленияиспользуем формулы 3.1,3.2.Затем создаем функции для вычисления полного ключа. Для этого мыиспользуемнашичастичныеключи