Advanced Encryption Standard (AES), также известный как Rijndael — симметричный алгоритм блочного шифрования, принятый в качестве стандарта шифрования правительством США по результатам конкурса AES. Этот алгоритм хорошо проанализирован и сейчас широко используется, как это было с его предшественником DES. Национальный институт стандартов и технологий США опубликовал спецификацию AES 26 ноября 2001 года после пятилетнего периода, в ходе которого были созданы и оценены 15 кандидатур. 26 мая 2002 года AES был объявлен стандартом шифрования. По состоянию на 2009 год AES является одним из самых распространённых алгоритмов симметричного шифрования. Поддержка AES (и только его) введена фирмой Intel в семейство процессоров x86 начиная с Intel Core i7-980X Extreme Edition, а затем на процессорах Sandy Bridge.
Шифрование - способ преобразования открытой информации в закрытую и обратно. Применяется для хранения важной информации в ненадёжных источниках или передачи её по незащищённым каналам связи. Согласно ГОСТ 28147-89, шифрование подразделяется на процесс зашифровывания и расшифровывания.
В зависимости от алгоритма преобразования данных, методы шифрования подразделяются на гарантированной или временной криптостойкости.
В зависимости от структуры используемых ключей методы шифрования подразделяются на
- симметричное шифрование: посторонним лицам может быть известен алгоритм шифрования, но неизвестна небольшая порция секретной информации - ключа, одинакового для отправителя и получателя сообщения;
асимметричное шифрование: посторонним лицам может быть известен алгоритм шифрования, и, возможно, открытый ключ, но неизвестен закрытый ключ, известный только получателю.
В далеком 1998 году NIST объявил конкурс на создание алгоритма, удовлетворяющего выдвинутым институтом требованиям. Он опубликовал все несекретные данные о тестировании кандидатов на роль AES и потребовал от авторов алгоритмов сообщить о базовых принципах построения, используемых в них констант. В отличие от ситуации с DES, NIST при выборе AES не стал опираться на секретные и, как следствие, запрещенные к публикации данные об исследовании алгоритмов-кандидатов.
Чтобы быть утвержденным в качестве стандарта, алгоритм должен был:
- реализовать шифрование частным ключом;
- представлять собой блочный шифр;
- работать со 128-разрядными блоками данных и ключами трех размеров (128, 192 и 256 разрядов).
Дополнительно кандидатам рекомендовалось:
- использовать операции, легко реализуемые как аппаратно (в микрочипах), так и программно (на персональных компьютерах и серверах);
- ориентироваться на 32-разрядные процессоры;
- не усложнять без необходимости структуру шифра для того, чтобы все заинтересованные стороны были в состоянии самостоятельно провести независимый криптоанализ алгоритма и убедиться, что в нем не заложено каких-либо недокументированных возможностей.
Кроме того, алгоритм, претендующий на роль стандарта, должен распространяться по всему миру на не эксклюзивных условиях и без платы за пользование патентом.
2 Выбор средств реализации
При разработке приложения будет использован язык программирования C# и среда разработки Visual Studio 2015.
C# (произносится «си шарп») — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
Переняв многое от своих предшественников — языков C++, Pascal, Модула, Smalltalk и, в особенности, Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественное наследование интерфейсов).
C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем (однако, эта закономерность была нарушена с выходом C# 3.0, представляющего собой расширения языка, не опирающиеся на расширения платформы .NET). CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, Сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.
3 Шифрование
С момента появления в публичном доступе, стандарт шифрования AES (Advanced Encryption Standard) стал одним из наиболее часто используемых и наиболее безопасных алгоритмов, доступных на сегодняшний день. Агентство Национальной Безопасности США (NSA), помимо прочего занимающееся криптоанализом, относит этот алгоритм к уровню «Совершенно Секретно». История его успеха началась в 1997 году, когда Национальный Институт Стандартов и Технологий США (NIST) объявил конкурс на замену устаревшего стандарта шифрования DES. Алгоритм под названием «Рейндол», разработанный бельгийскими криптографами Доманом и Рейманом, оказался очень безопасным, высокопроизводительным и гибким. Он превзошел ряд конкурентов, и был официально объявлен новым стандартом шифрования AES в 2001 году. Алгоритм основан на нескольких заменах, подстановках и линейных преобразованиях, каждое из которых выполняется блоками по 16 байт, поэтому он называется блоковым шифром. Операции повторяются несколько раз, каждый из которых называется «раунд». В течение каждого раунда, на основе ключа шифрования вычисляется уникальный ключ раунда и встраивается в вычисления. Благодаря подобной блоковой структуре AES, изменение даже одного бита или в ключе, или в текстовом блоке приводит к полному изменению всего шифра – явное преимущество относительно традиционных потоковых шифров. Разница между AES-128, AES-192 и AES-256 заключается только в длине ключа: 128, 192 или 256 бит – радикальное улучшение в сравнении с 56-битовым ключом DES. Для примера: подбор 126-битного AES-ключа современным компьютером занял бы больше времени, чем предполагаемый возраст Вселенной. А Boxcryptor использует 256-битный ключ! На сегодняшний день не существует успешных методов взлома шифров AES.
4 Дешифрование
Листинг 2 – Дешифрование
Для тестирования приложения использовался код, представленный на листинге 3.
Листинг 3 – Тестирование приложения
В результате тестирование данные были зашифрованы и дешифрованы без потери информации, ошибок при тестировании не было.
В результате работы над данным проектом были освоены современные методы шифрования, а в частности Rijndael, написана программа, позволяющая шифровать текстовую информацию различными длинами ключей (128, 192, 256 бит).
Приобретенные навыки активно использовались для оценки эффективности и скорости работы других симметричных алгоритмов шифрования.
Все поставленные цели и задачи выполнены.
Для реализации поставленной задачи использовалась среда программирования Microsoft Visual Studio 2015. Программа реализована в виде Windows Console Application на языке C#.
Скриншоты программы