Главная страница
Навигация по странице:

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

  • 3.4 Результаты

  • Список используемой литературы

  • Эллиптическая криптография. Ильичев Д.О._МОп-1601б. Д. О. Ильичев (И. О. Фамилия)


    Скачать 1.03 Mb.
    НазваниеД. О. Ильичев (И. О. Фамилия)
    АнкорЭллиптическая криптография
    Дата10.12.2021
    Размер1.03 Mb.
    Формат файлаpdf
    Имя файлаИльичев Д.О._МОп-1601б.pdf
    ТипДокументы
    #298815
    страница3 из 3
    1   2   3
    3.2 Числовая реализация
    Возьмем в пример простую ситуацию. Абоненту А нужно отправить сообщение абоненту В и злоумышленник пытается его перехватить.
    Логичным решением будет шифрование, но даже если способ шифрования известен злоумышленнику, то без ключа он его не расшифрует. Однако для расшифрования абоненту А необходим ключ абонента В, который он передаст по сети, в это время злоумышленник может перехватить его и расшифровать сообщение. Эту проблему решает протокол Диффи-Хеллмана.
    Диффи-Хеллман работает по принципу неполного обмена ключом шифрования по сети. У каждой стороны есть открытый ключ (который может видеть каждый, включая злоумышенника) и закрытый ключ (его может видеть только пользователь компьютера). На рисунке 3.1 показана схема личных и открытых ключей.

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

    32
    (3.3)
    (3.4)
    Полученные полные ключи должны совпасть по значению. Заключается это в следующем соотношении:
    (
    )
    (
    )
    (3.5)
    В нем a и b это закрытые ключи, а g и p открытые ключи.
    Абонентам удалось обменяться друг с другом по сети достаточным количеством информации, чтобы сгенерировать общий ключ шифрования, не ставя под угрозу свои закрытые ключи. После этого абонент В передает зашифрованное сообщение и абонент А расшифровывает его.
    3.3 Программная реализация
    Перейдем к программной реализации алгоритма. Алгоритм Диффи-
    Хеллмана реализован на языке Python, в среде разработки VSC (Visual Studio
    Code).
    Для начала нам нужно создать конструктор. Для этого используем метод __init__().
    Рисунок 3.2 – конструктор для создания ключей
    В этом конструкторе создаются переменные для открытых и закрытых ключей. Так как пользователь А будет знать лишь свой открытый, закрытый ключ и открытый ключ пользователя В, нам не нужно создавать дополнительную переменную для закрытого ключа. В этот метод мы передаем два открытых ключа и закрытый ключ для каждого пользователя.
    Так же имеется переменная для полного ключа, которую в дальнейшем мы

    33 будем вычислять с помощью открытых и частичных ключей, поэтому на данном этапе она остается пустой.
    Далее нам нужна функция для генерации частичного ключа для обоих пользователей.
    Рисунок 3.3 – функция генерации частичного ключа
    В этой функции мы вычисляем частичный ключ с помощью открытого, закрытого ключа одного пользователя и открытого ключа другого пользователя. Для вычисления используем формулы 3.1, 3.2.
    Затем создаем функции для вычисления полного ключа. Для этого мы используем наши частичные ключи
    Рисунок 3.4 – функция генерации полного ключа
    В эту функцию мы передаем переменную part_key_u, это переменная, в которую мы передаем значение частичного ключа для каждого пользователя.
    Для пользователя А это частичный ключ В, а для пользователя В это частичный ключ А. Для вычисления используем формулы 3.3, 3.4.
    Теперь создаем функции для шифрования и расшифровывания сообщения.

    34
    Рисунок 3.5 – функция шифрования сообщения
    В этой функции каждый символ считывается и преобразовывается в целое число, после чего к этому значению прибавляется значение полного ключа и это число снова преобразуется снова в символ. Это происходит для каждого символа в нашем сообщении. Функция chr используется для преобразования значения integer в значение character. Функция ord() это функция обратная функции chr, она преобразует значение character в значение integer.
    Далее создаем функцию для расшифровки сообщения. В нем мы так же используем функции chr и ord() для преобразования сообщения в числовое значение и обратно в словесное значение.
    Рисунок 3.6 – функция расшифровки сообщения
    Так как в функции зашифровывания сообщения мы прибавляли значение ключа к значению сообщения, то в этой функции мы наоборот вычитаем это значение из значения сообщения.
    Переходим к части ввода информации.

    35
    Рисунок 3.7 – ввод информации
    Здесь мы задаем сообщение, которое мы хотим передать, вводим открытый ключ пользователя a, закрытый ключ пользователя a, открытый ключ пользователя b и закрытый ключ пользователя b.
    Рисунок 3.8 – вызов функции для передачи ключей
    Здесь мы вызываем функцию Diffi_Hellman() и передаем туда значения ключей. Так как пользователям известны лишь 3 ключа (свой открытый, открытый собеседника и свой закрытый) мы передаем 3 значения.
    Далее вычисляем частичные ключи для пользователя a и пользователя b.
    Рисунок 3.9 – вычисление частичных ключей
    Для пользователя a вызываем функцию вычисления частичного ключа, тоже самое делаем и для пользователя b. И выводим их на экран.
    Следующим шагом вычисляем полные ключи, для вычисления которых нам требуются частичные.
    Рисунок 3.10 – вычисление полных ключей
    Для пользователя a вызываем функцию вычисления полного ключа, тоже самое делаем и для пользователя b. При вызове этих функций мы передаем в них значение частичных ключей пользователей. И выводим их на экран.

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

    37
    Для исследования проверим как будет работать алгоритм если задать достаточно большое число в качестве ключей или такое число, при котором остаток от деления будет равен нулю.
    Для начала проверим работу алгоритма при задании такого ключа при котором остаток от деления будет равен нулю.
    Рисунок 3.13 – получение нулевых ключей
    Как видно на рисунке 3.13 если остаток от деления равен нулю, то частичные и полные ключи будут равны нулю, при этом сообщение не будет зашифровано. Т.е. пользователям нельзя задавать значения, при которых остаток от деления будет равен нулю.
    Далее проверим работу алгоритма при больших значениях ключей.
    Рисунок 3.14 – работа алгоритма при больших значениях ключей
    Даже не смотря на большие размеры ключей алгоритм работает исправно без ошибок. Однако существует проблема вычислений таких больших значений при высчитывании ключей человеком, а не компьютером.
    Связано это с возведением в степень числа при котором получается слишком большое значение, из-за которого любой калькулятор будет давать ответ ∞
    (бесконечность).

    38
    Заключение
    Выпускная квалификационная работа посвящена реализации и анализа криптографического алгоритма на эллиптических кривых.
    Были выполнены следующие цели:
    Описаны эллиптические кривые их теория, математические свойства, недостатки и преимущества;
    Описаны алгоритмы и протоколы на эллиптических кривых.
    В качестве алгоритма для реализации был выбран протокол Диффи-
    Хеллмана.
    В ходе выполнения работы был рассмотрен криптографический алгоритм Диффи-Хеллмана и была продемонстрирована реализация в виде программного кода, который показывает работу алгоритма.
    Была описана теория алгоритма, приведена числовая и программная реализации. Алгоритм так же был протестирован на наличие ошибок, которых в ходе работы не было выявлено. В качестве исследования алгоритма был проведен тест на большие и нулевые значения.
    Протокол обмена ключами Диффи-Хеллмана является достаточно надежным методом обмена ключами через незащищенные каналы передачи информации. Он используется в системах, обеспечивающих безопасность передаваемых данных и протоколах, использующихся сегодня. За долгие годы использования протокола обмена ключами Диффи-Хеллмана было разработано множество атак, но и сам протокол не стоял на месте и множество исследователей изменяли и модифицировали его. Это доказывает, что безопасный обмен секретными ключами является важным аспектом защиты информации. Что делает протокол обмена ключами Диффи-
    Хеллмана востребованным и в наше время.
    В результате мы получили работающий исправно алгоритм с его теорией, числовой и программной реализацией, а также его тестирование и исследование.

    39

    40
    Список используемой литературы
    1.
    Жданов, О. Н. Применение эллиптических кривых в криптографии: учеб. пособие / О. Н. Жданов, Т. А. Чалкин.

    Красноярск: СибГАУ,
    2011

    65 с.
    2.
    Рябко, Б. Я.Криптографические методы защиты информации
    : учеб. пособие / Б. Я. Рябко, А. Н. Фионов.

    2-е изд., стер.

    М.: Горячая линия – Телеком, 2012.

    229 с.
    3.
    Бабаш, А. В. Информационная безопасность и защита информации: учебное пособие/ А. В. Бабаш, П.Н. Башлы, Е. К. Баранова. — М.:
    РИОР, 2013. — 222 с.
    4.
    Гомес, Ж. Математики, шпионы и хакеры. Кодирование и криптография /Ж. Гомес. — М.: Де Агостини, 2014. —144 с.
    5.
    Грушо, А. А. Теоретические основы компьютерной безопасности: учеб. пособие для вузов / А. А. Грушо. — М.: Академия, 2009. — 272 с.
    6.
    Жуков, А. Е. Системы блочного шифрования: учеб. пособие по курсу
    «Криптографические методы защиты информации» / А.Е. Жуков — М.:
    Издательство МГТУ им. Н.Э. Баумана, 2013. — 79c.
    7.
    Загинайлов, Ю. Н. Основы информационной безопасности: курс визуальны лекциий: направление подготовки "Информационная безопасность", специальность "Экономическая безопасность"/ Ю.Н.
    Загинайлов. — М.: Директ-Медиа, 2015 -105 с.
    8.
    Иванов, М. А. Криптографические методы защиты и информации в компьютерных системах и сетях: учеб. пособие / М. А. Иванов, И. В.
    Чугунков. — М.: МИФИ, 2012 — 400 с.
    9.
    Фороузан, Б. А. Математика криптографии и теория шифрования: учеб. пособие / Б. А. Фороузан. — М.: ИНТУИТ, 2016 — 510 с.
    10.
    Ященко, В. В. Введение в криптографию / В. В. Ященко, Н. П. Вар- новский, Ю. В. Нестеренко — 4-е изд., доп. М.: МЦНМО, 2012. — 348 с.

    41 11.
    Нестерова, Л. Ю., Карпенкова Н. В. Создание криптографии с помощью модулярной математики // Молодой ученый. — 2014. —
    №21.1. — c. 237-240.
    12.
    Литвинская, О. С. Основы теории передачи информации. Учебное пособие / О.С. Литвинская, Н.И. Чернышев. - М.: КноРус, 2015. - 168 c.
    13.
    Бабаш, А. В. История криптографии. Часть I / А.В. Бабаш, Г.П.
    Шанкин. - М.: Гелиос АРВ, 2016. - 240 c.
    14.
    Шаньгин, В. Ф. Информационная безопасность и защита информации /
    В.Ф. Шаньгин. - Москва: Огни, 2016. - 551 c.
    15.
    Шнайер, Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си / Б. Шнайер. - М.: Триумф, 2012. - 518 c.
    16.
    Шумский, А.А. Системный анализ в защите информации / А.А.
    Шумский. - Москва: СПб. [и др.] : Питер, 2013. - 224 c.
    17.
    Литвинская, О. С. Основы теории передачи информации. Учебное пособие / О.С. Литвинская, Н.И. Чернышев. - М.: КноРус, 2015. - 168 c.
    18.
    Gilson, D. Blockchain.info issues refunds to Bitcoin theft victims / D.
    Gilson,
    2013.
    [Электронный ресурс]: http://www.coindesk.com/blockchain-info-issuesrefunds-to-bitcoin-theft- victims/
    19.
    Chandrasekhara, K.R. “Elliptic Curve based authenticated session Key establishment protocol for High Security Applications in Constrained
    Network environment” / K.R. Chandrasekhara, M.P. Pillai1 and Sebastian,
    2010. [Электронный ресурс]: http://www.arxiv.org/pdf/1202.1895 20.
    Griffiths, I. Programming Java: Building Windows 8, Web, and Desktop
    Applications for the .NET 4.5 Framework / I. Griffiths, 2012. –
    [Электронный ресурс]: https://giants.ict.griffith.edu.au./JPL/
    21.
    Herlihy, M. The Art of Multiprocessor Programming. / M. Herlihy, N.
    Shavit. — Revised 1st Edition. — Morgan Kaufmann, 2012. — 537 p.
    22.
    Ingalls, J. M. Interior Ballistics / J.M. Ingalls. — Nabu Press. — 2014. —
    258 p.

    42 23.
    Michaelis, K. Randomly failed! The state of randomness in current Java implementations / K. Michaelis, C. Meyer, and J. Schwenk, In E. Dawson, editor // CT-RSA. — volume 7779 of LNCS. – 2013. – pp. 129 —144.
    24.
    Georgiev, M. The most dangerous code in the world: Validating SSL certificates in non-browser software / M. Georgiev, S. Iyengar, S. Jana, R.
    Anubhai, D. Boneh, and V. Shmatikov, In T. Yu, G. Danezis, and V. D.
    Gligor, editors // ACM Conference on Computer and Communications
    Security. — 2012. — pp. 38 – 49.
    25.
    Pelland, P. Moving to Microsoft Visual Studio 2010 / P. Poland, K. Haines –
    Microsoft Press, 2011. — 336 p.
    26.
    Nils, G. “Comparing Elliptic Curve Cryptography and RSA on 8-bit CPus”/
    Nils Gura, Arun Patel, Arvinderpal Wander, Hans Eberle // 6th International
    Workshop Cambridge, MA, USA. — 2004. — 119 p.
    1   2   3


    написать администратору сайта