Нетрадиционное руководство для неспециалистов по расширенному стандарту шифрования (часть 1)

Опубликовано: 11 Апреля, 2023

С момента своего появления аббревиатура «AES» нашла свое место практически во всех технических документах; от него пахнет силой, с прилагательным «Расширенный», стоящим прямо перед словами «Шифрование», что вызывает некоторое ощущение математической напряженности, которая заставила бы любого Эйнштейна заработать свои умственные деньги, и «Стандартный», который предполагает что он достаточно силен, чтобы получить одобрение правительства в качестве, так сказать, «Дома П» блочных шифров этой эпохи. Учитывая его академическую и общественную популярность, было написано множество произведений; среди них есть общие статьи, часто написанные не криптографами, которые охватывают поверхностные аспекты, такие как кто его разработал, тип примитива, поддерживаемые ключи и длины блоков и так далее и тому подобное. Я не любитель обыденности, так что вот моя попытка преодолеть разрыв между академической терминологией, которая редко ускользает из-под переплета научных журналов, и беглым взглядом, который дают общие средства массовой информации.

Перестановки - это то, что на ужин

Advanced Encryption Standard — это просто спецификация базового примитива — Rijndael. Большинство людей «в [базовом] знании» знают об этом; Фактически, единственное различие между спецификацией AES и спецификацией Rijndael заключается в том, что AES поддерживает меньший диапазон возможных длин Rijndael для блоков и ключей. Большинство людей связывают Rijndael с бытовым термином «блочный шифр», но обычно этим все и ограничивается. На самом деле, есть гораздо больше общего в том, что такое «блочный шифр»; вероятно, будет лучше, если я изложу некоторую терминологию, прежде чем мы погрузимся в бассейн AESpecifics. Чтобы быть справедливым к нематематикам, я избавлю вас от фундаментальных уравнений, но мне нужно будет ввести некоторые примитивные математические определения для математически склонной аудитории. Конечно, нет недостатка в хорошей теории, когда дело доходит до работ Риймена и Деймена; это феноменально выдающийся материал. Имейте в виду, что среди множества терминов, с которыми вы собираетесь познакомиться, существуют закоулки математической теории, далеко выходящие за рамки этой статьи; подумайте об этом как о энциклопедическом взгляде на то, чего вы, вероятно, не знали о Рейндале.

Во-первых, запомните термин «булевы перестановки»; можно сказать, что это клетка крови блочного шифра. По сути, есть что-то, называемое векторной булевой функцией, которая отображает один логический вектор в другой, где координаты для этих векторов являются битами. Теперь я не ожидаю, что все поймут суть того, что это на самом деле означает, но то, что следует далее, должно быть знакомым, концептуально, так что держитесь со мной. Помните, что блочные шифры в основном имеют дело с n -битными блоками; то есть, если вы подставляете «128» вместо n, например, вы имеете в виду 128-битный блочный шифр, что означает, что вы передаете ему 128 бит открытого текста, а он выдает 128 бит зашифрованного текста. («Подача» и «выплевывание» вместо «ввода» и «вывода» придают ему некоторую индивидуальность, что всегда полезно в области криптографии, где требуется некоторое воображение.) Один из способов, которым вы можете смотреть на векторная логическая функция представляет собой спецификацию таблицы, которая дает выходное значение для всех 2 n значений входного логического вектора. Кроме того, вы можете ссылаться на векторную логическую функцию как на работу с n -битными состояниями, если количество входных и выходных битов равно; этот тип функции упоминается как векторное логическое преобразование.

Кроме того, если это векторное логическое преобразование сопоставляет все состояния входных битов с различными выходными битами, оно является обратимым, что — ссылаясь на этот термин, который уже должен быть врезался в вашу память — это то, что вы бы назвали векторной логической перестановкой. Сейчас мы прямо под эпидермисом. Чтобы сбалансировать эти новые термины, я добавлю некоторые знакомые. Что вы, вероятно, знаете, так это то, что с точки зрения непрофессионала блочный шифр преобразует входные блоки открытого текста в выходные блоки зашифрованного текста некоторой равной длины в битах, обозначаемых n b. На этот процесс преобразования влияет ключ, обозначаемый k. Теперь давайте свяжем вышеупомянутую терминологию с общим представлением о блочном шифре. Блочный шифр на самом деле представляет собой набор этих логических перестановок, которые имеют дело с n b -битовыми векторами; существует такая перестановка для каждого значения k. Посмотрите на ключ k как на логический вектор, длина которого в битах обозначается как n k. Следовательно, такой блочный шифр будет иметь 2 n k логических перестановок. Этот процесс преобразования более ласково называют «алгоритмом шифрования» в большинстве статей, на которые вы наткнетесь, и этого обычно достаточно для обсуждения криптографии на самом базовом, концептуальном уровне.

У ключей есть расписание, как и у нас — ну, у некоторых из нас

Я обещаю, что мы скоро вернемся домой, и вы не почувствуете, что как раз в тот момент, когда вы думали, что разбираетесь в криптографии размером с горошину, налетел ураган Булев и пролил дождь на ваш парад. Теперь, когда мы более подробно изучили обобщение блочного шифра, давайте углубимся в особенности Rijndael. Rijndael — это блочный шифр с повторением ключей ; это несколько вещей, но это «подкласс», в который он вписывается. Это итеративный блочный шифр, потому что он повторяет переменное число логических перестановок, зависящих от ключа; такая перестановка называется раундовым преобразованием, а каждая итерация этого преобразования называется раундом. Это итеративный блочный шифр, потому что, за исключением небольшой разницы в последнем раунде, где шаг пропущен, он повторяет одно и то же циклическое преобразование. Я могу только представить выражение лиц владельцев прикладной криптографии, которые видят слово «круглый» и уже участвуют в празднике распространения «эй-я-знал-это».

Некоторое время назад я в общих чертах называл ключ чем-то, что «влияет» на преобразование открытого текста в зашифрованный. Ключевой материал вычисляется из ключа k для каждого раунда; в совокупности это известно как расширенный ключ. Алгоритм, который предоставляет инструкции о том, как эти раундовые ключи вычисляются из ключа k, известен как ключевое расписание. Хорошо, у меня есть признание. Я сказал, что избавлю вас от безумия уравнений, но вот быстрое уравнение, которое, я обещаю, простое; это просто для того, чтобы показать, как работает ключевое расширение. Готовый? Я тоже. Количество битов в расширенном ключе определяется: умножением длины блока (раундов плюс 1). Другими словами, мы знаем, что для AES (подразумеваемая длина блока 128 бит) со 128-битным ключом у нас есть 10 раундов, поэтому уравнение будет таким: 128 раз (10 плюс 1). 128 умножить на 11 равно 1408. Следовательно, расширенный ключ в этом случае будет состоять из 1408 бит. И, конечно же, из этого расширенного ключа выбираются круглые ключи, и имеют ту же длину, что и длина блока. Видишь, это было не так уж и плохо. Я даже пропустил символы для вас!

Генерация ключа и его планирование — разница

Не так много лун назад я написал грубо примитивную серию статей о « n битах безопасности» и « n битах длины ключа», в которой обсуждаются общие методологии генерации криптографических ключей. Давайте сопоставим это с ключевым расписанием. Представьте, что у нас есть два разных блочных шифра. Оба они требуют источника случайности для ключа, используемого в этом процессе преобразования или шифрования. Мы можем использовать один и тот же криптографически безопасный PRNG или генератор псевдослучайных чисел для генерации ключей для обоих блочных шифров. Другими словами, генерация ключа k обычно не зависит от блочного шифра, в котором он будет использоваться; расписание ключей содержит компонент расширения ключа, который определяет, как расширенный ключ будет получен из ключа k. Дело в том, что Rijndael конкретно описывает, как получается расширенный ключ; однако не указано, как выводится ключ k.

Вот короткая аналогия. Допустим, я раздаю хрустящие Франклины. (Не то чтобы я был в состоянии сделать это небрежно, но работайте со мной здесь.) Все, кому я вручаю 100-долларовую купюру, очевидно, получают ее из одного и того же источника (я). Другими словами, хотя они получают их из одного и того же источника (PRNG), то, как они их тратят, зависит от их собственных предпочтений (основной график). Первый не определяется блочным шифром, а второй. О, и, пожалуйста, никаких электронных писем за наличные. Хе-хе. Ключевые расписания, как и раундовые преобразования, могут иметь больше вкусов, чем даже Jelly Belly может предложить; они присущи блочному шифру, и хотя эти вышеупомянутые отдельные блочные шифры могут использовать ключевой материал, сгенерированный из одного и того же источника, их схемы ключей могут использовать этот материал совершенно по-разному, соответственно.

Некоторые заключительные замечания

Итак, двигаясь вперед, мы установили, что Rijndael — это блочный шифр с итеративным подходом в классе шифров с итеративным блоком, но я убрал термин «итерируемый с ключом» несколькими абзацами выше. Не волнуйтесь – я почти пришел. Rijndael также относится к группе блочных шифров, известных как блочные шифры с чередованием ключей, которые, грубо говоря, применяют раундовые ключи к состоянию через XOR между раундами без ключа; в конечном итоге это подкласс марковского шифра. Когда мы смешиваем характеристики повторяющихся блочных шифров с этой структурой чередования ключей, мы отображаем не что иное, как подкласс повторяющихся блочных шифров, к которому относится Rijndael. (Serpent, Twofish и Rijndael — это марковские шифры, но только Serpent и Rijndael являются шифрами с чередованием ключей; Serpent и Rijndael также основаны на сети замены-перестановки ( SPN ), а Twofish основан на сети Фейстеля. Я думал Я бы добавил это для сравнения между финалистами AEA.)

Я планировал подробно рассказать о круглом преобразовании Rijndael, но я собираюсь объявить звуковой сигнал и сохранить его для будущей части. По крайней мере, мы смогли взглянуть на основные компоненты блочного шифра с точки зрения терминологии, а также на ядро Rijndael — циклическое преобразование, которое мы разобьем в следующем эпизоде на четыре этапа: SubBytes., ShiftRows, MixColumns и AddRoundKey. Я объясню немного (и я имею в виду немного ) о теории марковского шифра, стратегии широкого следа Рейндаля и завершу своей упрямой позицией о том, почему поддержка использования стандарта, такого как AES, является хорошей вещью (TM). Это все, что касается этого издания «Нетрадиционного руководства для неспециалистов». До следующего раза, ура!