Криптография – это наука о математических методах защиты информации, путем обеспечения ее конфиденциальности (невозможности прочтения информации посторонними) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства). Алгоритмы криптографии с помощью математических методов комбинируют входной открытый текст и ключ шифрования, в результате чего получаются зашифрованные данные, вскрыть которые возможно только при наличии ключа дешифрования. Применение криптографии обеспечивает надежную передачу данных и предотвращение их получения несанкционированной стороной.
По ключевому принципу в криптографии различают следующие типы криптосистем:
Симметричные криптосистемы – в таких криптосистемах и для шифрования, и для дешифрования используется один и тот же ключ.
Криптосистемы с открытым ключом (асимметрические), для которых используется два ключа: открытый и закрытый (секретный), математически связанные друг с другом.
Особенности криптосистем с открытым ключом заключаются в том, что ключи шифрования и дешифрования не совпадают. Шифрование информации является односторонним процессом: открытые данные шифруются с помощью ключа шифрования, однако с помощью того же ключа нельзя осуществить обратное преобразование и получить открытые данные.
В данной работе рассматриваются две современные криптосистемы с открытым ключом и приводятся варианты их реализаций при поддержки интерпретируемого языка программирования Python.
Криптосистема RSA (название составлено из первых букв фамилий ее создателей R. Rivest, A. Shamir, L. Adleman). Безопасность RSA основана на трудоемкости задач факторизации и дискретного логарифмирования. RSA используется для шифрования / дешифрования информации, а также для задач аутентификации, т. е. проверки идентификатора пользователя.
Алгоритм RSA:
Исходный текст переводится в числовую форму с помощью однобуквенных или блочных числовых эквивалентов. Метод преобразования текста в числовую форму считается известным (используемые блоки должны быть в промежутке от 0 до N-1).
Каждый абонент выбирает свою пару ключей. Для этого:
генерирует два больших простых числа p и q и вычисляет
выбирает случайное число е взаимно простое со значение функции Эйлера:
то есть
Находит число d как обратное к e по модулю , т.е.
4) Пару (N,e) – объявляет открытым ключом и помещает в открытый доступ.
5) Пара (N,d) – представляет секретный ключ пользователя.
6) Числа p, q, в дальнейшем не нужны, их уничтожают.
Пользователь А отправляет сообщение х адресату Б, выбирая из открытого канала пару (N,e), принадлежащую адресату Б, и вычисляет шифрованное сообщение по формуле шифрования:
Чтобы восстановить исходный текст, пользователь Б пользуется формулой дешифрования:
Таким образом, для конфиденциальности передаваемой информации шифрование проводится общедоступным открытым ключом адресата, а чтение этого письма выполняет сам адресат с помощью своего личного ключа. Для задачи аутентификации наоборот, шифрование подписанного письма осуществляется личным ключом пользователя, а дешифрование доступно любому другому пользователю с использованием общедоступного ключа автора, подписавшего это сообщения.
Криптосистемы на точках эллиптической кривой. Эллиптическая криптография – это раздел криптографии, который изучает асимметричные криптосистемы, основанные на эллиптических кривых над конечными полями. Такие кривые представляют богатый источник конечных абелевых групп, и это открывает большие возможности для применения их в криптографии. Основное преимущество эллиптической криптографии заключается в том, что на сегодняшний день неизвестно субэкспоненциальных алгоритмов решения задачи дискретного логарифмирования.
Различные типы эллиптических криптосистем отличаются идеей ключевого обмена и собственно шифрующим преобразованием. Подробнее рассмотрим следующий вариант эллиптической криптосистемы с ключевым обменом Диффи – Хеллмана.
Криптосхема с ключевым обменом Диффи–Хеллмана:
Исходим из общедоступных данных:
конечного поля ℤp,
определенной над ним эллиптической кривой
генерирующей точки G на
Каждый из пользователей A и B:
выбирает случайное целое число и соответственно, которое держит в секрете;
находит точку и соответственно, тем самым формирует свой открытый ключ = G ( = G) и делает его общедоступным.
Используемый общий секретный ключ готов: .
Чтобы послать пользователю B сообщение P, пользователь А букву открытого текста с нечетным номером умножает на константу , а с четным номером на .
Чтобы прочитать сообщение, пользователь Bпредварительно находит
,
где N– количество точек эллиптической кривой, и умножает их на нечетную и четную буквы шифртекста соответственно.
При шифровании / дешифровании важно следить за тем, чтобы компоненты общего секретного ключа и были взаимно просты с N. Например, полученное =12 и значение N =36 не являются взаимно простыми, а значит нельзя корректно дешифровать, так как не получится найти (modN). На этот особый случай предварительно договариваются увеличивать (или уменьшать) на 1, до первого значения, взаимно простого с N. Например, вместо = 12 берем = 13 – взаимно простое с N. Аналогично с (например, вместо = 32 берем = 35, а значения 33, 34 не подходят по той же причине). Чтобы избежать некорректного шифрования, нужно шифровать "смещенным ключом" (13, 35), а затем уже расшифровывать по этому ключу!
Для практической реализации рассмотренных криптосистем воспользуемся свободно распространяемым интерпретируемым языком программирования Python, который хорошо подходит для быстрого написания различных приложений, в частности по криптографии.
В данной работе был использован модульный вариант оформления исполняемых кодов, позволяющий многоразовое использование созданного программного кода в виде импортируемого пакета необходимых для работы методов. Кроме того, предлагаемые модули снабжены элементами графического интерфейса, позволяющими наглядно продемонстрировать содержащиеся там методы, что существенно облегчает пользователю работу с таким пакетом инструментов.
Модульная реализация с элементами графического интерфейса
Используемые элементы графического интерфейса были построены с помощью стандартного пакета Tkinter, входящего в комплект поставки Python. Однако в работе нет цели, полностью перейти на оконную коммуникацию между пользователем и компьютером. Модульная реализация в любом случае предусматривает работу с интерпретатором Python, поэтому необходимости в полном переходе на графический интерфейс нет.
Полученный пакет содержит следующие модули: базовые задачи, по алгоритму RSA, по эллиптическим группам точек и эллиптическому шифрованию. При импортировании пакета на экране появляется главное окно с кнопками-модулями, составляющими данный пакет, при нажатии которых раскрываются дочерние окна с кнопками-методами, составляющими выбранный модуль. Нажатием любой кнопки дочернего окна запускается на выполнение соответствующий метод в интерпретаторе Python. Весь вспомогательный диалог для выполнения необходимой задачи по вводу / выводу данных осуществляется уже в рамках интерпретатора.
Литература и источники
Введение в теорию чисел. Алгоритм RSA. Автор С. Коутинхо. Издательство Москва:Постмаркет.
Криптография. Официальное руководство по RSA Security.Авторы: Стив Бернет, Стивен Пэйн.Издательство: Бином-Пресс2007 г.
Погружение в PythonАвтор: Марк Пилгрим. Издательство: Apress2004 г.
Разработка приложений. Автор Прохоренок Н.А. Издательство: БХВ-Петербург; 2012 г.