Алгоритм шифрования aes

Содержание

DES (стандарт шифрования данных) и AES (расширенный стандарт шифрования) являются симметричным блочным шифром. AES был введен для преодоления недостатков DES. Поскольку DES имеет меньший размер ключа, что делает его менее безопасным для преодоления, был введен тройной DES, но он оказался медленнее. Следовательно, позже AES был представлен Национальным институтом стандартов и технологий.

Основное различие между DES и AES заключается в том, что в DES блок открытого текста делится на две половины перед запуском основного алгоритма, тогда как в AES весь блок обрабатывается для получения зашифрованного текста.

Давайте обсудим еще несколько различий между DES и AES с помощью сравнительной таблицы, показанной ниже.

Проверка NIST / CSEC

Программа проверки криптографических модулей (CMVP) осуществляется совместно Национальным институтом стандартов и технологий (NIST) правительства США и Управлением безопасности связи (CSE) правительства Канады. Правительство США требует использования криптографических модулей, утвержденных в соответствии с NIST FIPS 140-2, для шифрования всех данных, имеющих классификацию «Чувствительные, но неклассифицированные» (SBU) или выше. Из NSTISSP № 11, Национальная политика, регулирующая получение информации: «Продукты шифрования для защиты секретной информации будут сертифицированы NSA, а продукты шифрования, предназначенные для защиты конфиденциальной информации, будут сертифицированы в соответствии с NIST FIPS 140-2».

Правительство Канады также рекомендует использовать утвержденные FIPS 140 криптографические модули в несекретных приложениях своих ведомств.

Хотя публикация NIST 197 («FIPS 197») является уникальным документом, охватывающим алгоритм AES, поставщики обычно обращаются к CMVP в соответствии с FIPS 140 и просят одновременно проверить несколько алгоритмов (например, Triple DES или SHA1 ). Следовательно, редко можно найти криптографические модули, которые однозначно проверены FIPS 197, а сам NIST обычно не тратит время на то, чтобы перечислить проверенные модули FIPS 197 отдельно на своем общедоступном веб-сайте. Вместо этого проверка FIPS 197 обычно просто указывается как нотация «Утверждено FIPS: AES» (с конкретным номером сертификата FIPS 197) в текущем списке проверенных криптографических модулей FIPS 140.

Программа проверки криптографических алгоритмов (CAVP) позволяет проводить независимую проверку правильности реализации алгоритма AES. Успешная проверка приводит к появлению в списке на странице проверок NIST. Это тестирование является предварительным условием для проверки модуля FIPS 140-2, описанной ниже. Однако успешная проверка CAVP никоим образом не означает, что криптографический модуль, реализующий алгоритм, безопасен. Криптографический модуль без проверки FIPS 140-2 или специального одобрения NSA не считается безопасным правительством США и не может использоваться для защиты правительственных данных.

Проверка FIPS 140-2 является сложной задачей как с технической, так и с финансовой точки зрения. Существует стандартная батарея тестов, а также элемент проверки исходного кода, который необходимо пройти в течение нескольких недель. Стоимость проведения этих тестов в утвержденной лаборатории может быть значительной (например, более 30 000 долларов США) и не включает время, необходимое для написания, тестирования, документирования и подготовки модуля для проверки. После проверки модули должны быть повторно представлены и повторно оценены, если они каким-либо образом изменены. Это может варьироваться от простых обновлений документов, если функциональные возможности безопасности не изменились, до более существенного набора повторных проверок, если на функциональные возможности безопасности это изменение повлияло.

Вступление

В 80-х годах основным симметричным криптоалгоритмом для внутреннего применения в США являлся DES (Data Encryption Standard). Однако уже в 90-х годах стали проявляться его основные недостатки. Главным из которых являлась длина ключа, составляющая 56 бит. Такой размер становился недостаточно большим ввиду постоянного роста производительности ЭВМ, так как ключ мог быть вскрыт методом обычного перебора всех возможных вариантов шифрования.

По этим причинами в 1997 году NIST (National Institute of Standards and Technology,) объявил конкурс на новый стандарт симметричного криптоалгоритма. Были установлены следующие обязательные требования к кандидатам:

  • 128-битный размер блока шифруемых данных;

  • Не менее 3 размеров ключей (128, 192, 256 бит), которые должны поддерживаться алгоритмом;

  • Использование операций, легко реализуемых и аппаратно, и программно;

  • Простота структуры шифра, чтобы заинтересованные стороны могли самостоятельно проводить криптоанализ;

Победителем этого конкурса, названного AES – Advanced Encryption Standard, стал алгоритм Rijndael (далее алгоритм AES). Он продемонстрировал устойчивость к атакам, относительно низкий уровень энергопотребления и относительно небольшое время работы. Кроме того, алгоритму присущ внутренний параллелизм, за счет этого эффективно используются процессорные ресурсы, и дополнительно уменьшается время работы алгоритма.

Аппаратная реализация DES

Для написания быстрой аппаратной реализации буду использовать конвейер. За основу брал работу , однако генерирование ключа решил делать по-другому. Стоит обсудить стадии вычислений.

Начальная перестановка не требует никаких логических элементов, так что эта стадия однозначно быстрая, то же касается конечной перестановки и всех перестановок в генерировании ключа. Вычисление ключей делается параллельно с самим шифрованием, единственная стадия вычислений, требующая времени, это расширение исходного ключа битами для обнаружения ошибок. Хотя, как я писал выше, зачастую ключ приходит уже расширенный, так что эта часть вычислений оказывается ненужной.

Самая долгая часть это раунд шифрования, а именно, вычисление функции f. Функция расширения не требует логических элементов в реализации, то же касается перестановки P. Так что потребуется время на xor с ключом, и, самое долгое, преобразование S.

Преобразование S буду реализовывать при помощи таблицы поиска.

Теперь можно обсудить конвейеризацию. Самый очевидный и практически удобный вариант разбить на стадии по каждому раунду (см. рис. 1). Так же удобно добавить входные триггеры, на рисунке это stage 0.

Перейду к блоку, который будет производить шифрование одного раунда. Это, во-первых, вычисление функции f, а во-вторых вычисление рекуррентного соотношения для Ri. На вход блока подается два вектора R(i-1) и L(i-1) длинны 32 бит и ключ ki длинны 48 бит. На выходе блока формируется результат раунда Ri и Li. Вычисление ключа сделаю в отдельном блоке. Весь код написан на языке System Verilog.

Генерация ключа производится последовательным сдвигом на каждой стадии, таким образом следующий вектор можно загружать сразу после первого раунда шифрования.

Так же нужны сигналы загрузки и готовности результата, однако я их не реализовывал, потому что в зависимости от задачи на них ставятся различные требования, а для тестирования можно обойтись и без них, просто последовательно загружая данные.

Так же понадобится реализация функции fdecrypt. Т.к. расшифровка производится обратной сетью Фейстеля, то по сути нужно просто поменять местами Lout и Rout в блоке fencrypt. Так же придется изменить блок генерации ключей, т.к. теперь 16-й ключ нужен на первой стадии, 15-й на второй и т.д.

Все исходники загружены на мой гитхаб.

Теперь опишу тестирование блока DES. Тестировать отдельные функции перестановки я не вижу смысла потому что для их тестирования логично подавать векторы с одним битом равным единицы и всеми остальными равными нулю, а тогда проверка результата сводится к повторению написания таблицы перестановки. Так что для их проверки выпишу несколько произвольных входных векторов и ключей.

Имеет смысл проверить S-таблицы. Для этого я выпишу 512 = 64*8 тестовых вектора с ключом такие, что они покрывают все значения в S-таблице. Я использовал все ключи key = 64’h0, а тестовые векторы генерировал таким образом: выбираю S-таблицу, выбираю в ней ячейку, которую я хочу протестировать. Выписываю вектор, в котором нужные биты для для выбранной ячейки равны единицы, а все остальные равны нулю. Далее, я делаю обратную перестановку функции расширения E и полученный 32-битный вектор дополняю нулями до 64-битного. И, наконец, делаю обратную перестановку OP. Таким образом, каждый вектор последовательно пробегает каждую ячейку S-таблицы. С получившимися тестовыми векторами можно ознакомится в файле тестбенча на гитхабе.

Для тестирования блока расшифровки я использовал те же тестовые векторы, только поменял местами входной вектор с ожидаемым результатом.

Т.к. реализация у меня конвейеризированная, то в одном параллельном блоке по каждому отрицательному фронту я выставляю значения ключа и данных, а в другом параллельном блоке сначала жду 17 положительных фронтов (16 стадий вычисления и одна входная), а затем по каждому положительному фронту читаю значение и сравниваю с ожидаемым.

Теперь, у меня есть написанный и протестированный RTL модуля DES для шифрования и дешифровки.

Режимы безопасности Wi-Fi

Ещё не запутались? Всё, что вам действительно нужно сделать, это выбрать один, самый безопасный вариант в списке, который работает с вашими устройствами.

Вот варианты, которые вы, вероятно, увидите на своем маршрутизаторе:

  • Open (рискованно): в открытых сетях Wi-Fi нет кодовой фразы. Вы не должны настраивать открытую сеть Wi-Fi – это все равно, что снять замок с входной двери.
  • WEP 64 (рискованно): старый стандарт протокола WEP – уязвим, и вы не должны его использовать.
  • WEP 128 (рискованно): это тот же WEP, но с большим размером ключа шифрования. На самом деле, он столь уязвим, как WEP 64.
  • WPA-PSK (TKIP): используется исходная версия протокола WPA (по существу WPA1). Он был заменен WPA2 и не является безопасным.
  • WPA-PSK (AES): используется оригинальный протокол WPA, но TKIP заменен более современным AES-шифрованием. Он предлагается в качестве промежуточного варианта: устройства, поддерживающие AES, почти всегда поддерживают WPA2, а устройства, требующие WPA, почти никогда не будут поддерживать шифрование AES. Таким образом, этот вариант имеет мало смысла.
  • WPA2-PSK (TKIP): используется современный стандарт WPA2 со старым шифрованием TKIP. Это небезопасно, и подходит, если у вас старые устройства, которые не могут подключиться к сети WPA2-PSK (AES).
  • WPA2-PSK (AES): Это самый безопасный вариант. Он использует WPA2, новейший стандарт шифрования Wi-Fi и новейший протокол шифрования AES. Вы должны использовать этот параметр. На некоторых устройствах вы просто увидите опцию «WPA2» или «WPA2-PSK». Если вы это сделаете, вероятно, будет использовать AES, так как это выбор здравого смысла.
  • WPAWPA2-PSK (TKIP/AES): некоторые устройства предлагают и даже рекомендуют этот вариант смешанного режима. Эта опция позволяет использовать как WPA, так и WPA2, как с TKIP, так и с AES. Это обеспечивает максимальную совместимость с любыми древними устройствами, которые у вас могут быть, но также позволяет злоумышленникам проникать в вашу сеть, взламывая более уязвимые протоколы WPA и TKIP.

Сертификация WPA2 стала доступной в 2004 году. С 2006 года сертификация WPA2 стала обязательной. Любое устройство, изготовленное после 2006 года с логотипом «Wi-Fi», должно поддерживать шифрование WPA2.

Поскольку ваши устройства с поддержкой Wi-Fi, скорее всего, не старее 10 лет, вы не будете испытывать проблем при выборе WPA2-PSK (AES). Если устройство перестает работать, вы всегда можете его изменить. Хотя, если вам важна ваша безопасность, то лучше купить новое устройство, выпущенное после 2006 года.

Как перейти с TKIP на AES

Случай 1. Точка доступа работает в режиме TKIP+AES

В этом случае вам достаточно изменить тип шифрования на клиентских устройствах. Проще всего это сделать, удалив профиль сети и подключившись к ней заново.

Случай 2. Точка доступа использует только TKIP

В этом случае:

1. Сперва зайдите на веб-интерфейс точки доступа (или роутера соответственно). Смените шифрование на AES и сохраните настройки (подробнее читайте ниже).

2. Измените шифрование на клиентских устройствах (подробнее — в следующем параграфе). И опять же, проще забыть сеть и подключиться к ней заново, введя ключ безопасности.

Внутри раунда. Операция 2: ShiftRows

Мы взяли наш открытый текст, применили часть нашего раундового ключа, то есть наш первоначальный ключ, и затем в начале раунда мы сделали подстановку, используя S-блок. После этого мы собираемся сдвинуть строки с помощью функции ShiftRows.

На самом деле это просто. С первым рядом мы ничего не делаем.

Второй ряд мы передвинем на один шаг влево. Тогда байт 1 пройдет весь путь в конец строки, потому что элементы движутся по кругу. Этот байт движется сюда, этот – сюда, а этот – сюда. А первый, очевидно, движется в конец строки.

Этот ряд тоже движется, но уже на два шага влево. Так что этот байт движется сюда, этот – сюда, этот – в конец ряда и так далее, а четвертый ряд сдвигается на три шага влево, результат такой же, как если бы этот ряд сдвигался вправо на один шаг.

Так что этот байт движется вот сюда, этот – сюда и так далее.

Помните, что этот процесс многократно повторяется, и что наша цель – переставить элементы и перемешать их. Так вот, если на данном этапе мы передвигаем байты из одного столбца в другой в пределах строки, когда через минуту мы перейдем к следующей операции, на этот раз внутри столбцов, вы увидите, что на самом деле мы смешиваем элементы во всей матрице. Поэтому всего за пару раундов всё очень сильно перемешивается. Очевидно, это очень хорошо, потому что взломать такой шифр будет гораздо труднее.

Итак, мы просто берем байты и переставляем их в другое место в пределах матрицы. Теперь мы подходим к функции MixColumns, которая следует за SubBytes. 

Длина ключей асимметричного алгоритма

Эффективность криптосистем с открытым ключом зависит от сложности (вычислительной и теоретической) некоторых математических задач, таких как целочисленная факторизация . На решение этих проблем уходит много времени, но обычно это быстрее, чем перебирать все возможные ключи грубой силой. Таким образом, асимметричные ключи должны быть длиннее для эквивалентной устойчивости к атакам, чем ключи симметричного алгоритма. Предполагается, что наиболее распространенные методы будут слабыми против достаточно мощных квантовых компьютеров в будущем.

С 2015 года NIST рекомендует минимум 2048-битных ключей для RSA , что является обновлением широко принятой рекомендации минимум 1024-битных ключей с 2002 года.

1024-битные ключи RSA эквивалентны по силе 80-битным симметричным ключам, 2048-битные ключи RSA — 112-битным симметричным ключам, 3072-битные ключи RSA — 128-битным симметричным ключам и 15360-битные ключи RSA — 256-битным. симметричные ключи. В 2003 году , RSA Security утверждает , что 1024-битные ключи, скорее всего, станут crackable некоторое время между 2006 и 2010 годами , в то время как 2048-битные ключи не достаточны до 2030 г. По состоянию на 2020 г. крупнейший ключ RSA публично известно, что трещины является RSA-250 с 829 бит.

Алгоритм Диффи-Хеллмана с конечным полем имеет примерно такую ​​же силу ключа, что и RSA, для тех же размеров ключей. Рабочий коэффициент для взлома Диффи-Хеллмана основан на проблеме дискретного логарифмирования , которая связана с проблемой целочисленной факторизации, на которой основана сила RSA. Таким образом, 2048-битный ключ Диффи-Хеллмана имеет примерно такую ​​же стойкость, как 2048-битный ключ RSA.

Криптография с эллиптической кривой (ECC) — это альтернативный набор асимметричных алгоритмов, который эквивалентно безопасен с более короткими ключами, требуя только примерно вдвое больше битов, чем эквивалентный симметричный алгоритм. 256-битный ключ ECDH имеет примерно такой же коэффициент безопасности, как 128-битный ключ AES. Сообщение, зашифрованное с помощью алгоритма эллиптического ключа с использованием 109-битного ключа, было взломано в 2004 году.

Агентство национальной безопасности (NSA) ранее рекомендовало 256-битный ECC для защиты секретной информации до уровня SECRET и 384-битный для TOP SECRET; В 2015 году он объявил о планах перехода на квантово-устойчивые алгоритмы к 2024 году, а до тех пор рекомендует 384-битный код для всей секретной информации.

Преимущества AES

К основным преимуществам данного алгоритма относят:

  • Рассеивание — изменение любого знака ключа или открытого текста влияет на большое количество знаков шифротекста.

  • Перемешивание — используемые преобразования затрудняют получение статистических зависимостей между открытым и закрытым текстом.

  • Не подвержен многим видам криптоаналитических атак, таких как: дифференциальный криптоанализ, линейный криптоанализ, square — атака.

  • Байт-ориентированная структура, что дает хорошие перспективы для реализации алгоритма в будущих процессорах.

  • Высокое быстродействие на различных платформах.

Можно ли восстановить расширенный ключ, зная какой-либо из раундовых?

Достаточно интересный вопрос, возникший у меня при написании этой статьи.

Для ответа на него давайте рассмотрим расширенный ключ как ряд 32-х битных слов: w, w1, w2, w3, …, w40, w41, w42, w43, где w, w1, w2, w3 — 128-битный ключ AES, а w40, w41, w42, w43 — последний раундовый ключ. Процесс расширения ключа определяется как wi = wi-4 xor Fi(wi-1), где Fi — это рассмотренная выше функция, определяемая процедурой KeyExpansion. Начиная с w, w1, w2, w3 этот процесс позволяет вычислить остальную часть расширенного ключа.

Теперь давайте предположим, что злоумышленнику известен последний раундовый ключ шифрования AES-128. Он может переписать процесс расширения ключа следующим образом: wj = wj+4 xor Fj+4(wj+3). Это получается простой заменой j = i — 4 и переупорядочиванием. Таким образом, злоумышленник, имея в распоряжении w40, w41, w42, w43 ,cможет восстановить все слова вплоть до w.

Эта проблема становится не столь критичной в случае с AES-192 и AES-256. Действительно, если атакующему удается получить один раундовый ключ из 256-битного ключа AES, это уменьшает количество возможных вариантов AES ключей с 2256 до 2128, в таком случае восстановить полный ключ все еще невозможно с вычислительной точки зрения.

AES vs. TKIP

TKIP и AES представляют собой два различных стандарта шифрования, которые могут использоваться в сетях Wi-Fi. TKIP – более старый протокол шифрования, введенный в свое время стандартом WPA взамен крайне ненадежного алгоритма WEP. На самом деле TKIP во многом подобен алгоритму шифрования WEP. TKIP уже не считается надежным методом защиты и в настоящее время не рекомендуется. Другими словами, вам не следует его использовать.

AES – более надежный протокол шифрования, введенный стандартом WPA2. AES – это не какой-нибудь унылый, тот или другой стандарт, разработанный специально для сетей Wi-Fi. Это серьезный мировой стандарт шифрования, взятый на вооружение даже правительством США. Например, когда вы зашифровываете жесткий диск с помощью программы TrueCrypt, она может использовать для этого алгоритм шифрования AES. AES является общепризнанным стандартом, обеспечивающим практически полную безопасность, а его возможные слабые места – потенциальная восприимчивость к атакам методом «грубой силы» (для противодействия которым применяются достаточно сложные кодовые фразы) и недостатки защиты, связанные с другими аспектами WPA2.

Усеченный вариант защиты – TKIP, более старый протокол шифрования, используемый стандартом WPA. AES для Wi-Fi – более новое решение в части шифрования, применяемое в новом и безопасном стандарте WPA2. В теории на этом можно было бы закончить. Но на практике, в зависимости от вашего роутера, простого выбора WPA2 может оказаться недостаточно.

Хотя стандарт WPA2 для оптимальной защиты предполагает использование AES, он может использовать и TKIP – там, где требуется обратная совместимость с устройствами предыдущих поколений. При таком раскладе устройства, поддерживающие WPA2, будут подключаться в соответствии с WPA2, а устройства, поддерживающие WPA, будут подключаться в соответствии с WPA. То есть «WPA2» не всегда означает WPA2-AES. Тем не менее, на устройствах без явного указания опций «TKIP» или «AES» WPA2 обычно является синонимом WPA2-AES. Аббревиатура «PSK» в полном наименовании этих опций расшифровывается как «pre-shared key» – ваша кодовая фраза (ключ шифра). Это отличает персональные стандарты от WPA-Enterprise, в котором используется RADIUS-сервер для выдачи уникальных ключей в больших корпоративных или правительственных сетях Wi-Fi.

AES security issues

Cryptographers are constantly probing AES for weaknesses, trying to come up with new techniques and harnessing the technology that comes their way. This is essential, because if it wasn’t being thoroughly tested by academics, then criminals or nation states could eventually find a way to crack it without the rest of the world knowing. So far, researchers have only uncovered theoretical breaks and side channel attacks.

Related-key attack

In 2009, a series of related-key attacks were discovered. These are a type of cryptanalysis that involves observing how a cipher operates under different keys. The related-key attacks that researchers discovered aren’t of any great concern; they are only possible against protocols that aren’t implemented properly.

Known-key distinguishing attack

Again in 2009, there was a known-key distinguishing attack against an eight round version of AES-128. These attacks use a key that is already known in order to figure out the inherent structure of the cipher. As this attack was only against an eight round version, it isn’t too much to worry about for everyday users of AES-128.

Side-channel attack

There have been several other theoretical attacks, but under current technology they would still take billions of years to crack. This means that AES itself is essentially unbreakable at the moment. Despite this, AES can still be vulnerable if it hasn’t been implemented properly, in what’s known as a side-channel attack.

Side-channel attacks occur when a system is leaking information. The attacker listens in to the sound, timing information, electromagnetic information or the power consumption in order to gather inferences from the algorithm which can then be used to break it.

If AES is implemented carefully, these attacks can be prevented by either removing the source of the data leak, or by ensuring that there is no apparent relationship between the leaked data and the algorithmic processes.

The last weakness is more general than AES specific, but users need to be aware that AES doesn’t automatically make their data safe. Even AES-256 is vulnerable if an attacker can access a user’s key. This is why AES is just one aspect of keeping data secure. Effective password management, firewalls, virus detection and education against social engineering attacks are just as critical in their own ways.

Длины ключей симметричного алгоритма

Экспортная политика правительства США уже давно ограничивает «силу» криптографии, которая может быть отправлена ​​из страны. В течение многих лет ограничение составляло 40 бит . Сегодня длина ключа в 40 бит не обеспечивает достаточной защиты даже от случайного злоумышленника с одним ПК. В ответ к 2000 году большинство основных ограничений США на использование надежного шифрования были ослаблены. Однако не все правила были отменены, и регистрация шифрования в Бюро промышленности и безопасности США по-прежнему требуется для экспорта «товаров массового потребления, программного обеспечения и компонентов для шифрования с шифрованием, превышающим 64 бит» (75 FR ).

Шифр Люцифера IBM был выбран в 1974 году в качестве основы для того, что впоследствии стало стандартом шифрования данных . Длина ключа Люцифера была уменьшена со 128 до 56 бит , что, по мнению NSA и NIST, было достаточно. У АНБ есть большие вычислительные ресурсы и большой бюджет; Некоторые криптографы, в том числе Уитфилд Диффи и Мартин Хеллман, жаловались, что это сделало шифр настолько слабым, что компьютеры NSA смогли бы взломать ключ DES за день с помощью параллельных вычислений методом грубой силы. АНБ оспаривало это, утверждая, что на перебор DES у них уйдет примерно 91 год. Однако к концу 90-х стало ясно, что DES можно взломать за несколько дней с помощью специально созданного оборудования, которое может быть куплено крупной корпорацией или государством. В книге Cracking DES (O’Reilly and Associates) рассказывается об успешной попытке в 1998 году взломать 56-битный DES с помощью грубой силы, организованной кибер-группой по защите гражданских прав с ограниченными ресурсами; см. Взломщик EFF DES . Даже до этой демонстрации длина 56 бит считалась недостаточной для ключей симметричного алгоритма ; DES был заменен во многих приложениях тройным DES , который имеет 112-битную защиту при использовании 168-битных ключей (тройной ключ). В 2002 году Distributed.net и его добровольцы взломали 64-битный ключ RC5 после нескольких лет усилий с использованием около семидесяти тысяч (в основном домашних) компьютеров.

В стандарте Advanced Encryption Standard, опубликованном в 2001 году, используются ключи размером 128, 192 или 256 бит. Многие наблюдатели считают, что 128 бит достаточно в обозримом будущем для симметричных алгоритмов качества AES , пока не станут доступны квантовые компьютеры . Однако с 2015 года Агентство национальной безопасности США выпустило руководство о том, что оно планирует перейти на алгоритмы, устойчивые к квантовым вычислениям, и теперь требует 256-битных ключей AES для данных, классифицируемых как совершенно секретно .

В 2003 году Национальный институт стандартов и технологий США ( NIST) предложил отказаться от 80-битных ключей к 2015 году. В 2005 году использование 80-битных ключей было разрешено только до 2010 года.

С 2015 года руководство NIST гласит, что «теперь запрещено использование ключей, обеспечивающих уровень безопасности менее 112 бит для согласования ключей». Алгоритмы симметричного шифрования, одобренные NIST, включают тройной DES с тремя ключами и AES . Утверждения для двухклавишных Triple DES и Skipjack были отозваны в 2015 году; NSA полосатый алгоритм «s используется в Фортецце программе использует 80-битные ключи.

Примеры атак на AES

Существует несколько моделей атак на данный алгоритм. Я бы хотел остановиться на классе атак по сторонним каналам и кратко рассмотреть 2 соответствующих примера из данного класса.

  1. Атака по времени.

    Данная атака основывается на предположении, что операции в устройствах выполняются за разное время в зависимости от входных данных.Таким образом, имея набор точных измерений времени для разных операций, криптоаналитик может восстановить исходные данные.

    Рассматриваемая атака невозможна на алгоритмы, операции которых выполняются за одинаковое число тактов на всех платформах ( битовые операции над фиксированным числом бит ), но так как алгоритм AES используют операции сложения и умножения, не удовлетворяющие этому требованию, он подвержен атаке по времени.

    Возможные методы противодействия такому виду атаки:

    · Сделать время выполнения всех операций одинаковым, после чего атака по времени становится невозможной. Следует отметить, что данный метод реализовать достаточно сложно, так как оптимизации компилятора, обращение к кэшу и другие факторы могут вносить различные временные отклонения.

    · Добавлять ко времени выполнения операции задержки случайной длительности, это значительно затруднит проведение атаки таким способом.

  2. Атака по энергопотреблению.

    Данная атака основывается на измерении энергопотребления устройства с высокой точностью в процессе работы шифратора. Таким образом криптоаналитик может получить информацию об операциях, выполняемых в устройстве и у него появляется возможность извлечь криптографические ключи или другую секретную информацию из устройства, не оказывая на него непосредственного влияния.

    Возможными методами противодействия такому виду атаки являются:

    · Балансировка энергопотребления — при проведении операции задействовать все аппаратные части устройства.

    · Обеспечение независимости флуктуаций энергопотребления и происходящих в системе процессов.

Описание алгоритма дешифрования

Так как все преобразования шифрования выполняются однозначно, то существует обратное преобразование, с помощью которого шифротекст переводится в открытый текст. Обратное преобразование представляет собой последовательность инвертированных операций шифрования, выполняемых в обратном порядке:

  1. Расширение ключа — KeyExpansion;

  2. 9 раундов дешифрования, каждый из которых состоит из преобразований:

    · AddRoundKey — суммирование state с раундовым ключом;

    · InverseMixColumns — обратная перестановка столбцов state;

    · InverseShiftRows — обратный циклический сдвиг столбцов state;

    · SubBytes — замена байтов state по обратной таблице замен InverseS- box;

  3. Финальный раунд:

    · AddRoundKey

    · InverseShiftRows

    · InverseSubBytes

Описания алгоритма шифрования

Давайте теперь перейдем от математики к описанию самого алгоритма шифрования AES c размером ключа 128 бит.

Предварительно входные данные разбиваются на блоки по 16 байт, если полный размер не кратен 16 байтам, то данные дополняется до размера, кратного 16 байтам. Блоки представляются в виде матрицы 4×4 — state. Далее происходит процедура расширения ключа и к каждому блоку state применяются операции 2-4. Итак, алгоритм состоит из следующих шагов:

  1. Расширение ключа — KeyExpansion;

  2. Начальный раунд — сложение state с основным ключом;

  3. 9 раундов шифрования, каждый из которых состоит из преобразований:

    · SubBytes

    · ShiftRows

    · MixColumns

    · AddRoundKey

  4. Финальный раунд, состоящий из преобразований:

    · SubBytes

    · ShiftRows

    · AddRoundKey

Рассмотрим подробнее каждое из представленных выше преобразований:

SubBytes — замена байтов state по таблице S-box. Каждый байт представляется в виде двух шестнадцатеричных чисел b = (x, y), где x определяется 4 старшими разрядами b, а y — 4 младшими. В таблице S-box размера 16×16 находятся значения для замены исходного байта: значение b’ на пересечении строки x и столбца y S-box используется в качестве замены исходному байту b.

ShiftRows — циклический сдвиг строк state. Нулевая строка остается на месте, первая смещается влево на 1 байт, вторая на 2 байта и третья на 3 соответственно.

MixColumns — умножения каждого столбца state на фиксированную матрицу. Таким образом осуществляется линейное преобразование над столбцами state. Причем умножение и сложение производится по правилам, описанным выше.

AddRoundKey — раундовый ключ поэлементно добавляется к state с помощью поразрядного XOR.

  • KeyExpansion — процедура расширения основного ключа для создания раундовых ключей, которые затем используются в раундах шифрования. Расширенный ключ состоит из 44 четырехбайтовых слов (wi): 4 слова на основной ключ и по 4 слова на 10 раундовых ключей. Таким образом, полная длина расширенного ключа составляет 1408 бит.

    Операция расширения ключа использует массив Rcon и состоит из следующих действий:

    • Четыре слова основного ключа переносятся в первые четыре слова расширенного ключа.

    • Если число i без остатка делится на 4, то wi =SubBytes(RotByte(wi-1 )) xor Rconi/4 .

    • Иначе: wi = wi-4 xor wi-1 .

Операция RotByte производит циклическую перестановку байта исходного слова: { x, x1, x2, x3 } → { x3 , x , x1 , x2 }.

Ниже показан пример, демонстрирующий генерацию 2 первых слов первого раундового ключа.

https://www.youtube.com/watch?v=CxU4ROAYGzs

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector