Расширенный стандарт шифрования ( AES ), также известный под своим первоначальным названием Rijndael ( голландское произношение: [ˈrɛindaːl] ), [5] представляет собой спецификацию шифрования электронных данных, установленную Национальным институтом стандартов и технологий США (NIST) в 2001. [6]
AES — это вариант блочного шифра Rijndael [5] , разработанный двумя бельгийскими криптографами, Джоан Демен и Винсентом Рейменом , которые представили предложение [7] в NIST во время процесса выбора AES . [8] Rijndael — это семейство шифров с разными размерами ключей и блоков. Для AES NIST выбрал трех членов семейства Rijndael, каждый из которых имеет размер блока 128 бит, но три разные длины ключей: 128, 192 и 256 бит.
AES был принят правительством США . Он заменяет стандарт шифрования данных (DES), [9] , который был опубликован в 1977 году. Алгоритм, описанный AES, представляет собой алгоритм с симметричным ключом , то есть один и тот же ключ используется как для шифрования, так и для дешифрования данных.
В Соединенных Штатах NIST объявил AES как US FIPS PUB 197 (FIPS 197) 26 ноября 2001 года. [6] Это объявление последовало за пятилетним процессом стандартизации, в ходе которого было представлено и оценено пятнадцать конкурирующих проектов, прежде чем Шифр Рейндала был выбран как наиболее подходящий. [заметка 3]
AES включен в стандарт ISO / IEC 18033-3 . AES вступил в силу в качестве стандарта федерального правительства США 26 мая 2002 года после одобрения министром торговли США Дональдом Эвансом . AES доступен во многих различных пакетах шифрования и является первым (и единственным) общедоступным шифром, одобренным Агентством национальной безопасности США (АНБ) для сверхсекретной информации при использовании в криптографическом модуле, одобренном АНБ. [примечание 4]
Стандарт расширенного шифрования (AES) определен в каждом из:
AES основан на принципе проектирования, известном как сеть замены-перестановки , и эффективен как в программном, так и в аппаратном обеспечении. [11] В отличие от своего предшественника DES, AES не использует сеть Фейстеля . AES — это вариант Rijndael с фиксированным размером блока 128 бит и размером ключа 128, 192 или 256 бит. Напротив, Rijndael как таковой определяется размерами блоков и ключей, которые могут быть кратны 32 битам, минимум 128 и максимум 256 бит. Большинство вычислений AES выполняются в определенном конечном поле .
AES работает с массивом 4 × 4 по столбцам размером 16 байт b 0 , b 1 , ..., b 15 , называемым состоянием : [примечание 5]
Размер ключа, используемый для шифрования AES, определяет количество раундов преобразования, которые преобразуют входные данные, называемые открытым текстом , в конечный результат, называемый зашифрованным текстом . Количество раундов следующее:
Каждый раунд состоит из нескольких этапов обработки, в том числе одного, который зависит от самого ключа шифрования. Для преобразования зашифрованного текста обратно в исходный открытый текст применяется набор обратных раундов с использованием того же ключа шифрования.
На этапе SubBytes каждый байт в массиве состояний заменяется SubByte с использованием 8-битного поля подстановки . Обратите внимание, что до раунда 0 массив состояний представляет собой просто открытый текст/вход. Эта операция обеспечивает нелинейность шифра . Используемый S-блок получен из мультипликативной инверсии по GF (2 8 ) , которая, как известно, имеет хорошие свойства нелинейности. Чтобы избежать атак, основанных на простых алгебраических свойствах, S-блок строится путем объединения обратной функции с обратимым аффинным преобразованием . S-блок также выбирается таким образом, чтобы избежать каких-либо фиксированных точек (и, следовательно, нарушения ) , т. е. , а также любых противоположных фиксированных точек, т. е. . При выполнении расшифровки используется шаг InvSubBytes (обратный к SubBytes ), который требует сначала взять обратное аффинному преобразованию, а затем найти мультипликативное обратное преобразование.
Шаг ShiftRows работает со строками состояния; он циклически сдвигает байты в каждой строке на определенное смещение . Для AES первая строка остается неизменной. Каждый байт второй строки сдвигается на единицу влево. Аналогичным образом третья и четвертая строки сдвигаются на два и три соответственно. [примечание 6] Таким образом, каждый столбец выходного состояния шага ShiftRows состоит из байтов из каждого столбца входного состояния. Важность этого шага состоит в том, чтобы избежать независимого шифрования столбцов, и в этом случае AES выродится в четыре независимых блочных шифра.
На этапе MixColumns четыре байта каждого столбца состояния объединяются с помощью обратимого линейного преобразования . Функция MixColumns принимает четыре байта на вход и выводит четыре байта, причем каждый входной байт влияет на все четыре выходных байта. Вместе с ShiftRows MixColumns обеспечивает диффузию в шифре.
Во время этой операции каждый столбец преобразуется с использованием фиксированной матрицы (матрица, умноженная слева на столбец, дает новое значение столбца в состоянии):
Умножение матрицы состоит из умножения и сложения элементов. Записи представляют собой байты, рассматриваемые как коэффициенты полинома порядка . Сложение — это просто XOR. Умножение является неприводимым по модулю полиномом . Если обработка побитовая, то после сдвига должно выполняться условное исключающее ИЛИ с 1B 16 , если сдвинутое значение больше FF 16 (переполнение необходимо исправить вычитанием порождающего полинома). Это частные случаи обычного умножения в .
В более общем смысле каждый столбец рассматривается как полином, а затем умножается по модулю на фиксированный полином . Коэффициенты отображаются в шестнадцатеричном эквиваленте двоичного представления битовых полиномов из . Шаг MixColumns также можно рассматривать как умножение на показанную конкретную матрицу MDS в конечном поле . Подробнее этот процесс описан в статье Rijndael MixColumns .
На этапе AddRoundKey подраздел объединяется с состоянием. Для каждого раунда из основного ключа получается дополнительный ключ с использованием расписания ключей Рейндала ; каждый подраздел имеет тот же размер, что и состояние. Подключ добавляется путем объединения состояния с соответствующим байтом подраздела с помощью побитового XOR .
В системах с 32-битными словами и более можно ускорить выполнение этого шифра, объединив шаги SubBytes и ShiftRows с шагом MixColumns , преобразовав их в последовательность поиска в таблице. Для этого требуются четыре 32-битные таблицы по 256 записей (вместе занимающие 4096 байт). Затем можно выполнить раунд с 16 операциями поиска в таблице и 12 32-битными операциями исключающего или, за которыми следуют четыре 32-битные операции исключающего или на этапе AddRoundKey . [12] Альтернативно, операция поиска в таблице может выполняться с одной 32-битной таблицей с 256 записями (занимающей 1024 байта), за которой следуют операции кругового вращения.
Используя байт-ориентированный подход, можно объединить шаги SubBytes , ShiftRows и MixColumns в одну операцию раунда. [13]
Агентство национальной безопасности (АНБ) проверило всех финалистов AES, включая Рейндала, и заявило, что все они достаточно безопасны для несекретных данных правительства США. В июне 2003 года правительство США объявило, что AES может использоваться для защиты секретной информации :
Конструкция и надежность ключей алгоритма AES всех длин (т. е. 128, 192 и 256) достаточны для защиты секретной информации до уровня СЕКРЕТНО. СОВЕРШЕННО СЕКРЕТНАЯ информация потребует использования ключей длиной 192 или 256. Внедрение AES в продуктах, предназначенных для защиты систем и/или информации национальной безопасности, должно быть проверено и сертифицировано АНБ до их приобретения и использования. [14]
AES имеет 10 раундов для 128-битных ключей, 12 раундов для 192-битных ключей и 14 раундов для 256-битных ключей.
К 2006 году самые известные атаки включали 7 раундов для 128-битных ключей, 8 раундов для 192-битных ключей и 9 раундов для 256-битных ключей. [15]
Для криптографов криптографический «взлом» — это что-то более быстрое, чем атака методом грубой силы , т. е. выполнение одной пробной расшифровки для каждого возможного ключа последовательно . Таким образом, перерыв может привести к результатам, недостижимым при нынешних технологиях. Несмотря на свою непрактичность, теоретические прорывы иногда могут дать представление о закономерностях уязвимости. Самая крупная успешная общеизвестная брутфорс-атака на широко распространенный алгоритм блочного шифрования была проведена распределенным.net против 64-битного ключа RC5 в 2006 году. [16]
Ключевое пространство увеличивается в 2 раза для каждого дополнительного бита длины ключа, и если каждое возможное значение ключа равновероятно, это приводит к удвоению среднего времени поиска ключа методом перебора. Это означает, что усилия по перебору растут экспоненциально с увеличением длины ключа. Длина ключа сама по себе не подразумевает защиту от атак, поскольку существуют шифры с очень длинными ключами, которые оказались уязвимыми.
AES имеет довольно простую алгебраическую структуру. [17] В 2002 году Николя Куртуа и Йозеф Пепшик объявили о теоретической атаке, получившей название « XSL-атака » , которая якобы продемонстрировала слабость алгоритма AES, частично из-за низкой сложности его нелинейных компонентов. [18] С тех пор другие статьи показали, что атака в первоначальном виде неработоспособна; см. XSL-атаку на блочные шифры .
В процессе выбора AES разработчики конкурирующих алгоритмов написали об алгоритме Рейндала: «Мы обеспокоены его использованием… в приложениях, критически важных для безопасности». [19] Однако в октябре 2000 года, в конце процесса выбора AES, Брюс Шнайер , разработчик конкурирующего алгоритма Twofish , написал, что, хотя он думал, что когда-нибудь будут разработаны успешные академические атаки на Рейндал, он «не верил, что кто-нибудь когда-нибудь обнаружит атаку, которая позволит кому-то читать трафик Rijndael». [20]
До мая 2009 года единственными успешными опубликованными атаками на полную версию AES были атаки по побочным каналам на некоторые конкретные реализации. В 2009 году была обнаружена новая атака с использованием связанных ключей , которая использует простоту расписания ключей AES и имеет сложность 2 119 . В декабре 2009 года он был улучшен до 2 99,5 . [2] Это продолжение атаки, обнаруженной ранее в 2009 году Алексом Бирюковым , Дмитрием Ховратовичем и Ивицей Николичем, со сложностью 2 96 для одного из каждых 2 35 ключей. [21] Однако атаки с использованием связанных ключей не вызывают беспокойства в любом правильно разработанном криптографическом протоколе, поскольку правильно разработанный протокол (т. е. реализующее программное обеспечение) позаботится о том, чтобы не допустить использования связанных ключей, по существу, ограничивая средства злоумышленника по выбору ключей для родство.
Еще одна атака была опубликована в блоге Брюсом Шнайером [22] 30 июля 2009 г. и выпущена в виде препринта [23] 3 августа 2009 г. Эта новая атака была осуществлена Алексом Бирюковым, Орром Данкельманом, Натаном Келлером, Дмитрием Ховратовичем и Ади Шамиром . , против AES-256, который использует только два связанных ключа и время 2 39 для восстановления полного 256-битного ключа 9-раундовой версии или время 2 45 для 10-раундовой версии с более сильным типом атаки по связанному подключу, или 2 70 раз для версии с 11 раундами. 256-битный AES использует 14 раундов, поэтому эти атаки не эффективны против полного AES.
Практичность этих атак с использованием более сильных связанных ключей подвергалась критике, например, [24] в статье об атаках с выбранными ключевыми отношениями посередине на AES-128, автором которой является Винсент Реймен в 2010 году. [25]
В ноябре 2009 года в виде препринта была выпущена первая атака с известным ключом против сокращенной 8-раундовой версии AES-128. [26] Эта атака с распознаванием известного ключа представляет собой усовершенствованную атаку, или атаку «начало с середины», против AES-подобных перестановок, которые рассматривают два последовательных раунда перестановки как применение так называемого супер-перестановки. S-бокс. Он работает на 8-раундовой версии AES-128 с временной сложностью 2 48 и сложностью памяти 2 32 . 128-битный AES использует 10 раундов, поэтому эта атака не эффективна против полного AES-128.
Первые атаки с восстановлением ключей на полный AES были проведены Андреем Богдановым, Дмитрием Ховратовичем и Кристианом Рехбергером и были опубликованы в 2011 году. [27] Атака представляет собой двухстороннюю атаку и быстрее, чем перебор, примерно в четыре раза. Для восстановления ключа AES-128 требуется 2 операции 126,2 . Для AES-192 и AES-256 необходимо 2 190,2 и 2 254,6 операций соответственно. Этот результат был дополнительно улучшен до 2 126,0 для AES-128, 2 189,9 для AES-192 и 2 254,3 для AES-256 [28] , что является лучшим на данный момент результатом в атаке с восстановлением ключа против AES.
Это очень небольшой выигрыш, поскольку для перебора 126-битного ключа (вместо 128 бит) на текущем и прогнозируемом оборудовании все равно потребуются миллиарды лет. Также авторы рассчитывают лучшую атаку с использованием своей методики на AES со 128-битным ключом, требующим хранения 288 бит данных. Это составляет около 38 триллионов терабайт данных, что больше, чем все данные, хранящиеся на всех компьютерах планеты в 2016 году. Таким образом, это не имеет никаких практических последствий для безопасности AES. [29] Пространственная сложность позже была улучшена до 2 56 бит, [28] что составляет 9007 терабайт (при сохранении временной сложности 2 126,2 ).
Согласно документам Сноудена , АНБ проводит исследование того, может ли криптографическая атака, основанная на статистике тау , помочь взломать AES. [30]
В настоящее время не существует известной практической атаки, которая позволила бы кому-то, не зная ключа, прочитать данные, зашифрованные с помощью AES, при правильной реализации.
Атаки по побочным каналам не атакуют шифр как « черный ящик» и, следовательно, не связаны с безопасностью шифра, как это определено в классическом контексте, но важны на практике. Они атакуют реализации шифра на аппаратных или программных системах, которые непреднамеренно сливают данные. Известно несколько таких атак на различные реализации AES.
В апреле 2005 года DJ Бернштейн объявил об атаке с использованием синхронизации кэша, которую он использовал для взлома пользовательского сервера, использующего шифрование AES OpenSSL . [31] Для атаки потребовалось более 200 миллионов выбранных открытых текстов. [32] Пользовательский сервер был спроектирован так, чтобы выдавать как можно больше информации о времени (сервер сообщает о количестве машинных циклов, затраченных на операцию шифрования). Однако, как отметил Бернштейн, «уменьшение точности временных меток сервера или исключение их из ответов сервера не останавливает атаку: клиент просто использует время туда и обратно на основе своих локальных часов и компенсирует повышенный шум». путем усреднения по большему количеству образцов». [31]
В октябре 2005 года Даг Арне Освик, Ади Шамир и Эран Тромер представили документ, демонстрирующий несколько атак с использованием синхронизации кэша против реализаций AES, обнаруженных в OpenSSL и dm-crypt
функции шифрования разделов Linux. [33] Одна атака смогла получить весь ключ AES всего после 800 операций, запускающих шифрование, в общей сложности за 65 миллисекунд. Эта атака требует, чтобы злоумышленник имел возможность запускать программы в той же системе или платформе, на которой используется AES.
В декабре 2009 года была опубликована атака на некоторые аппаратные реализации, которая использовала дифференциальный анализ ошибок и позволяла восстановить ключ со сложностью 2 32 . [34]
В ноябре 2010 года Эндре Бангертер, Дэвид Галлаш и Стефан Кренн опубликовали статью, в которой описывался практический подход к восстановлению секретных ключей из AES-128 «почти в реальном времени» без необходимости использования зашифрованного или открытого текста. Этот подход также работает в реализациях AES-128, использующих таблицы сжатия, таких как OpenSSL. [35] Как и некоторые более ранние атаки, эта требует возможности запуска непривилегированного кода в системе, выполняющего шифрование AES, что может быть достигнуто путем заражения вредоносным ПО гораздо проще, чем захват учетной записи root. [36]
В марте 2016 года Ашоккумар К., Рави Пракаш Гири и Бернард Менезес представили атаку по побочному каналу на реализации AES, которая может восстановить полный 128-битный ключ AES всего за 6–7 блоков открытого/зашифрованного текста, что является существенным улучшением по сравнению с предыдущие работы, требующие от 100 до миллиона шифрований. [37] Предлагаемая атака требует стандартных пользовательских привилегий и алгоритмов получения ключей, которые выполняются менее чем за минуту.
Многие современные процессоры имеют встроенные аппаратные инструкции для AES , которые защищают от атак по побочным каналам, связанных с синхронизацией. [38] [39]
AES-256 считается квантовоустойчивым , поскольку он имеет квантовую устойчивость, аналогичную устойчивости AES-128 к традиционным, неквантовым атакам при уровне безопасности 128 бит . AES-192 и AES-128 не считаются квантовоустойчивыми из-за меньшего размера ключей. Устойчивость AES-192 к квантовым атакам составляет 96 бит, а устойчивость AES-128 к квантовым атакам составляет 64 бита, что делает их оба небезопасными. [40] [41]
Программа проверки криптографических модулей (CMVP) осуществляется совместно Отделом компьютерной безопасности Национального института стандартов и технологий (NIST) правительства США и Управлением безопасности связи (CSE) правительства Канады. Правительство США требует использования криптографических модулей, соответствующих стандарту NIST FIPS 140-2, для шифрования всех данных, имеющих класс конфиденциальности, но несекретный (SBU) или выше. Из NSTISSP № 11, Национальная политика, регулирующая получение информации: «Продукты шифрования для защиты секретной информации будут сертифицированы АНБ, а продукты шифрования, предназначенные для защиты конфиденциальной информации, будут сертифицированы в соответствии со стандартом NIST FIPS 140-2». [42]
Правительство Канады также рекомендует использовать криптографические модули, проверенные по стандарту 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) [43] позволяет проводить независимую проверку правильности реализации алгоритма AES. Успешная проверка приводит к включению в список на странице проверок NIST. [44] Это тестирование является обязательным условием для проверки модуля FIPS 140-2. Однако успешная проверка CAVP никоим образом не означает, что криптографический модуль, реализующий алгоритм, безопасен. Криптографический модуль, не имеющий проверки FIPS 140-2 или специального одобрения АНБ, не считается безопасным правительством США и не может использоваться для защиты правительственных данных. [42]
Пройти валидацию FIPS 140-2 сложно как с технической, так и с финансовой точки зрения. [45] Существует стандартизированный набор тестов, а также элемент проверки исходного кода, который необходимо пройти в течение нескольких недель. Стоимость проведения этих тестов в утвержденной лаборатории может быть значительной (например, более 30 000 долларов США) [45] и не включает время, необходимое для написания, тестирования, документирования и подготовки модуля к валидации. После проверки модули должны быть повторно отправлены и повторно оценены, если они каким-либо образом были изменены. Это может варьироваться от простого обновления документации, если функциональность безопасности не изменилась, до более существенного набора повторных проверок, если изменение повлияло на функциональность безопасности.
Тестовые векторы представляют собой набор известных шифров для данного ввода и ключа. NIST распространяет эталонные тестовые векторы AES как векторы теста известных ответов AES (KAT). [примечание 7]
Высокая скорость и низкие требования к оперативной памяти были одними из критериев процесса выбора AES. В качестве выбранного алгоритма AES хорошо зарекомендовал себя на широком спектре оборудования: от 8-битных смарт-карт до высокопроизводительных компьютеров.
В Pentium Pro шифрование AES требует 18 тактов на байт (cpb), [46] что эквивалентно пропускной способности около 11 МБ/с для процессора с частотой 200 МГц.
На процессорах Intel Core и AMD Ryzen , поддерживающих расширения набора инструкций AES-NI , пропускная способность может составлять несколько ГиБ/с (даже более 15 ГиБ/с на i7-12700k). [47] На процессоре Intel Westmere шифрование AES с использованием AES-NI занимает около 1,3 cpb для AES-128 и 1,8 cpb для AES-256. [48]
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка )Защита предприятия с помощью Intel AES-NI.{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка )