17:55
Блочный шифр
В криптографии , A блочный шифр представляет собой детерминированный алгоритм работает на фиксированной длину группы бит , называемых блоках , с преобразованием неизменного, заданное с помощью симметричного ключа . Блочные шифры являются важными элементарными компонентами при разработке многих криптографических протоколов и широко используются для реализации шифрования больших объемов данных.
Даже защищенный блочный шифр подходит только для шифрования одного блока с фиксированным ключом. Множество режимов работы было разработано, чтобы обеспечить их повторное использование безопасным способом, обычно для достижения целей безопасности конфиденциальности и подлинности . Тем не менее, блочные шифры могут также использоваться в качестве строительных блоков в других криптографических протоколах, таких как универсальные хеш-функции и генераторы псевдослучайных чисел .

Блочный шифр состоит из двух парных алгоритмов , один для шифрования, Е , а другой для расшифровки, D . [1] Оба алгоритма принимают два входа: входной блок размером n битов и ключ размером k битов; и оба дают n- битный выходной блок. Алгоритм дешифрования D определяется как обратная функция шифрования, т.е. D = E -1 . Более формально, [2] [3] блочный шифр определен функцией шифрования
{\ displaystyle E_ {K} (P): = E (K, P): \ {0,1 \} ^ {k} \ times \ {0,1 \} ^ {n} \ rightarrow \ {0,1 \} ^ {п}}
который принимает в качестве входных данных ключ K длиной битов k , называемый размером ключа , и битовую строку P длины n , называемую размером блока , и возвращает строку C из n битов. P называется открытым текстом , а C называется шифротекстом . Для каждого K функция E K ( P ) должна быть обратимым отображением на {0,1} n . Обратное для E определяется как функция
{\ displaystyle E_ {K} ^ {- 1} (C): = D_ {K} (C) = D (K, C): \ {0,1 \} ^ {k} \ times \ {0,1 \} ^ {n} \ rightarrow \ {0,1 \} ^ {n},}
взяв ключ K и зашифрованный текст C, чтобы вернуть значение P открытого текста , такое, что
{\ displaystyle \ forall K: D_ {K} (E_ {K} (P)) = P.}
Например, алгоритм шифрования блочного шифра может принимать 128-битный блок открытого текста в качестве входных данных и выводить соответствующий 128-битный блок шифрованного текста. Точное преобразование контролируется с помощью второго ввода - секретного ключа. Расшифровка аналогична: алгоритм расшифровки в этом примере берет 128-битный блок зашифрованного текста вместе с секретным ключом и выдает исходный 128-битный блок простого текста. [4]
Для каждого ключа К , Е К является перестановка (а взаимно однозначное отображение) по множеству входных блоков. Каждый ключ выбирает одну перестановку из набора{\ displaystyle (2 ^ {n})!}возможные перестановки

Большинство алгоритмов блочного шифрования классифицируются как итеративные блочные шифры, что означает, что они преобразуют блоки открытого размера открытого текста в блоки зашифрованного текста одинакового размера посредством многократного применения обратимого преобразования, известного как функция округления , причем каждая итерация называется циклом , 
Обычно функция округления R принимает различные круглые клавиши K i в качестве второго ввода, которые получены из исходного ключа: 
{\ displaystyle M_ {i} = R_ {K_ {i}} (M_ {i-1})}
где {\ displaystyle M_ {0}} это открытый текст и {\ displaystyle M_ {r}}зашифрованный текст, где r - количество раундов.
Часто в дополнение к этому используется отбеливание клавиш . В начале и в конце данные модифицируются с помощью ключевого материала (часто с XOR , но также используются простые арифметические операции, такие как сложение и вычитание): [ цитата нужна ]
{\ displaystyle M_ {0} = M \ oplus K_ {0}}
{\ displaystyle M_ {i} = R_ {K_ {i}} (M_ {i-1}) \ ;; \; i = 1 \ dots r}
{\ displaystyle C = M_ {r} \ oplus K_ {r + 1}}
Учитывая одну из стандартных схем проектирования итерированных блочных шифров, довольно просто создать блочный шифр, который является криптографически безопасным, просто используя большое количество циклов. Однако это сделает шифр неэффективным. Таким образом, эффективность является наиболее важным дополнительным критерием проектирования для профессиональных шифров. Кроме того, хороший блочный шифр предназначен для предотвращения атак по побочным каналам, таких как доступ к памяти, зависящий от ввода, который может привести к утечке секретных данных через состояние кэша или время выполнения. Кроме того, шифр должен быть кратким, для небольших аппаратных и программных реализаций. Наконец, шифр должен быть легко криптоанализируемым, чтобы можно было показать, на сколько раундов шифр необходимо сократить, чтобы существующие криптографические атаки работали - и, наоборот

Один важный тип итеративного блочного шифра, известный как сеть подстановки-перестановки (SPN), принимает блок открытого текста и ключ в качестве входных данных и применяет несколько чередующихся циклов, состоящих из этапа замещения, за которым следует этап перестановки, - для создания каждого блока вывод зашифрованного текста. Стадия нелинейного замещения смешивает ключевые биты с битами открытого текста, создавая замешательство Шеннона . Стадия линейной перестановки затем рассеивает избыточность, создавая диффузию . 
Блок замены (S-блок) заменяет небольшой блок входных битов другим блоком выходных битов. Эта замена должна быть взаимно-однозначной , чтобы обеспечить обратимость (следовательно, дешифрование). Безопасный S-блок будет иметь свойство, заключающееся в том, что изменение одного входного бита в среднем изменит примерно половину выходных битов, демонстрируя то, что известно как лавинный эффект, т.е. у него есть свойство, заключающееся в том, что каждый выходной бит будет зависеть от каждого входного бита. 
Блок перестановок (P-box) - это перестановка всех битов: он принимает выходные данные всех S-блоков одного раунда, переставляет биты и подает их в S-блоки следующего раунда. Хороший P-блок обладает тем свойством, что выходные биты любого S-блока распределяются по максимально возможному количеству входов S-блока.
В каждом раунде ключ раунда (полученный из ключа с помощью некоторых простых операций, например, с использованием S-блоков и P-блоков) комбинируется с использованием некоторой групповой операции, обычно XOR . 
Расшифровка выполняется простым реверсированием процесса (с использованием инверсий S-блоков и P-блоков и применением круглых ключей в обратном порядке).

В шифре Фейстеля блок зашифрованного текста разделяется на две равные половины. Функция округления применяется к одной половине с помощью подключа, а затем вывод обрабатывается XOR с другой половиной. Две половины затем меняются местами. [18]
Let {\ displaystyle {\ rm {F}}} быть круглой функцией и пусть {\ displaystyle K_ {0}, K_ {1}, \ ldots, K_ {n}} быть ключами для раундов {\ displaystyle 0,1, \ ldots, n} соответственно.
Тогда основная операция выглядит следующим образом: [18]
Разделите блок открытого текста на две равные части, ({\ displaystyle L_ {0}}, {\ displaystyle R_ {0}})
За каждый раунд {\ displaystyle i = 0,1, \ dots, n}вычислить
{\ displaystyle L_ {i + 1} = R_ {i} \,}
{\ displaystyle R_ {i + 1} = L_ {i} \ oplus {\ rm {F}} (R_ {i}, K_ {i})}.
Тогда зашифрованный текст {\ displaystyle (R_ {n + 1}, L_ {n + 1})}}.
Расшифровка зашифрованного текста {\ displaystyle (R_ {n + 1}, L_ {n + 1})}} достигается путем вычисления для {\ displaystyle i = n, n-1, \ ldots, 0}
{\ displaystyle R_ {i} = L_ {i + 1} \,}
{\ displaystyle L_ {i} = R_ {i + 1} \ oplus {\ rm {F}} (L_ {i + 1}, K_ {i})}.
потом {\ displaystyle (L_ {0}, R_ {0})} снова открытый текст.
Одним из преимуществ модели Фейстеля по сравнению с сетью замещения-перестановки является то, что функция округления{\ displaystyle {\ rm {F}}}не должен быть обратимым.

Схема Лая – Масси предлагает свойства безопасности, аналогичные свойствам структуры Фейстеля . Он также имеет то преимущество, что функция округления{\ displaystyle \ mathrm {F}}не должен быть обратимым. Другое сходство в том, что он также разбивает входной блок на две равные части. Тем не менее, функция округления применяется к разнице между ними, и результат затем добавляется к обеим половинным блокам.
Let {\ displaystyle \ mathrm {F}} быть круглой функцией и {\ displaystyle \ mathrm {H}} полукруглая функция и пусть {\ displaystyle K_ {0}, K_ {1}, \ ldots, K_ {n}} быть ключами для раундов {\ displaystyle 0,1, \ ldots, n} соответственно.
Тогда основная операция выглядит следующим образом:
Разделите блок открытого текста на две равные части, ({\ displaystyle L_ {0}}, {\ displaystyle R_ {0}})
За каждый раунд {\ displaystyle i = 0,1, \ dots, n}вычислить
{\ displaystyle (L_ {i + 1} ', R_ {i + 1}') = \ mathrm {H} (L_ {i} '+ T_ {i}, R_ {i}' + T_ {i})}
где {\ displaystyle T_ {i} = \ mathrm {F} (L_ {i} '- R_ {i}', K_ {i})} и {\ displaystyle (L_ {0} ', R_ {0}') = \ mathrm {H} (L_ {0}, R_ {0})}
Тогда зашифрованный текст {\ displaystyle (L_ {n + 1}, R_ {n + 1}) = (L_ {n + 1} ', R_ {n + 1}')}.
Расшифровка зашифрованного текста {\ displaystyle (L_ {n + 1}, R_ {n + 1})} достигается путем вычисления для {\ displaystyle i = n, n-1, \ ldots, 0}
{\ displaystyle (L_ {i} ', R_ {i}') = \ mathrm {H} ^ {- 1} (L_ {i + 1} '- T_ {i}, R_ {i + 1}' - T_ {я})}
где {\ displaystyle T_ {i} = \ mathrm {F} (L_ {i + 1} '- R_ {i + 1}', K_ {i})} и {\ displaystyle (L_ {n + 1} ', R_ {n + 1}') = \ mathrm {H} ^ {- 1} (L_ {n + 1}, R_ {n + 1}))}
потом {\ displaystyle (L_ {0}, R_ {0}) = (L_ {0} ', R_ {0}')} снова открытый текст.

Многие современные блочные шифры и хэши являются алгоритмами ARX - их функция округления включает в себя только три операции: модульное сложение, вращение с фиксированными величинами вращения и XOR (ARX). Примеры включают ChaCha20 , Speck , XXTEA и BLAKE . Многие авторы рисуют сеть ARX, своего рода диаграмму потока данных , чтобы проиллюстрировать такую ​​круглую функцию. 
Эти операции ARX популярны, потому что они относительно быстры и дешевы в аппаратном и программном обеспечении, а также потому, что они работают в постоянном времени и, следовательно, невосприимчивы к атакам времени . В вращательном криптоанализе попытки техника , чтобы атаковать такие круглые функции.

Блочный шифр сам по себе позволяет шифровать только один блок данных с длиной блока шифра. Для сообщения переменной длины данные сначала должны быть разделены на отдельные блоки шифрования. В простейшем случае, известном как режим Электронной кодовой книги (ECB), сообщение сначала разбивается на отдельные блоки размера блока шифра (возможно, расширяя последний блок битами заполнения ), а затем каждый блок шифруется и дешифруется независимо. Однако такой наивный метод, как правило, небезопасен, поскольку одинаковые блоки открытого текста всегда будут генерировать одинаковые блоки зашифрованного текста (для одного и того же ключа), поэтому шаблоны в сообщении открытого текста становятся очевидными при выводе зашифрованного текста.

Чтобы преодолеть это ограничение, несколько так называемых режимов блочного шифра работы были разработаны  и конкретизированы в национальных рекомендациях , таких как NIST 800-38A  и BSI TR-02102 и международные стандарты , такие как ISO / IEC 10116 . Общая концепция состоит в том, чтобы использовать рандомизацию данных открытого текста на основе дополнительного входного значения, часто называемого вектором инициализации , для создания так называемого вероятностного шифрования . В популярном режиме цепочки блоков шифрования (CBC) для шифрования должно бытьЗащищенный вектор инициализации, передаваемый вместе с открытым текстом, должен быть случайным или псевдослучайным значением, которое добавляется исключительным образом или в первый блок открытого текста перед его шифрованием. Результирующий блок зашифрованного текста затем используется в качестве нового вектора инициализации для следующего блока открытого текста. В режиме обратной связи шифра (CFB), который эмулирует самосинхронизирующийся потоковый шифр , вектор инициализации сначала шифруется, а затем добавляется в блок открытого текста. Режим обратной связи вывода (OFB) многократно шифрует вектор инициализации, чтобы создать ключевой поток для эмуляции синхронного потокового шифра . Новеережим счетчика (CTR) аналогичным образом создает ключевой поток, но имеет то преимущество, что в качестве векторов инициализации нужны только уникальные, а не (псевдо) случайные значения; необходимая случайность получается изнутри путем использования вектора инициализации в качестве счетчика блоков и шифрования этого счетчика для каждого блока. 
С теоретической точки зрения, режимы работы должны обеспечивать так называемую семантическую безопасность .  Неофициально, это означает, что при наличии некоторого зашифрованного текста под неизвестным ключом практически невозможно получить какую-либо информацию из зашифрованного текста (кроме длины сообщения) по тому, что можно было бы узнать, не увидев зашифрованный текст. Было показано, что все режимы, рассмотренные выше, за исключением режима ECB, предоставляют это свойство при так называемых атаках с использованием открытого текста .

Некоторые режимы, такие как режим CBC, работают только с полными текстовыми блоками. Простого расширения последнего блока сообщения нулевыми битами недостаточно, поскольку оно не позволяет получателю легко различать сообщения, которые отличаются только количеством дополняющих битов. Что еще более важно, такое простое решение вызывает очень эффективные атаки оракула .  Поэтому необходима подходящая схема заполнения, чтобы расширить последний открытый текстовый блок до размера блока шифра. Хотя было показано, что многие популярные схемы, описанные в стандартах и ​​в литературе, уязвимы для атак оракулов-заполнителей,  решение, которое добавляет один бит, а затем расширяет последний блок нулевыми битами, стандартизированными как " метод заполнения 2 "вISO / IEC 9797-1 , ] доказал свою безопасность против этих атак.
Категорія: Технологии Кибербезопасности | Переглядів: 288 | Додав: Kontent_MENEGER | Теги: Блочный шифр | Рейтинг: 0.0/0
Всього коментарів: 0
avatar