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

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

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

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

Добавлен: 22.11.2023

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

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

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

СОДЕРЖАНИЕ

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

Результаты

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

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

Группы

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

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

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

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

Логарифм

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

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

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

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

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

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

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

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

Часть 3: ECDH и ECDSA

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

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

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

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

Baby-step, giant-step

ρ Полларда

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

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

Рисунок3.4–функциягенерацииполногоключаВ эту функцию мы передаем переменную part_key_u, это переменная, вкоторую мы передаем значение частичного ключа для каждого пользователя.Для пользователя А это частичный ключ В, а для пользователя В эточастичныйключ А.Для вычисленияиспользуем формулы3.3,3.4.Теперь создаем функции для шифрования и расшифровываниясообщения.Рисунок3.5–функцияшифрованиясообщенияВ этой функции каждый символ считывается и преобразовывается вцелое число, после чего к этому значению прибавляется значение полногоключа и это число снова преобразуется снова в символ. Это происходит длякаждогосимволавнашемсообщении.Функцияchrиспользуетсядляпреобразованиязначенияintegerвзначениеcharacter.Функцияord()этофункцияобратнаяфункцииchr,онапреобразуетзначениеcharacterвзначениеinteger.Далее создаем функцию для расшифровки сообщения. В нем мы так жеиспользуем функции chr и ord() для преобразования сообщения в числовоезначениеи обратновсловесное значение.Рисунок3.6–функциярасшифровкисообщенияТаккаквфункциизашифровываниясообщениямыприбавлялизначениеключакзначениюсообщения,товэтойфункциимынаоборотвычитаемэто значениеиззначения сообщения.Переходимкчастивводаинформации.Рисунок3.7–ввод информацииЗдесьмызадаемсообщение,котороемыхотимпередать,вводимоткрытый ключ пользователя a, закрытый ключ пользователя a, открытый
ключпользователяb и закрытый ключпользователя b.Рисунок3.8–вызовфункциидля передачи ключейЗдесьмывызываемфункциюDiffi_Hellman()ипередаемтудазначенияключей.Таккакпользователямизвестнылишь3ключа(свойоткрытый,открытыйсобеседникаисвойзакрытый) мыпередаем3 значения.Далеевычисляемчастичныеключидляпользователяaипользователяb.Рисунок3.9–вычислениечастичныхключейДляпользователяaвызываемфункциювычислениячастичногоключа,тожесамоеделаем и дляпользователя b.Ивыводимихна экран.Следующим шагом вычисляем полные ключи, для вычисления которыхнамтребуются частичные.Рисунок3.10 –вычислениеполныхключейДля пользователя a вызываем функцию вычисления полного ключа, тожесамое делаем и для пользователя b. При вызове этих функций мы передаем внихзначениечастичных ключейпользователей.Ивыводимих наэкран.Последнимшагомбудетзашифровываниесообщения,егорасшифровкаи выводобоихсообщенийна экран.Рисунок3.11–шифрованиеидешифрованиесообщенияЗдесьпользовательbвызываетфункциюзашифровкисообщенияипередаеттудасообщение,введенноепользователем.Пользовательaвызывает функцию дешифровки сообщения и передает в нее зашифрованное

сообщениепользователяb.Послевсехвычислениймывыводимзашифрованноеирасшифрованное сообщение.
    1. 1   2   3   4   5   6   7   8   9   ...   14

Результаты

Вкачествевходныхданныхвозьмемзначенияключейизпримерачисловойреализации.Внейоткрытыйключпользователяa197,егозакрытый ключ 199. У пользователя b открытый ключ 151, закрытый 157. Вкачестве сообщения возьмем «Hello, how u doing». Ниже на рисунке 3.12продемонстрированрезультатработыпрограммыстакимивходнымиданными.Рисунок3.12–результатработыпрограммыКаквиднонарисункерезультатыполучилисьтакиеже,какивчисловой реализации. Открытый ключ пользователя a равен 147, а у b 66.Закрытыйжеключ у ниходинаков и равен75 ив самомнизу показанозашифрованноесообщениеи расшифрованное.Для исследования проверим как будет работать алгоритм если задатьдостаточно большое число в качестве ключей или такое число, при которомостатокотделениябудет равен нулю.Для начала проверим работу алгоритма при задании такого ключа прикоторомостатокотделениябудет равеннулю.Рисунок3.13 –получениенулевых ключейКак видно на рисунке 3.13 если остаток от деления равен нулю, точастичные и полные ключи будут равны нулю, при этом сообщение не будетзашифровано.Т.е.пользователямнельзязадаватьзначения,прикоторыхостатокотделениябудет равен нулю.Далеепроверимработуалгоритмаприбольшихзначенияхключей.Рисунок 3.14 – работа алгоритма при больших значениях ключейДажене

смотря на большие размеры ключей алгоритм работает

исправно без ошибок. Однако существует проблема вычислений таких больших значений при высчитывании ключей человеком, а не компьютером. Связано это с возведением в степень числа при котором получается слишком большое значение, из-за которого любой калькулятор будет давать ответ ∞ (бесконечность).

Тем, кто знаком с криптографией с открытым ключом, наверно известны аббревиатуры ECCECDH и ECDSA. Первая — это сокращение от Elliptic Curve Cryptography (криптография на эллиптических кривых), остальные — это названия основанных на ней алгоритмов.

Сегодня криптосистемы на эллиптических кривых используются в TLSPGP и SSH, важнейших технологиях, на которых базируются современный веб и мир ИТ. Я уже не говорю о Bitcoin и других криптовалютах.

До того, как ECC стала популярной, почти все алгоритмы с открытым ключом основывались на RSA, DSA и DH, альтернативных криптосистемах на основе модулярной арифметики. RSA и компания по-прежнему популярны, и часто используются вместе с ECC. Однако несмотря на то, что магия, лежащая в фундаменте RSA и подобных ей алгоритмов легко объяснима и понятна многим, а грубые реализации пишутся довольно просто, основы ECC всё ещё являются для большинства людей загадкой.

В этой серии статей я познакомлю вас с основами мира криптографии на эллиптических кривых. Моя цель — не создание полного и подробного руководства по ECC (в Интернете полно информации по этой теме), а простой обзор ECC и объяснение того, почему её считают безопасной. Я не буду тратить время на долгие математические доказательства или скучные подробности реализации. Также я представлю полезные примеры с визуальными интерактивными инструментами и скриптами