- •Введение
- •I. Обзор основных методов шифрования связи
- •1.1. Основные проблемы и положения
- •1.2. Способы решения
- •1.3. Шифрование аналогового потока
- •1.4. Плюсы и минусы методов шифрования аналогового потока
- •1) Использование шума:
- •2) Частотные преобразования:
- •3)Использование временных преобразований (скремблирование)
- •1.5. Шифрование в цифровом канале связи
- •Гост 28147-89
- •II. Алгоритм шифрования des
- •Блочный шифр.
- •Алгоритм шифрования aes
- •Высокоуровневое описание алгоритма
- •Гост 28147-89
- •Разработка приложения на языке Python
- •Описание языка Python
- •Установка языка Python
- •Библиотека PyCrypto на Python
- •Собственная реализация aes на Python
- •Запуск и сопровождение программы
- •Заключение
- •Список литературы
Установка языка Python
Имеется две актуальные версии Python, которые активно поддерживаются сообществом на данный момент: это версии языка 2.x и 3.x. Причем, обе версии разительно отличаются: при попытке запустить программу, написанную на 2.x в среде версии 3.x, выводится сообщение об ошибке. Следовательно, версии несовместимы.
Для разработки приложения, реализующего AES-шифрование, была выбрана версия языка Python 2.7. Пакет Python 2.7 можно скачать с сайта python.org по адресу http://python.org/ftp/python/2.7.3/python-2.7.3.msi.
Также, для написания программы нам понадобится текстовый редактор Notepad++ (который можно скачать с сайта notepad-plus-plus.org), либо одну из бесплатных IDE под Python (например, PyDev).
После установки всех необходимых программ, необходимо прописать переменную PATH для быстрого доступа к среде разработки из командной строки. Для этого необходимо выбрать в контекстном меню Мой компьютер – Свойства – Дополнительно – Переменные среды, найти переменную PATH и через точку с запятой ввести значение C:\Python27. После этого, если набрать в меню Пуск – Выполнить «cmd», а затем в командной строке набрать «python», запустится среда разработки python.
Но, для начала нам нужно написать программу, а затем уже запускать ее через командную строку. В третьей главе настоящей работы рассматривается алгоритм AES, который является стандартом де-факто в США и на данный момент самым надежным шифром для шифрования связи. Именно его реализацию мы и рассмотрим в данной главе.
Библиотека PyCrypto на Python
Итак, ранее говорилось, что Python – это очень гибкий язык с открытым кодом, под который написано очень много библиотек. Перед тем, как перейти к собственной реализации AES-шифрования, хотелось бы вскользь пройтись по такой библиотеке как PyCrypto. На сайте PyCrypto.org можно скачать библиотеку под названием pycrypto версии 2.6, которая позволяет шифровать данные несколькими способами: от DES, Triple DES, AES до RSA. Если на компьютере установлен Python 2.7, то достаточно запустить пакет установки PyCrypto и с библиотекой можно работать.
1: >>> from Crypto.Cipher import AES
2: >>> from Crypto import Random
3: >>>
4: >>> key = b'Sixteen byte key'
5: >>> iv = Random.new().read(AES.block_size)
6: >>> cipher = AES.new(key, AES.MODE_CFB, iv)
7: >>> msg = iv + cipher.encrypt(b'Attack at dawn')
На сайте PyCrypto.org можно найти примеры программ для шифрования. Например, выше рассмотрен пример написания программы для шифрования алгоритмом AES.
Что же здесь происходит? Первые две строки описывают импорт необходимых библиотек из модуля Crypto. В четвертой строке описана строковая переменная key, которая, очевидно, является ключом.
Кстати, здесь необходимо поговорить о динамической типизации в Python. Динамическая типизация – это очень удобная особенность в Python. Здесь, как можно увидеть, нет объявления данных – память отводится сразу же при присвоении переменной значения. Python сам определяет, какой тип данных присвоить переменной. Поэтому, в любом месте программы, даже внутри цикла, может быть определена функция или переменная. Любая переменная, любой класс или функция в Python являются объектами. Даже типы являются объектами. В то же время, Python при работе оперирует не самими объектами а выделяет под них память и делает ссылки.
Но, вернемся к листингу кода. Строки 5 и 6 указывают на то, что мы создаем новый экземпляр класса Random и AES. Random создает случайный ключ, который потом записывает в переменную iv (инициализирующий вектор), а в AES-экземпляр передается три аргумента: ключ, формат AES-шифра (в данном случае Cypher FeedBack) и сгенерированный iv (инициализирующий вектор). В седьмой строке мы получаем зашифрованное сообщение (у экземпляра класса AES cipher есть метод encrypt).
В итоге, если сделать тестовую программу типа:
If __name__= =” __main__”:
print msg
И наша программа вернет зашифрованное сообщение, т.е. выведет msg.
Для расшифровки текста используется метод decrypt, который в качестве аргумента получает зашифрованный текст, и возвращает исходный текст.
Итак, посмотрим, какие алгоритмы шифрования можно использовать с данной библиотекой:
AES – алгоритм
DES – алгоритм
Blowfish – алгоритм
RSA
DSA
ElGamal
SHA
MD5
И еще несколько малоизвестных алгоритмов шифрования. С помощью данной библиотеки можно создать мощный генератор шифров, однако вернемся к чистой реализации нашего алгоритма (все примеры и все API-функции есть на сайте pycrypto.org).