Uploaded by ilham karimzhanov

Курсач

advertisement
УПРАВЛЕНИЕ ОБРАЗОВАНИЕ ГОРОДА АЛМАТЫ
ИННОВАЦИОННЫЙ ТЕХНИЧЕСКИЙ КОЛЛЕДЖ ГОРОДА АЛМАТЫ
КУРСОВАЯ РАБОТА
на тему: Стандарт шифрования данных AES
дисциплина: Криптографические методы защиты информации
Специальность: 06120200 «Системы информационной безопасности»
Квалификация: 4S06120202 «Техник информационной безопасности»
Выполнил(а): Каримжан Ильхам Рахимжанович
(Ф.И.О. обучающегося)
Группа ТИБ-21Р
Проверил (а): Отегенов Ж. Б.
Дата защиты «04» желтоқсан 2023ж.
Оценка
АЛМАТЫ 2023
1
СОДЕРЖАНИЕ
ВВЕДЕНИЕ ............................................................................................................. 1
Основная часть ....................................................................................................... 2
ГЛАВА 1 Введение в криптографию ................................................................... 2
1.1 Определение криптографии ............................................................................ 2
1.2 Роль шифрования в обеспечении информационной безопасности ............ 3
1.3 Обзор стандартов шифрования ....................................................................... 4
ГЛАВА 2 Основы криптографии.......................................................................... 4
2.1 Ключевые понятия в криптографии ............................................................... 4
2.2 Типы криптографии ......................................................................................... 5
2.3 Хэш-функции .................................................................................................... 6
ГЛАВА 3 Введение в AES ..................................................................................... 7
3.1 Хэш-функции - AES ......................................................................................... 7
3.2 Зачем был создан AES и проблемы предыдущих шифров .......................... 8
3.3 Ключевые требования к AES .......................................................................... 9
ГЛАВА 4 Алгоритм AES ....................................................................................... 9
4.1 Структура AES ................................................................................................. 9
4.2 Раунды и их функции..................................................................................... 11
4.3 Ключи и расписание подключей .................................................................. 12
ГЛАВА 5 Атаки на AES ...................................................................................... 12
5.1 Переборный метод ......................................................................................... 13
5.2 Атаки посредством анализа .......................................................................... 14
ГЛАВА 6 Применение AES в настоящее время ............................................... 14
6.1 Защита данных на уровне операционной системы ..................................... 14
6.2 Применение в протоколах безопасности ..................................................... 15
ГЛАВА 7 Сравнение с другими методами шифрования ................................. 16
7.1 Сравнение с DES (Data Encryption Standard) ............................................... 16
7.2 Преимущества и недостатки по сравнению с другими алгоритмами ...... 16
Специальная часть ............................................................................................... 17
Реализация AES на JavaScript ............................................................................. 17
ЗАКЛЮЧЕНИЕ .................................................................................................... 32
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ ................................................. 33
ВВЕДЕНИЕ
Актуальность темы исследования обосновывается наличием в мире
великой потребности в защите данных. Потому методы шифрования всегда
будут актуальной темой, тем более если это касается одного из самых полезных
методов - AES.
Объектом исследования метод шифрования AES
Предмет исследования – строение, функционал и методы достижения
инструментов шифрования, задействованных в AES.
Целью курсовой работы является получения верного и достаточного полного
представления о методе шифрования данных AES.
Реализация данной цели исследования обусловила необходимость
решения следующих задач:
- Получения сведений об истории становлении и развитии AES.
- Получение необходимых сведений о самой технологии AES.
- Закрепление знаний на практике создания AES.
Степень разработанности проблемы исследования заключается в анализе
эффективности и безопасности алгоритма шифрования AES. В работе
предполагается рассмотрение основных этапов разработки AES, его структуры и
математических принципов, лежащих в его основе. Также, возможным
направлением исследования является оценка устойчивости AES к различным
видам атак, таким как линейный криптоанализ, дифференциальный
криптоанализ и другие методы взлома. Результаты исследования позволят
сделать выводы о текущем уровне надежности AES, а также предложить
возможные улучшения или модификации алгоритма с целью повышения
стойкости к атакам.
Практическая значимость исследования:
Результаты анализа эффективности и стойкости AES могут быть применены
при выборе криптографических средств для защиты конфиденциальной
информации, такой как банковские данные, корпоративные секреты и личная
информация. Понимание уровня уязвимости AES к различным атакам позволит
разработчикам и специалистам по безопасности принимать обоснованные
решения при выборе шифрования для различных приложений и систем.
Курсовая работа на тему: «Стандарт шифрования данных AES» состоит из
введения, 7 глав, 18 параграфов, заключения, списка используемой литературы
и приложений.
1
ОСНОВНАЯ ЧАСТЬ
Глава 1 - Введение в криптографию
1.1 Определение криптографии
Введение в криптографию представляет собой захватывающий погружение в
мир шифрования и секретности, где искусство защиты информации сталкивается
с наукой математики. Криптография играет ключевую роль в обеспечении
безопасности данных, будучи неотъемлемой частью современного цифрового
общества.
Ее
целью
является
создание
методов
обеспечения
конфиденциальности, целостности и подлинности информации в условиях
возможных атак и угроз. Одним из важных направлений в этой области является
симметричное шифрование, где ключевое слово – AES (Advanced Encryption
Standard).
Этот отчет фокусируется на изучении алгоритма AES, выдающегося
достижения в обеспечении безопасности данных. В контексте криптографии,
AES выделяется своей эффективностью и надежностью. Понимание основных
принципов криптографии, таких как симметричные и асимметричные методы
шифрования, формирует фундаментальную базу для изучения AES.
Посредством детального анализа его структуры, раундов и ключей, мы раскроем
внутренние механизмы, лежащие в основе этого алгоритма.
Вмешиваясь в историю AES, отчет также рассмотрит причины создания этого
стандарта и преодоление проблем предыдущих шифров. В конце концов, мы
рассмотрим не только сам алгоритм, но и его применение в современных
технологиях и протоколах безопасности, а также принципиальное сравнение с
другими шифрами. Погружение в мир AES обещает не только предоставить
полное понимание этого шифра, но и подчеркнуть его важность в современном
цифровом ландшафте.
1.2 Роль шифрования в обеспечении информационной безопасности
Роль шифрования в обеспечении информационной безопасности огромна, ибо
оно представляет собой ключевой механизм защиты чувствительных данных от
несанкционированного доступа. В современном цифровом мире, где обмен
информацией стал повседневностью, необходимость в эффективной защите
конфиденциальности, целостности и подлинности данных становится все более
критичной.
2
Шифрование
служит
виртуальным
барьером,
препятствующим
несанкционированным лицам в доступе к чувствительным сведениям. С
помощью математических алгоритмов, шифрование преобразует информацию в
криптографически защищенный вид, который может быть успешно
расшифрован только при наличии правильного ключа. Это обеспечивает
конфиденциальность, предотвращая утечку чувствительных данных даже при
несанкционированном доступе.
Однако, роль шифрования не ограничивается лишь конфиденциальностью.
Оно также обеспечивает целостность данных, гарантируя, что информация
остается неизменной и неповрежденной в процессе передачи или хранения.
Благодаря шифрованию, можно быть уверенным в том, что данные не
подвергались воздействию злонамеренных действий.
Кроме того, шифрование играет ключевую роль в поддержании подлинности
данных. Это особенно важно в сферах, где цифровые подписи и аутентификация
являются неотъемлемой частью безопасности, например, в электронной
коммерции и финансовых транзакциях. Путем применения шифрования можно
быть уверенным, что данные не были поддельны и принадлежат именно тому,
кто утверждает, что они ему принадлежат.
В итоге, шифрование становится непременным инструментом в арсенале
средств обеспечения информационной безопасности, обеспечивая надежную
защиту данных в условиях постоянно развивающихся угроз.
1.3 Обзор стандартов шифрования
Обзор стандартов шифрования является неотъемлемой частью понимания
современной криптографии и обеспечения информационной безопасности.
Существует множество международных стандартов, устанавливающих
принципы и требования для эффективного шифрования, и одним из наиболее
важных из них является Advanced Encryption Standard (AES).
Стандарты шифрования определяют алгоритмы и протоколы, которые
обеспечивают защиту данных от несанкционированного доступа. Они
устанавливают параметры, такие как размер ключа, методы шифрования и
процессы аутентификации, чтобы создать единые и безопасные методы
обработки информации. Одним из наиболее широко принятых и использованных
стандартов является AES, разработанный Национальным институтом стандартов
и технологий (NIST) США.
Другие важные стандарты включают в себя Data Encryption Standard (DES),
предшественника AES, который был первым широко применяемым стандартом
3
симметричного шифрования. DES позднее был заменен AES в связи с
повышением вычислительных мощностей атакующих.
Европейский стандарт шифрования, представленный как Advanced Encryption
Standard New European Schemes for Signatures, Integrity, and Encryption (AESGCM), предоставляет альтернативные методы шифрования и аутентификации.
Этот стандарт активно используется в различных сферах, от телекоммуникаций
до защиты данных в облаке.
Рис. 1.1 Общее понятие о шифровании с общим ключом
Интересным стандартом является также Российский стандарт шифрования
GOST, который предоставляет алгоритмы шифрования, разработанные в
соответствии с требованиями национальной безопасности России.
Обзор этих стандартов позволяет понять многообразие подходов к
шифрованию и выбрать оптимальное решение в зависимости от конкретных
потребностей и контекста использования.
Глава 2 - Основы криптографии
2.1 Ключевые понятия в криптографии
Ключевые понятия в криптографии формируют фундамент для понимания
принципов обеспечения безопасности данных. Основываясь на тщательном
введении в эту науку, ключевые аспекты включают в себя конфиденциальность,
целостность и доступность информации. Конфиденциальность подразумевает
защиту данных от несанкционированного доступа, гарантируя, что только те, кто
имеет право, могут получить к ним доступ. Этого достигается с использованием
4
шифрования, которое трансформирует информацию в непонятный вид,
требующий ключ для расшифровки.
Целостность, в свою очередь, обеспечивает защиту данных от
несанкционированных изменений. Это означает, что информация остается
неизменной и неповрежденной в процессе передачи или хранения. Доступность
гарантирует, что данные доступны для тех, кто имеет на то право, и что они
могут быть получены в нужный момент.
Симметричное и асимметричное шифрование представляют собой ключевые
методы криптографии. В симметричном шифровании используется один и тот
же ключ для шифрования и дешифрования данных, в то время как
асимметричное шифрование включает пару ключей: открытый и закрытый.
Открытый ключ используется для шифрования данных, в то время как закрытый
ключ используется для их дешифрования. Эта двойная структура обеспечивает
более высокий уровень безопасности, особенно в контексте аутентификации и
электронной подписи.
Рис. 2.1 Визуальное представление
РКлючевые понятия в криптографии служат основой для разработки и
понимания методов обеспечения конфиденциальности и целостности данных, их
защиты от внешних угроз и поддержания доступности в требуемый момент.
2.2 Типы криптографии
Криптография представляет собой многофасетную науку, в рамках которой
выделяются два основных типа: симметричная и асимметричная криптография.
Симметричная криптография основана на использовании одного и того же
ключа для обоих процессов шифрования и дешифрования. Это означает, что
стороны обмена данными должны иметь общий секретный ключ. Важным
5
аспектом симметричной криптографии является её высокая скорость обработки
данных, что делает её идеальным выбором для шифрования больших объемов
информации. Однако существенным недостатком является необходимость
безопасного распределения секретных ключей между сторонами обмена, что
иногда представляет собой сложную задачу.
Асимметричная криптография решает проблему распределения ключей,
используя пару ключей: открытый и закрытый. Открытый ключ используется
для шифрования информации, в то время как закрытый ключ служит для её
дешифрования. Одно из основных преимуществ асимметричной криптографии
— возможность безопасного обмена открытыми ключами, что устраняет
необходимость в секретном обмене ключами. Несмотря на высокую степень
безопасности, асимметричные алгоритмы, обычно, медленнее по сравнению с
симметричными, поэтому часто используются в сочетании с последними для
достижения оптимального баланса скорости и безопасности.
Оба типа криптографии находят свое применение в сфере информационной
безопасности, обеспечивая разносторонний подход к защите данных в
различных сценариях.
2.3 Хэш-функции
Хэш-функции представляют собой ключевой элемент в обеспечении
безопасности данных, играя важную роль в области криптографии и
информационной безопасности. Эти функции преобразуют произвольные
входные данные фиксированной длины, создавая уникальную "хэш-сумму" или
"дайджест". Одним из основных применений хэш-функций является
обеспечение целостности данных.
Рис. 2.2 Визулацизация хэщ-функций
6
Хэши используются для проверки целостности передаваемой или хранимой
информации. Если даже небольшое изменение входных данных, например,
добавление или изменение символа, происходит, хэш значительно изменится.
Это позволяет обнаружить даже минимальные изменения в данных, что делает
хэш-функции эффективным средством защиты от подделок и случайных
ошибок.
Кроме того, хэш-функции широко применяются в процессе хранения паролей.
Вместо хранения самих паролей, системы обычно сохраняют хэш-суммы
паролей. Это предотвращает утечки конфиденциальной информации в случае
несанкционированного доступа к хранилищу паролей. Даже при знании хэшсуммы сложно восстановить оригинальный пароль из-за свойства
необратимости хэш-функций.
Хотя хэш-функции являются эффективным средством в защите данных,
важно отметить, что не все хэш-функции одинаково стойки. Современные хэшфункции, такие как SHA-256 или SHA-3, разработаны с учетом требований
криптографической безопасности и стойкости к различным атакам. В разработке
безопасных систем и протоколов безопасности, правильный выбор и
использование хэш-функций играют критическую роль в обеспечении
надежности и целостности данных.
Глава 3 - Введение в AES
3.1 Хэш-функции - AES
Хэш-функции и алгоритм шифрования AES представляют собой две
фундаментальные составляющие в области криптографии, выполняющие
различные задачи в обеспечении безопасности данных.
Хэш-функции, такие как SHA-256 или SHA-3, используются для создания
уникальной "хэш-суммы" входных данных. Эти функции преобразуют
произвольные данные фиксированной длины, что позволяет создать уникальный
"отпечаток" данных. Одним из ключевых применений хэш-функций является
обеспечение целостности данных. Хэши активно используются для проверки
целостности файлов, электронных подписей, а также для хранения хэш-сумм
паролей. Они обладают свойством необратимости, что делает сложным
восстановление исходных данных из хэш-суммы.
С другой стороны, AES является блочным шифром, применяемым для
симметричного шифрования. Он использует один и тот же ключ для шифрования
и дешифрования данных, обеспечивая высокую эффективность и безопасность
при правильном использовании. AES широко применяется в различных
7
областях, включая защиту данных на уровне операционных систем, протоколов
безопасности, и в программном и аппаратном обеспечении.
Критически важно понимать, что эти два типа криптографических методов хэш-функции и AES - выполняют разные функции в обеспечении безопасности
информации. Хэш-функции обеспечивают целостность и проверку данных, в то
время как AES обеспечивает конфиденциальность и защиту данных от
несанкционированного
доступа.
Вместе
они
создают
мощный
криптографический арсенал для обеспечения безопасности данных в цифровой
среде.
3.2 Зачем был создан AES и проблемы предыдущих шифров
Создание AES стало неотъемлемым этапом в развитии криптографии,
вызванным необходимостью преодоления ограничений и уязвимостей
предыдущих шифров. Перед появлением AES на сцене, алгоритм Data Encryption
Standard (DES) использовался в качестве стандарта симметричного шифрования.
Однако, с течением времени, DES стал подвергаться серьезным
криптоаналитическим атакам, вызванным ограниченной длиной ключа (56 бит)
и эволюцией вычислительных мощностей.
Проблемы с безопасностью DES стали все более заметными, и было ясно, что
новый стандарт необходим для соответствия современным стандартам
безопасности. Национальный институт стандартов и технологий (NIST) США
объявил конкурс на разработку нового алгоритма шифрования, который привел
к рождению AES. Работа над AES велась в тесном сотрудничестве с мировым
сообществом криптографов, и его разработка была основана на критериях
эффективности, безопасности и применимости в различных областях.
Основными целями создания AES были увеличение длины ключа для
повышения уровня безопасности, обеспечение эффективности в различных
сценариях использования, а также устойчивость к современным
криптоаналитическим методам. В результате конкурса, Рид Дж. Андерсон,
Венсенц Пайперс, и Брюс Шнайер внесли значительный вклад в разработку
Rijndael, который затем был выбран в качестве алгоритма AES.
Таким образом, создание AES решало проблемы устаревших шифров и
предоставило мировому сообществу надежный, стойкий и эффективный
стандарт шифрования для широкого применения в современных
информационных технологиях.
8
3.3 Ключевые требования к AES
Ключевые требования к AES были сформулированы с учетом стремления к
созданию надежного и эффективного стандарта шифрования, способного
противостоять современным угрозам безопасности. Одним из основных
критериев при разработке AES было обеспечение безопасности данных путем
увеличения длины ключа по сравнению с предыдущим стандартом, Data
Encryption Standard (DES). AES предусматривает использование ключей длиной
128, 192 или 256 бит, что делает алгоритм более стойким к криптоаналитическим
атакам, особенно в условиях постоянно растущей вычислительной мощности.
Важным требованием к AES была его универсальность и применимость в
различных областях, включая защиту данных на уровне операционных систем,
протоколов безопасности и встроенных систем. Эффективность в обработке
данных также является ключевым фактором, особенно в условиях
распространенного использования шифрования в современных технологиях.
AES был спроектирован таким образом, чтобы обеспечить надежную защиту
данных при высокой производительности.
Другим важным требованием была структурная прозрачность, позволяющая
аналитикам и экспертам по безопасности проводить детальный анализ
алгоритма. Это обеспечивает возможность осуществления независимой оценки
стойкости AES и повышает доверие к его использованию в широком спектре
приложений.
Таким образом, ключевые требования к AES включают в себя повышенную
стойкость к криптоаналитическим методам, универсальность, эффективность в
обработке данных и структурную прозрачность, что делает этот стандарт
ключевым элементом в обеспечении безопасности информации в современном
цифровом мире.
Глава 4 - Алгоритм AES
4.1 Структура AES
Структура AES представляет собой блочный шифр, основанный на замене и
перестановке битов данных в блоках фиксированной длины. Алгоритм состоит
из нескольких ключевых элементов, включая подстановочные боксы (S-boxes),
сдвиги строк (ShiftRows), смешивание столбцов (MixColumns) и добавление
раундовых ключей (AddRoundKey).
Первым этапом AES является инициализация блока данных ключом, который
приводится к начальному состоянию блока. Затем применяются
9
последовательные раунды, число которых зависит от длины ключа (10 раундов
для 128-битного ключа, 12 раундов для 192-битного и 14 раундов для 256битного).
Рис 4.1 Первичный этап - визуализация
На каждом раунде блок данных проходит через серию трансформаций.
Сначала происходит подстановка битов с использованием S-boxes, где каждый
байт блока заменяется соответствующим байтом из предопределенной таблицы.
Затем выполняются операции ShiftRows, где каждая строка блока циклически
сдвигается на определенное количество позиций.
Рис4.2 Операция ShiftRows
Следующим этапом является смешивание столбцов, где каждый столбец
блока преобразуется с использованием матричных операций. На последнем
этапе каждый блок данных комбинируется с раундовым ключом путем
побайтового XOR.
10
Рис 4.3 Процесс смешивания таблиц
Рис 4.4 XOR (Исключение или)
Процесс повторяется для каждого раунда, исключая последний, где операции
MixColumns пропускаются. По завершении всех раундов, получается
зашифрованный блок данных. Этот процесс обеспечивает высокую стойкость и
эффективность шифрования, что делает AES востребованным стандартом в
области информационной безопасности.
4.2 Раунды и их функции
Шифр AES использует многовитковый процесс, известный как раунды, для
обеспечения высокой стойкости и эффективности шифрования. Количество
11
раундов зависит от длины ключа и составляет 10 раундов для 128-битного ключа,
12 для 192-битного и 14 для 256-битного. Каждый раунд представляет собой
последовательность тщательно спроектированных трансформаций, призванных
улучшить стойкость системы к различным видам атак.
На начальном этапе каждого раунда блок данных подвергается подстановке
битов через S-boxes, что вносит нелинейность в процесс и усложняет
прогнозирование шифрованного выхода. После этого выполняется смещение
строк в блоке, что создает дополнительные уровни сложности для
потенциальных атакующих. Операция MixColumns, представляющая собой
линейное преобразование, способствует дальнейшему усложнению структуры
данных.
Однако последний раунд отличается от предыдущих. Здесь операция
MixColumns не применяется, что обеспечивает обратимость процесса
шифрования и позволяет корректно дешифровать данные. В конечном итоге,
каждый раунд завершается операцией XOR (побитовое исключающее ИЛИ)
блока данных с раундовым ключом, добавляя к финальному результату
уникальность, зависящую от конкретного раунда и ключа.
Раунды в AES представляют собой сбалансированный набор операций,
который обеспечивает высокую стойкость и эффективность при шифровании
данных. Их последовательное применение создает сложную и нелинейную
структуру,
способную
справляться
с
разнообразными
видами
криптоаналитических атак и обеспечивать безопасность в различных сценариях
использования.
4.3 Ключи и расписание ключей
Система ключей и расписание их подключения являются фундаментальной
частью структуры AES, обеспечивая сложность и стойкость алгоритма
шифрования. Ключи в AES имеют длину 128, 192 или 256 бит в зависимости от
выбора пользователя, и эффективность шифрования напрямую зависит от
правильного управления этими ключами.
Ключи в AES разделяются на несколько категорий, включая ключи раунда
(Round Keys), подключи (Subkeys) и ключ смешивания (Mixing Key). Ключ
раунда используется для каждого раунда шифрования и генерируется на основе
основного ключа, который вводится пользователем. Подключи и ключ
смешивания также получаются из основного ключа, но их использование
происходит на разных этапах внутри раунда.
Расписание подключей представляет собой процесс генерации подключей из
основного ключа для каждого раунда. В зависимости от длины ключа, этот
12
процесс различен, причем для AES-128 используется 10 раундов, для AES-192 12 раундов, и для AES-256 - 14 раундов. Каждый раунд требует свой набор
подключей, и эти подключи образуют расписание, которое вносит
дополнительные уровни сложности и нелинейности в процесс шифрования.
Ключевые расписания и подключи в AES подчеркивают важность
правильного управления и генерации ключей для обеспечения безопасности
шифрования. Процесс генерации ключей внутри AES строго контролируется,
чтобы предотвратить потенциальные уязвимости и атаки. Таким образом,
эффективное управление ключами и точное соблюдение расписания подключей
играют ключевую роль в обеспечении стойкости и безопасности алгоритма AES
в целом.
Глава 5 - Атаки на AES!
5.1 Переборный метод
Переборный метод представляет собой один из наиболее базовых и
трудоемких видов криптоаналитических атак, применяемых к AES. Эта атака
основана на идее последовательного перебора всех возможных ключей,
допустимых для конкретной длины ключа в надежде найти тот, который
расшифрует зашифрованные данные. В случае AES, где используются ключи
длиной 128, 192 или 256 бит, перебор всех возможных комбинаций становится
крайне сложной задачей из-за огромного пространства ключей.
Устойчивость AES к переборным атакам основана на выборе достаточной
длины ключа, что создает огромное количество возможных комбинаций.
Например, для AES-128 возможно 2^128 различных ключей, что создает
великолепный барьер для успешного перебора. Даже с использованием
современных вычислительных мощностей, эта задача становится практически
невыполнимой.
Однако, следует подчеркнуть, что развитие квантовых вычислений может
предоставить новые возможности для атак на AES, в том числе и переборного
метода. Квантовые компьютеры имеют потенциал для решения задач, которые
современные классические компьютеры находят крайне сложными или даже
невыполнимыми, что создает новые вызовы в обеспечении безопасности с
использованием классических криптографических алгоритмов.
Следовательно, несмотря на высокую стойкость AES к переборным атакам на
текущий момент, постоянное развитие технологий и появление новых методов
вычислений подчеркивают важность постоянного улучшения стандартов
шифрования и внимательного отношения к будущим потенциальным угрозам.
13
5.2 Атаки посредством анализа
Атаки на AES с использованием методов анализа представляют собой
серьезную область исследований в области криптографии. Одной из таких атак
является криптографический анализ, который включает в себя систематическое
изучение математических свойств алгоритма для выявления слабостей. Такой
анализ может включать в себя изучение статистических распределений
выходных данных, корреляции между блоками данных или анализ времени
выполнения операций. Например, атаки времени выполнения могут
основываться на том, что различные операции шифрования требуют разного
времени для выполнения в зависимости от ключа или данных, что создает
возможность для атакующего получить информацию о ключе через наблюдение
за временем выполнения.
Другим методом анализа, который может быть использован в атаках на AES,
является дифференциальный криптоанализ. Этот метод основан на изучении
различий в выходных данных для различных входных блоков и ключей.
Атакующие пытаются выявить закономерности в изменениях данных в процессе
шифрования, что может привести к раскрытию ключа. Этот вид атак особенно
актуален при использовании некорректных или слабых раундовых функций.
Необходимость внимательного анализа стойкости AES к различным методам
атак подчеркивает важность регулярного обновления стандартов шифрования и
поиска новых методов защиты. Следовательно, криптографы продолжают
исследовать новые методы атак и разрабатывать улучшенные версии
алгоритмов, чтобы обеспечить стойкость к широкому спектру потенциальных
угроз.
Глава 6 - Применение AES в настоящее время
6.1 Защита данных на уровне операционной системы
Использование AES в современных информационных системах, особенно на
уровне операционных систем, играет решающую роль в обеспечении
безопасности данных. Операционные системы включают в себя различные
механизмы шифрования, использующие AES для защиты хранящейся
информации от несанкционированного доступа.
На уровне операционной системы, AES применяется для шифрования файлов,
папок и даже целых дисков. Это создает дополнительный барьер для защиты
конфиденциальных данных от несанкционированного доступа или утечек.
Шифрование на уровне файловой системы позволяет обеспечить защиту данных
в покое, когда они хранятся на носителях информации.
14
Также, AES широко используется в протоколах безопасности операционных
систем, таких как IPsec (Internet Protocol Security) для обеспечения безопасной
передачи данных по сети. Это особенно важно в контексте облачных вычислений
и передачи данных по открытым сетям, где возможен сбор и анализ трафика.
Благодаря своей высокой стойкости к криптоаналитическим атакам и
эффективности в реальном времени, AES обеспечивает надежный уровень
защиты для операционных систем, обеспечивая конфиденциальность и
целостность данных. В современной цифровой среде, где угрозы
кибербезопасности постоянно эволюционируют, использование AES становится
критическим элементом в обеспечении общей безопасности информации на
уровне операционной системы.
6.2 Применение в протоколах безопасности
Применение AES в современных протоколах безопасности является
фундаментальной составляющей обеспечения конфиденциальности и
целостности данных в цифровой среде. Многие протоколы безопасности
используют AES для шифрования информации во время передачи по сети,
создавая защищенные каналы связи.
Протоколы, такие как TLS/SSL (Transport Layer Security/Secure Sockets Layer),
включают в себя механизмы, основанные на AES, для обеспечения безопасной
передачи данных между клиентами и серверами. AES обычно используется в
режимах шифрования, таких как AES-GCM (Galois/Counter Mode) или AES-CBC
(Cipher Block Chaining), где обеспечивается не только конфиденциальность, но и
аутентификация данных.
IPsec, протокол безопасности на уровне сетевого стека, также активно
использует AES для защиты сетевого трафика. В режиме транспортного или
туннельного шифрования, AES применяется для шифрования пакетов данных,
обеспечивая конфиденциальность и защиту от поддельных пакетов.
Даже протоколы для обеспечения безопасности беспроводных сетей, такие
как WPA3 (Wi-Fi Protected Access 3), могут включать в себя использование AES
для шифрования трафика и обеспечения безопасной аутентификации.
Эффективность и стойкость AES делают его привлекательным выбором для
различных
протоколов
безопасности,
где
необходимо
обеспечить
конфиденциальность данных в условиях постоянно меняющихся угроз.
Использование AES в протоколах безопасности является неотъемлемым
компонентом создания безопасных и надежных сред связи в современных
информационных технологиях.
15
Глава 7 - Сравнение с другими методами шифрования
7.1 Сравнение с DES (Data Encryption Standard)
Сравнение AES и DES представляет значительный переход в области
симметричного шифрования. DES был предшественником AES и использовался
в течение многих лет как стандарт. Однако, с развитием вычислительной
мощности и появлением более сложных криптоаналитических методов,
стойкость DES оказалась под угрозой, что подтолкнуло к созданию AES.
Одним из основных отличий между AES и DES является длина ключа. DES
использует всего 56-битный ключ, что в настоящее время считается
недостаточным для обеспечения стойкости к современным атакам. В то время
как AES предоставляет варианты с ключами длиной 128, 192 и 256 бит, что
обеспечивает значительно более высокий уровень безопасности.
Еще одним важным аспектом при сравнении AES и DES является структура
алгоритмов. AES представляет собой блочный шифр с заменой и перестановкой
битов данных, в то время как DES использовал структуру Фейстеля. Это
позволяет AES предоставить более эффективную и равномерную диффузию
данных, что способствует улучшенной стойкости к различным видам атак.
Скорость шифрования также является значимым фактором при сравнении.
AES обычно считается более быстрым и эффективным по сравнению с DES.
Более длинные ключи AES, несмотря на свою стойкость, обеспечивают высокую
производительность в современных вычислительных системах.
Однако, следует отметить, что DES остается важным историческим этапом в
развитии криптографии, и его применение может сохраняться в контексте
совместимости и поддержки устаревших систем. В целом, сравнение AES и DES
подчеркивает эволюцию требований к безопасности и необходимость
использования современных алгоритмов для защиты информации в
современном цифровом мире.
7.2 Преимущества и недостатки по сравнению с другими алгоритмами
AES представляет собой один из наиболее распространенных и эффективных
методов симметричного шифрования в современном мире. Однако, при
сравнении с другими алгоритмами шифрования, существуют как преимущества,
так и недостатки.
16
Одним из основных преимуществ AES является его высокая стойкость к
криптоаналитическим атакам. У алгоритма есть несколько вариантов с разными
длинами ключей (128, 192 и 256 бит), что позволяет выбирать уровень
безопасности в зависимости от конкретных потребностей. Это делает AES
привлекательным для широкого спектра применений, от защиты данных на
уровне операционных систем до применения в протоколах безопасности.
Эффективность AES также поддерживается высокой скоростью шифрования,
особенно при использовании аппаратных ускорителей. Это делает его
предпочтительным выбором для приложений, где производительность играет
ключевую роль, например, в сетевых протоколах и облачных вычислениях.
Однако, как и у любого шифра, у AES есть недостатки. Некоторые критики
указывают на возможные уязвимости в реализации алгоритма, особенно в
контексте атак, связанных с физическим доступом к устройству. Также, при
анализе преимуществ и недостатков, стоит учитывать вопросы, связанные с
использованием ключей, например, сложность управления и распределения
ключей, особенно при реализации на большом числе устройств.
Сравнительно с другими методами шифрования, такими как RSA или ECC,
AES выигрывает в эффективности на стороне симметричного шифрования,
однако выбор между ними часто зависит от конкретных требований системы.
Например,
методы
асимметричного
шифрования
могут
быть
предпочтительными в контексте обмена ключами и цифровой подписи. В итоге,
выбор конкретного метода шифрования зависит от требований безопасности,
производительности и конкретного сценария использования.
СПЕЦИАЛЬНАЯ ЧАСТЬ
Реализация AES на JavaScript
Этот алгоритм преобразует один 128-битный блок в другой, используя
секретный ключ который нужен для такого преобразования. Для расшифровки
полученного 128-битного блока используют второе преобразование с тем же
секретным ключом. Выглядит это так:
cipher = encrypt(block, key) // шифруем block с помощью key
block = decrypt(cipher, key) // расшифровываем cipher с помощью key
Размер блока всегда равен 128 бит. Размер ключа также имеет
фиксированный размер. Чтобы зашифровать произвольный текст любым
паролем можно поступить так:
 получить хеш от пароля
17



преобразовать хеш в ключ по правилам описанным в стандарте AES
разбить текст на блоки по 128 бит
зашифровать каждый блок функцией cipher
Это можно записать так:
hash = md5(password) // MD5 хеш имеет длину 128 бит
key = keyexpansion(hash) // преобразуем хеш в ключ
blocks = split(text, 16) // разбить текст на блоки по 16 байт
for (i = 0; i < blocks.length; i++)
cipher[i] = encrypt(blocks[i], key)
Чтобы расшифровать массив блоков cipher нужно применить к каждому
блоку decrypt:
hash = md5(password)
key = keyexpansion(hash)
for (i = 0; i < cipher.length; i++)
blocks[i] = decrypt(cipher[i], key)
text = merge(blocks) // соединить все блоки в одну строку
Конечно, длина текста может быть не кратна 128 битам. В таких случаях
можно дополнить текст нулями до нужной длины, а в зашифрованные данные
добавить несколько байт с зашифрованным размером оригинального текста.
Функции aes.encrypt и aes.decrypt в файле aes.js в примере используют этот
подход.
Поле GF(28)
AES активно использует так называемое конечное поле GF(28). Чтобы
написать AES на JavaScript не обязательно знать, что это за поле, но если вы
хотите лучше понять AES, прочтите этот раздел.
Поле GF(28) это числа 0..255 для которых определили особое умножение и
особое сложение. Возмём какое нибудь число из этого поля и представим его в
виде восьми битов: a = a7a6a5a4a3a2a1a0. Точно также представим число b.
Сложение a и b это известная побитовая операция xor:
a + b = a xor b
У сложения есть простые свойства:
a+a=0
-a = 0 - a = a
a - b = a + (-b) = a + b
18
Умножение определяется сложнее. Запишем многочлены с коэффициентами
из битов этих чисел:
p = a7x7 + a6x6 + a5x5 + a4x4 + a3x3 + a2x2 + a1x + a0
q = b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x + b0
Теперь перемножим эти два многочлена и найдём остаток от деления на m:
m = x 8 + x4 + x 3 + x + 1
r = pq mod (m)
Почему выбран именно такой m? У этого многочлена есть только два
делителя-многочлена на которых он делится без остатка: единица и он сам. По
аналогии с простыми числами, многочлен m «простой». Находить остаток от
деления можно также как для обычных чисел: для этого достаточно уметь
умножать, складывать и вычитать многочлены, причём сложение и вычитание
производят по правилам GF(28), т.е. сложение и вычитание многочленов это xor
между каждой парой коэффициентов. Вот два примера:
x3 + x2 + 1 mod (x3 + 1) = x2 // нужно один раз отнять x3+1
x3 + x2 + 1 mod (x2 + 1) = (x3 + x2 + 1) - (x + 1)(x2 + 1) = -x
Многочлен r представим в виде
r = r7x7 + r6x6 + r5x5 + r4x4 + r3x3 + r2x2 + r1x + r0
Его 8 коэффициентов представляют собой 8-битовое число из поля GF(28) и
это число называется произведением a•b. В отличие от сложения, умножение
нельзя найти парой простых побитовых операций. Однако умножение на
произвольный многочлен в поле GF(28) можно свести к умножению на
многочлен x, а умножить на x можно несколькими побитовыми операциями, о
чём пойдёт речь ниже.
Для обозначения многочленов в GF(28) используют 16-ричные цифры.
Например
m = x8 + x4 + x3 + x + 1 = 100011011 = 0x011b = {01}{1b}
Умножить на многочлен x = {02} в поле GF(28) очень просто. Рассмотрим
произведение:
xp = x(a7x7 + a6x6 + a5x5 + a4x4 + a3x3 + a2x2 + a1x + a0) =
a7x8 + a6x7 + a5x6 + a4x5 + a3x4 + a2x3 + a1x<2 + a0x
p = a7a6a5a4a3a2a1a0
19
xp = a7a6a5a4a3a2a1a00 // это сдвиг влево на один бит
Теперь нужно найти остаток от деления на m. Если бит a7 = 1, то нужно один
раз вычесть m. Если a7 = 0 то вычитать ничего не нужно. Итак:
r = xp mod (m) = xp - m если a7 = 1
r = xp mod (m) = xp если a7 = 0
Умножение на x можно записать такой функцией:
gf.xtime = function(b){
var highbit = b & 0x80
var shl = (b << 1) & 0xff
return highbit == 0 ? shl : shl ^ 0x1b
}
Зная как умножать на x можно умножить на любой другой многочлен. Для
примера найдём a•b где a = {3c}, b = {a1}:
b = {a1} = 10100001 = {80} + {20} + {01}
a•b = a•{80} + a•{20} + a•{01} = a•x7 + a•x5 + a =
a•{02}•{02}•{02}•{02}•{02}•{02}•{02} + a•{02}•{02}•{02}•{02}•{02} + a =
{29} + {c1} + {3c} = {d4}
Осталась одна простая операция в поле GF(28). У любого байта b, кроме
нуля, есть обратный байт a = b-1 который обладает свойством a•b = {01}. Все
три функции для работы с полем — умножение на x, умножение двух
произвольных байтов и нахождение обратного — я собрал в маленькую
библиотеку gf на JavaScript.
Таблица SBox
Эта таблица представляет собой 256-байтый массив и используется для
замены одного байта другим. Не обязательно понимать как она получается,
потому что в код можно просто скопировать этот массив. Чтобы узнать чему
равен элемент SBox[b] нужно три действия:
1. найти обратный байт к b в поле GF(28) (ноль оставить без изменений)
2. умножить результат состоящий из восьми битов на матрицу 8×8 из 64
битов
3. добавить {63}
В сумме эти три действия дают афинное преобразование.
Несложно понять как построена эта матрица из битов. Для умножения битов
нужно применять «and», для сложения — «xor». Например:
20
r0 = b0 + b4 + b5 + b6 + b7 + 1
Функцию sbox я написал так:
aes.sbox = function(b){
var m = 0xf8
var r = 0
var q = gf.inv(b) || 0
for (var i = 0; i < 8; i++)
{
r = (r << 1) | bits.xorbits(q & m)
m = (m >> 1) | ((m & 1) << 7)
}
return r ^ 0x63
}
Построенная таблица выглядит так:
63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76
ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0
b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15
04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75
09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84
53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf
d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8
51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2
cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73
60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db
e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79
e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08
ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a
70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e
e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df
8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16
Её можно просто скопировать в код, как часто делают, а можно вычислять
функцией sbox по мере надобности.
Таблица InvSBox
21
Для дешифрования текста AES использует таблицу обратную к SBox.
Таблица InvSBox обладает одним свойством: InvSBox[SBox[i]] = i. InvSBox
выглядит так:
52 09 6a d5 30 36 a5 38 bf 40 a3 9e 81 f3 d7 fb
7c e3 39 82 9b 2f ff 87 34 8e 43 44 c4 de e9 cb
54 7b 94 32 a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e
08 2e a1 66 28 d9 24 b2 76 5b a2 49 6d 8b d1 25
72 f8 f6 64 86 68 98 16 d4 a4 5c cc 5d 65 b6 92
6c 70 48 50 fd ed b9 da 5e 15 46 57 a7 8d 9d 84
90 d8 ab 00 8c bc d3 0a f7 e4 58 05 b8 b3 45 06
d0 2c 1e 8f ca 3f 0f 02 c1 af bd 03 01 13 8a 6b
3a 91 11 41 4f 67 dc ea 97 f2 cf ce f0 b4 e6 73
96 ac 74 22 e7 ad 35 85 e2 f9 37 e8 1c 75 df 6e
47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aa 18 be 1b
fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 cd 5a f4
1f dd a8 33 88 07 c7 31 b1 12 10 59 27 80 ec 5f
60 51 7f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c ef
a0 e0 3b 4d ae 2a f5 b0 c8 eb bb 3c 83 53 99 61
17 2b 04 7e ba 77 d6 26 e1 69 14 63 55 21 0c 7d
Виды AES
Алгоритм AES преобразует блок длиной 128 битов в другой блок той же
длины. Для преобразования применяется расписание ключей w получаемое из
ключа. 128-битный блок в AES представляется в виде матрицы 4×Nb. Стандарт
допускает только одно значение Nb = 4, поэтому длина блока всегда 128 бит,
хотя алгоритм может работать с любым Nb. Длина ключа равна 4Nk байт.
Алгоритм шифрования блока состоит из Nr раундов — применений одной и той
же группы преобразований к 128-битному блоку данных. Стандарт допускает
следующие комбинации этих трёх параметров:
Nk
Nb
Nr
AES128
4
4
10
AES192
6
4
12
AES256
8
4
14
Преобразование KeyExpansion
22
Для шифрования текста AES применяет не пароль или хеш от пароля, а так
называемое «расписание ключей» получаемое из ключа. Это расписание можно
представить как Nr + 1 матриц размера 4×Nb. Алгоритм шифрования делает Nr +
1 шагов и на каждом шаге он, помимо других действий, берёт одну матрицу
4×Nb из «расписания» и поэлементно добавляет её к блоку данных.
Шифрование блока данных
Алгоритм шифрования получает на вход 128-битный блок данных input и
расписание ключей w, которое получается после KeyExpansion. 16-байтый input
он записывает в виде матрицы s размера 4×Nb, которая называется состоянием
AES, и затем Nr раз применяет к этой матрице 4 преобразования. В конце он
записывает матрицу в виде массива и подаёт его на выход — это
зашифрованный блок. Каждое из четырёх преобразований очень простое.
1. AddRoundKey берёт из расписания ключей одну матрицу размера 4×Nb и
поэлементно добавляет её к матрице состояния. Если два раза применить
AddRoundKey, то ничего не изменится, поэтому преобразование обратное к
AddRoundKey это оно само.
2. SubBytes заменяет каждый элемент матрицы состояния соответвующим
элементом таблицы SBox: sij = SBox[sij]. Преобразование SubBytes обратимо.
Обратное к нему находится с помощью таблицы InvSBox.
3. ShiftRows сдвигает i-ую строку матрицы s на i позиций влево, считая i с
нуля. Обратное преобразование InvShiftRows сдвигает строки вправо.
4. MixColumns умножает каждый столбец матрицы s слева на особую
матрицу размера 4×4.
Для шифрования используют [a b c d] = [{02} {03} {01} {01}]. Можно
проверить, что преобразование обратное к MixColumns[{02} {03} {01} {01}]
это MixColumns[{0e} {0b} {0d} {09}].
Схематично шифрование можно изобразить так:
AddRoundKey(0)
for (var i = 1; i <= Nr - 1; i++)
{
SubBytes()
ShiftRows()
MixColumns([0x02, 003, 0x01, 0x01])
AddRoundKey(i)
}
SubBytes()
ShiftRows()
23
AddRoundKey(Nr)Этот алгоритм преобразует один 128-битный блок в
другой, используя секретный ключ который нужен для такого преобразования.
Для расшифровки полученного 128-битного блока используют второе
преобразование с тем же секретным ключом. Выглядит это так:
cipher = encrypt(block, key) // шифруем block с помощью key
block = decrypt(cipher, key) // расшифровываем cipher с помощью key
Размер блока всегда равен 128 бит. Размер ключа также имеет
фиксированный размер. Чтобы зашифровать произвольный текст любым
паролем можно поступить так:
 получить хеш от пароля
 преобразовать хеш в ключ по правилам описанным в стандарте AES
 разбить текст на блоки по 128 бит
 зашифровать каждый блок функцией cipher
Это можно записать так:
hash = md5(password) // MD5 хеш имеет длину 128 бит
key = keyexpansion(hash) // преобразуем хеш в ключ
blocks = split(text, 16) // разбить текст на блоки по 16 байт
for (i = 0; i < blocks.length; i++)
cipher[i] = encrypt(blocks[i], key)
Чтобы расшифровать массив блоков cipher нужно применить к каждому
блоку decrypt:
hash = md5(password)
key = keyexpansion(hash)
for (i = 0; i < cipher.length; i++)
blocks[i] = decrypt(cipher[i], key)
text = merge(blocks) // соединить все блоки в одну строку
Конечно, длина текста может быть не кратна 128 битам. В таких случаях
можно дополнить текст нулями до нужной длины, а в зашифрованные данные
добавить несколько байт с зашифрованным размером оригинального текста.
Функции aes.encrypt и aes.decrypt в файле aes.js в примере используют этот
подход.
Поле GF(28)
24
AES активно использует так называемое конечное поле GF(28). Чтобы
написать AES на JavaScript не обязательно знать, что это за поле, но если вы
хотите лучше понять AES, прочтите этот раздел.
Поле GF(28) это числа 0..255 для которых определили особое умножение и
особое сложение. Возмём какое нибудь число из этого поля и представим его в
виде восьми битов: a = a7a6a5a4a3a2a1a0. Точно также представим число b.
Сложение a и b это известная побитовая операция xor:
a + b = a xor b
У сложения есть простые свойства:
a+a=0
-a = 0 - a = a
a - b = a + (-b) = a + b
Умножение определяется сложнее. Запишем многочлены с коэффициентами
из битов этих чисел:
p = a7x7 + a6x6 + a5x5 + a4x4 + a3x3 + a2x2 + a1x + a0
q = b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x + b0
Теперь перемножим эти два многочлена и найдём остаток от деления на m:
m = x 8 + x4 + x 3 + x + 1
r = pq mod (m)
Почему выбран именно такой m? У этого многочлена есть только два
делителя-многочлена на которых он делится без остатка: единица и он сам. По
аналогии с простыми числами, многочлен m «простой». Находить остаток от
деления можно также как для обычных чисел: для этого достаточно уметь
умножать, складывать и вычитать многочлены, причём сложение и вычитание
производят по правилам GF(28), т.е. сложение и вычитание многочленов это xor
между каждой парой коэффициентов. Вот два примера:
x3 + x2 + 1 mod (x3 + 1) = x2 // нужно один раз отнять x3+1
x3 + x2 + 1 mod (x2 + 1) = (x3 + x2 + 1) - (x + 1)(x2 + 1) = -x
Многочлен r представим в виде
r = r7x7 + r6x6 + r5x5 + r4x4 + r3x3 + r2x2 + r1x + r0
Его 8 коэффициентов представляют собой 8-битовое число из поля GF(28) и
это число называется произведением a•b. В отличие от сложения, умножение
нельзя найти парой простых побитовых операций. Однако умножение на
25
произвольный многочлен в поле GF(28) можно свести к умножению на
многочлен x, а умножить на x можно несколькими побитовыми операциями, о
чём пойдёт речь ниже.
Для обозначения многочленов в GF(28) используют 16-ричные цифры.
Например
m = x8 + x4 + x3 + x + 1 = 100011011 = 0x011b = {01}{1b}
Умножить на многочлен x = {02} в поле GF(28) очень просто. Рассмотрим
произведение:
xp = x(a7x7 + a6x6 + a5x5 + a4x4 + a3x3 + a2x2 + a1x + a0) =
a7x8 + a6x7 + a5x6 + a4x5 + a3x4 + a2x3 + a1x<2 + a0x
p = a7a6a5a4a3a2a1a0
xp = a7a6a5a4a3a2a1a00 // это сдвиг влево на один бит
Теперь нужно найти остаток от деления на m. Если бит a7 = 1, то нужно один
раз вычесть m. Если a7 = 0 то вычитать ничего не нужно. Итак:
r = xp mod (m) = xp - m если a7 = 1
r = xp mod (m) = xp если a7 = 0
Умножение на x можно записать такой функцией:
gf.xtime = function(b){
var highbit = b & 0x80
var shl = (b << 1) & 0xff
return highbit == 0 ? shl : shl ^ 0x1b
}
Зная как умножать на x можно умножить на любой другой многочлен. Для
примера найдём a•b где a = {3c}, b = {a1}:
b = {a1} = 10100001 = {80} + {20} + {01}
a•b = a•{80} + a•{20} + a•{01} = a•x7 + a•x5 + a =
a•{02}•{02}•{02}•{02}•{02}•{02}•{02} + a•{02}•{02}•{02}•{02}•{02} + a =
{29} + {c1} + {3c} = {d4}
Осталась одна простая операция в поле GF(28). У любого байта b, кроме
нуля, есть обратный байт a = b-1 который обладает свойством a•b = {01}. Все
три функции для работы с полем — умножение на x, умножение двух
произвольных байтов и нахождение обратного — я собрал в маленькую
библиотеку gf на JavaScript.
26
Таблица SBox
Эта таблица представляет собой 256-байтый массив и используется для
замены одного байта другим. Не обязательно понимать как она получается,
потому что в код можно просто скопировать этот массив. Чтобы узнать чему
равен элемент SBox[b] нужно три действия:
1. найти обратный байт к b в поле GF(28) (ноль оставить без изменений)
2. умножить результат состоящий из восьми битов на матрицу 8×8 из 64
битов
3. добавить {63}
В сумме эти три действия дают афинное преобразование:
Несложно понять как построена эта матрица из битов. Для умножения битов
нужно применять «and», для сложения — «xor». Например:
r0 = b0 + b4 + b5 + b6 + b7 + 1
Функцию sbox я написал так:
aes.sbox = function(b){
var m = 0xf8
var r = 0
var q = gf.inv(b) || 0
for (var i = 0; i < 8; i++)
{
r = (r << 1) | bits.xorbits(q & m)
m = (m >> 1) | ((m & 1) << 7)
}
return r ^ 0x63
}
Построенная таблица выглядит так:
63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76
ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0
b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15
04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75
09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84
27
53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf
d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8
51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2
cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73
60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db
e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79
e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08
ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a
70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e
e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df
8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16
Её можно просто скопировать в код, как часто делают, а можно вычислять
функцией sbox по мере надобности.
Таблица InvSBox
Для дешифрования текста AES использует таблицу обратную к SBox.
Таблица InvSBox обладает одним свойством: InvSBox[SBox[i]] = i. InvSBox
выглядит так:
52 09 6a d5 30 36 a5 38 bf 40 a3 9e 81 f3 d7 fb
7c e3 39 82 9b 2f ff 87 34 8e 43 44 c4 de e9 cb
54 7b 94 32 a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e
08 2e a1 66 28 d9 24 b2 76 5b a2 49 6d 8b d1 25
72 f8 f6 64 86 68 98 16 d4 a4 5c cc 5d 65 b6 92
6c 70 48 50 fd ed b9 da 5e 15 46 57 a7 8d 9d 84
90 d8 ab 00 8c bc d3 0a f7 e4 58 05 b8 b3 45 06
d0 2c 1e 8f ca 3f 0f 02 c1 af bd 03 01 13 8a 6b
3a 91 11 41 4f 67 dc ea 97 f2 cf ce f0 b4 e6 73
96 ac 74 22 e7 ad 35 85 e2 f9 37 e8 1c 75 df 6e
47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aa 18 be 1b
fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 cd 5a f4
1f dd a8 33 88 07 c7 31 b1 12 10 59 27 80 ec 5f
60 51 7f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c ef
a0 e0 3b 4d ae 2a f5 b0 c8 eb bb 3c 83 53 99 61
17 2b 04 7e ba 77 d6 26 e1 69 14 63 55 21 0c 7d
Виды AES
Алгоритм AES преобразует блок длиной 128 битов в другой блок той же
длины. Для преобразования применяется расписание ключей w получаемое из
ключа. 128-битный блок в AES представляется в виде матрицы 4×Nb. Стандарт
допускает только одно значение Nb = 4, поэтому длина блока всегда 128 бит,
хотя алгоритм может работать с любым Nb. Длина ключа равна 4Nk байт.
Алгоритм шифрования блока состоит из Nr раундов — применений одной и той
28
же группы преобразований к 128-битному блоку данных. Стандарт допускает
следующие комбинации этих трёх параметров:
Nk
Nb
Nr
AES-128
4
4
10
AES-192
6
4
12
AES-256
8
4
14
Преобразование KeyExpansion
Для шифрования текста AES применяет не пароль или хеш от пароля, а так
называемое «расписание ключей» получаемое из ключа. Это расписание можно
представить как Nr + 1 матриц размера 4×Nb. Алгоритм шифрования делает Nr +
1 шагов и на каждом шаге он, помимо других действий, берёт одну матрицу
4×Nb из «расписания» и поэлементно добавляет её к блоку данных.
Шифрование блока данных
Алгоритм шифрования получает на вход 128-битный блок данных input и
расписание ключей w, которое получается после KeyExpansion. 16-байтый input
он записывает в виде матрицы s размера 4×Nb, которая называется состоянием
AES, и затем Nr раз применяет к этой матрице 4 преобразования. В конце он
записывает матрицу в виде массива и подаёт его на выход — это
зашифрованный блок. Каждое из четырёх преобразований очень простое.
1. AddRoundKey берёт из расписания ключей одну матрицу размера 4×Nb и
поэлементно добавляет её к матрице состояния. Если два раза применить
AddRoundKey, то ничего не изменится, поэтому преобразование обратное к
AddRoundKey это оно само.
2. SubBytes заменяет каждый элемент матрицы состояния соответвующим
элементом таблицы SBox: sij = SBox[sij]. Преобразование SubBytes обратимо.
Обратное к нему находится с помощью таблицы InvSBox.
3. ShiftRows сдвигает i-ую строку матрицы s на i позиций влево, считая i с
нуля. Обратное преобразование InvShiftRows сдвигает строки вправо.
4. MixColumns умножает каждый столбец матрицы s слева на особую
матрицу размера 4×4:
Для шифрования используют [a b c d] = [{02} {03} {01} {01}]. Можно
проверить, что преобразование обратное к MixColumns[{02} {03} {01} {01}]
это MixColumns[{0e} {0b} {0d} {09}].
Схематично шифрование можно изобразить так:
29
AddRoundKey(0)
for (var i = 1; i <= Nr - 1; i++)
{
SubBytes()
ShiftRows()
MixColumns([0x02, 003, 0x01, 0x01])
AddRoundKey(i)
}
SubBytes()
ShiftRows()
AddRoundKey(Nr)
Расшифровка
Как видно, для шифрования блока данных AES последовательно применяет
к нему много обратимых преобразований. Для расшифровки нужно применить
обратные преобразования в обратном порядке.
Немного оптимизации
Функция sbox имеет всего 256 возможных входных значений и 256
возможных выходных значений. Чтобы не вычислять много раз sbox для одного
аргумента, нужно кешировать результаты. На JavaScript это несложно сделать
даже не меняя код написанный ранее. Для этого нужно всего лишь дописать
ниже вот это:
Function.prototype.cached = function(){
var old = this
var cache = {}
return function(x)
{
if (cache[x] !== undefined)
return cache[x]
cache[x] = old(x)
return cache[x]
}
}
aes.sbox = aes.sbox.cached()
30
Этот код заменяет sbox функцией которая кеширует результаты sbox. Тоже
самое можно сделать для любой функции, например для invsbox и rcon. Этот же
приём можно применить для функции gf.mul которая умножает два байта в
поле GF(28), но в этом случае размер кеша будет равен 256×256 элементов, что
довольно много.
Расшифровка
Как видно, для шифрования блока данных AES последовательно применяет
к нему много обратимых преобразований. Для расшифровки нужно применить
обратные преобразования в обратном порядке.
Немного оптимизации
Функция sbox имеет всего 256 возможных входных значений и 256
возможных выходных значений. Чтобы не вычислять много раз sbox для одного
аргумента, нужно кешировать результаты. На JavaScript это несложно сделать
даже не меняя код написанный ранее. Для этого нужно всего лишь дописать
ниже вот это:
Function.prototype.cached = function(){
var old = this
var cache = {}
return function(x)
{
if (cache[x] !== undefined)
return cache[x]
cache[x] = old(x)
return cache[x]
}
}
aes.sbox = aes.sbox.cached()
ЗАКЛЮЧЕНИЕ
В заключение, изучение AES выявляет его фундаментальное значение в
обеспечении безопасности информации в современном мире. AES стал
стандартом в области симметричного шифрования благодаря своей высокой
стойкости, эффективности и универсальной применимости.
31
Одним из ключевых аспектов преимуществ AES является его способность
эффективно защищать данные на различных уровнях. Начиная от использования
на уровне операционных систем для шифрования файлов и дисков, заканчивая
включением в протоколы безопасности, AES обеспечивает надежный механизм
защиты.
Сравнение с предшествующими стандартами, такими как DES, подчеркивает
эволюцию требований к криптографии. Увеличение длины ключа,
усовершенствованные методы шифрования и общая надежность делают AES
более устойчивым и современным алгоритмом.
Однако, несмотря на его множество преимуществ, важно осознавать
постоянное развитие криптографических алгоритмов и возможные вызовы.
Подход к безопасности данных должен оставаться гибким и приспособленным к
новым тенденциям в кибербезопасности.
В целом, AES играет ключевую роль в защите конфиденциальности и
целостности данных в современной цифровой эре. Его использование на
различных уровнях информационных систем подчеркивает его важность и
надежность в сфере обеспечения безопасности.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1. Как устроен AES (Habr) - https://habr.com/ru/articles/112733/
2. AES: Стандарт шифрования AES https://electromicro.ru/resources/wiki/aes/aes1/
3. Симметричный алгоритм блочного шифрования Advanced Encryption Standart
(Habr) - https://habr.com/ru/articles/534620/
32
4. Paar, C., & Pelzl, J. (2010). "Understanding Cryptography: A Textbook for
Students and Practitioners." Springer.
5. Dworkin, M. (2001). "Recommendation for Block Cipher Modes of Operation:
Galois/Counter Mode (GCM) and GMAC." NIST Special Publication 800-38D.
6. Schneier, B. (1996). "Applied Cryptography: Protocols, Algorithms, and Source
Code in C." John Wiley & Sons.
7. Katz, J., & Lindell, Y. (2014). "Introduction to Modern Cryptography." CRC
Press.
8. Ristenpart, T., Shrimpton, T., & Van Dijk, M. (2006). "Collisions for 70% of
SHA-1." Advances in Cryptology – CRYPTO 2005.
9. Menezes, A., van Oorschot, P., & Vanstone, S. (1997). "Handbook of Applied
Cryptography." CRC Press. (ссылка)
10. Stallings, W. (2006). "Cryptography and Network Security: Principles and
Practice." Prentice Hall.
33
Download