В криптографии режим работы блочного шифра — это алгоритм, который использует блочный шифр для обеспечения информационной безопасности, такой как конфиденциальность или подлинность . [1] Сам по себе блочный шифр подходит только для безопасного криптографического преобразования (шифрования или дешифрования) одной группы бит фиксированной длины, называемой блоком . [2] Режим работы описывает, как многократно применять одноблочную операцию шифра для безопасного преобразования объемов данных, превышающих блок. [3] [4] [5]
Большинству режимов требуется уникальная двоичная последовательность, часто называемая вектором инициализации (IV), для каждой операции шифрования. IV должен быть неповторяющимся, а для некоторых режимов также должен быть случайным. Вектор инициализации используется для обеспечения создания различных шифротекстов , даже если один и тот же открытый текст шифруется несколько раз независимо с помощью одного и того же ключа . [6] Блочные шифры могут работать с более чем одним размером блока , но во время преобразования размер блока всегда фиксирован. Режимы блочного шифра работают с целыми блоками и требуют, чтобы конечный фрагмент данных был дополнен до полного блока, если он меньше текущего размера блока. [2] Однако существуют режимы, которые не требуют дополнения, поскольку они эффективно используют блочный шифр как потоковый шифр .
Исторически режимы шифрования были тщательно изучены в отношении их свойств распространения ошибок при различных сценариях модификации данных. Более позднее развитие рассматривало защиту целостности как совершенно отдельную криптографическую цель. Некоторые современные режимы работы эффективно сочетают конфиденциальность и аутентичность и известны как режимы аутентифицированного шифрования . [7]
Самые ранние режимы работы, ECB, CBC, OFB и CFB (см. ниже для всех), датируются 1981 годом и были указаны в FIPS 81, DES Modes of Operation . В 2001 году Национальный институт стандартов и технологий США (NIST) пересмотрел свой список одобренных режимов работы, включив AES в качестве блочного шифра и добавив режим CTR в SP800-38A, Рекомендации по режимам работы блочных шифров . Наконец, в январе 2010 года NIST добавил XTS-AES в SP800-38E, Рекомендации по режимам работы блочных шифров: режим XTS-AES для конфиденциальности на устройствах хранения . Существуют и другие режимы конфиденциальности, которые не были одобрены NIST. Например, CTS — это режим кражи зашифрованного текста , доступный во многих популярных криптографических библиотеках.
Режимы блочного шифрования ECB, CBC, OFB, CFB, CTR и XTS обеспечивают конфиденциальность, но они не защищают от случайного изменения или злонамеренного вмешательства. Изменение или вмешательство можно обнаружить с помощью отдельного кода аутентификации сообщения , такого как CBC-MAC , или цифровой подписи . Криптографическое сообщество признало необходимость специальных гарантий целостности, и NIST ответил HMAC, CMAC и GMAC. HMAC был одобрен в 2002 году как FIPS 198, Код аутентификации сообщений с ключом-хэшем (HMAC) , CMAC был выпущен в 2005 году в соответствии с SP800-38B, Рекомендация по режимам работы блочного шифрования: Режим CMAC для аутентификации , а GMAC был формализован в 2007 году в соответствии с SP800-38D, Рекомендация по режимам работы блочного шифрования: Режим Галуа/счетчика (GCM) и GMAC .
Криптографическое сообщество заметило, что составление (объединение) режима конфиденциальности с режимом подлинности может быть сложным и подверженным ошибкам. Поэтому они начали предоставлять режимы, которые объединяли конфиденциальность и целостность данных в один криптографический примитив (алгоритм шифрования). Эти комбинированные режимы называются аутентифицированным шифрованием , AE или «authenc». Примерами режимов AE являются CCM (SP800-38C), GCM (SP800-38D), CWC , EAX , IAPM и OCB .
Режимы работы определяются рядом национальных и международных организаций по стандартизации. Известные организации по стандартизации включают NIST , ISO (с ISO/IEC 10116 [5] ), IEC , IEEE , ANSI и IETF .
Вектор инициализации (IV) или начальная переменная (SV) [5] представляет собой блок битов, который используется несколькими режимами для рандомизации шифрования и, следовательно, для создания различных шифротекстов, даже если один и тот же открытый текст шифруется несколько раз, без необходимости более медленного процесса повторного ввода ключей. [ необходима ссылка ]
Вектор инициализации имеет другие требования безопасности, чем ключ, поэтому IV обычно не должен быть секретным. Для большинства режимов блочного шифрования важно, чтобы вектор инициализации никогда не использовался повторно под тем же ключом, т. е. он должен быть криптографическим одноразовым номером . Многие режимы блочного шифрования имеют более строгие требования, например, IV должен быть случайным или псевдослучайным . Некоторые блочные шифры имеют особые проблемы с определенными векторами инициализации, например, все нулевые IV не генерируют никакого шифрования (для некоторых ключей).
Рекомендуется ознакомиться с соответствующими требованиями к IV для конкретного режима блочного шифрования в соответствующей спецификации, например, SP800-38A.
Для CBC и CFB повторное использование IV приводит к утечке некоторой информации о первом блоке открытого текста и о любом общем префиксе, разделяемом двумя сообщениями.
Для OFB и CTR повторное использование IV приводит к повторному использованию ключевого потока битов, что нарушает безопасность. [8] Это можно увидеть, поскольку оба режима фактически создают поток битов, который подвергается операции XOR с открытым текстом, и этот поток битов зависит только от ключа и IV.
В режиме CBC IV должен быть непредсказуемым (случайным или псевдослучайным) во время шифрования; в частности, (ранее) распространенная практика повторного использования последнего блока зашифрованного текста сообщения в качестве IV для следующего сообщения небезопасна (например, этот метод использовался SSL 2.0). Если злоумышленник знает IV (или предыдущий блок зашифрованного текста) до того, как указан следующий открытый текст, он может проверить свое предположение об открытом тексте некоторого блока, который был зашифрован тем же ключом ранее (это известно как атака TLS CBC IV). [9]
Для некоторых ключей вектор инициализации со всеми нулями может генерировать некоторые режимы блочного шифра (CFB-8, OFB-8), чтобы застрять на внутреннем состоянии со всеми нулями. Для CFB-8 IV со всеми нулями и открытый текст со всеми нулями приводят к тому, что 1/256 ключей не генерируют шифрование, открытый текст возвращается как зашифрованный текст. [10] Для OFB-8 использование вектора инициализации со всеми нулями не сгенерирует шифрование для 1/256 ключей. [11] Шифрование OFB-8 возвращает открытый текст в незашифрованном виде для затронутых ключей.
Некоторые режимы (например, AES-SIV и AES-GCM-SIV) созданы для большей устойчивости к несанкционированному использованию случайных чисел, то есть к сценариям, в которых генерация случайных чисел неисправна или находится под контролем злоумышленника.
Блочный шифр работает с единицами фиксированного размера (известными как размер блока ), но сообщения бывают разной длины. Поэтому некоторые режимы (а именно ECB и CBC ) требуют, чтобы последний блок был дополнен перед шифрованием. Существует несколько схем дополнения . Самая простая — добавить нулевые байты к открытому тексту , чтобы довести его длину до кратной размеру блока, но необходимо позаботиться о том, чтобы можно было восстановить исходную длину открытого текста; это тривиально, например, если открытый текст представляет собой строку в стиле C , которая не содержит нулевых байтов, кроме как в конце. Немного сложнее исходный метод DES , который заключается в добавлении одного единичного бита , за которым следует достаточно нулевых битов для заполнения блока; если сообщение заканчивается на границе блока, будет добавлен целый блок дополнения. Наиболее сложными являются схемы, специфичные для CBC, такие как кража шифротекста или завершение остаточного блока , которые не вызывают никакого дополнительного шифротекста, за счет некоторой дополнительной сложности. Шнайер и Фергюсон предлагают две возможности, обе простые: добавить байт со значением 128 (шестнадцатеричное 80), за которым следует столько нулевых байтов, сколько необходимо для заполнения последнего блока, или дополнить последний блок n байтами, все со значением n .
Режимы CFB, OFB и CTR не требуют никаких специальных мер для обработки сообщений, длина которых не кратна размеру блока, поскольку режимы работают путем выполнения операции XOR открытого текста с выходными данными блочного шифра. Последний частичный блок открытого текста подвергается операции XOR с первыми несколькими байтами последнего блока keystream , в результате чего получается окончательный блок зашифрованного текста того же размера, что и окончательный частичный блок открытого текста. Эта характеристика потоковых шифров делает их подходящими для приложений, которым требуется, чтобы зашифрованные данные зашифрованного текста имели тот же размер, что и исходные данные открытого текста, и для приложений, которые передают данные в потоковом режиме, где неудобно добавлять байты заполнения.
Ряд режимов работы были разработаны для объединения секретности и аутентификации в одном криптографическом примитиве. Примерами таких режимов являются [12] integrity-aware cipher block chaining (IACBC) [ необходимо разъяснение ] , integrity-aware parallelizable mode (IAPM), [13] OCB , EAX , CWC , CCM и GCM . Режимы шифрования с аутентификацией классифицируются как однопроходные и двухпроходные.
Кроме того, некоторые режимы также позволяют аутентифицировать незашифрованные связанные данные, и они называются схемами AEAD (аутентифицированное шифрование с ассоциированными данными). Например, режим EAX представляет собой двухпроходную схему AEAD, тогда как режим OCB — однопроходную.
Режим Галуа/счетчика (GCM) объединяет известный режим счетчика шифрования с новым режимом Галуа аутентификации. Ключевой особенностью является простота параллельного вычисления умножения поля Галуа, используемого для аутентификации. Эта особенность обеспечивает более высокую пропускную способность, чем алгоритмы шифрования.
GCM определен для блочных шифров с размером блока 128 бит. Код аутентификации сообщений Галуа (GMAC) — это вариант GCM, предназначенный только для аутентификации, который может формировать инкрементный код аутентификации сообщений. Как GCM, так и GMAC могут принимать векторы инициализации произвольной длины. GCM может в полной мере использовать преимущества параллельной обработки, а реализация GCM может эффективно использовать конвейер инструкций или аппаратный конвейер. Режим работы CBC приводит к остановке конвейера , что снижает его эффективность и производительность.
Как и в CTR, блоки нумеруются последовательно, а затем этот номер блока объединяется с IV и шифруется блочным шифром E , обычно AES. Результат этого шифрования затем подвергается операции XOR с открытым текстом для получения шифротекста. Как и все режимы счетчиков, это по сути потоковый шифр, и поэтому важно, чтобы для каждого потока, который шифруется, использовался другой IV.
Блоки шифротекста считаются коэффициентами полинома , который затем оценивается в точке H , зависящей от ключа , с использованием арифметики конечного поля . Затем результат шифруется, создавая тег аутентификации , который можно использовать для проверки целостности данных. Затем зашифрованный текст содержит IV, шифротекст и тег аутентификации.
Счетчик с кодом аутентификации сообщения цепочки блоков шифра (счетчик с CBC-MAC; CCM) — это аутентифицированный алгоритм шифрования, разработанный для обеспечения как аутентификации, так и конфиденциальности. Режим CCM определен только для блочных шифров с длиной блока 128 бит. [14] [15]
Синтетический вектор инициализации (SIV) — это режим блочного шифрования, устойчивый к несанкционированному использованию одноразовых символов.
SIV синтезирует внутренний IV с использованием псевдослучайной функции S2V. S2V — это ключевой хэш, основанный на CMAC, а входные данные для функции:
SIV шифрует вывод S2V и открытый текст с помощью AES-CTR, защищенного ключом шифрования (K2 ) .
SIV может поддерживать внешнее аутентифицированное шифрование на основе одноразовых номеров, в этом случае для этой цели используется одно из полей аутентифицированных данных. RFC5297 [16] указывает, что для целей взаимодействия последнее аутентифицированное поле данных должно использовать внешний одноразовый номер.
Из-за использования двух ключей, ключа аутентификации K 1 и ключа шифрования K 2 , схемы именования для вариантов SIV AEAD могут привести к некоторой путанице; например, AEAD_AES_SIV_CMAC_256 относится к AES-SIV с двумя ключами AES-128, а не AES-256.
AES-GCM-SIV — это режим работы для Advanced Encryption Standard, который обеспечивает производительность, схожую с режимом Галуа/счетчика, а также устойчивость к злоупотреблениям в случае повторного использования криптографического одноразового номера. Конструкция определена в RFC 8452. [17]
AES-GCM-SIV синтезирует внутренний IV. Он выводит хэш дополнительных аутентифицированных данных и открытого текста с помощью хэш-функции Галуа POLYVAL. Затем хэш шифруется ключом AES и используется в качестве тега аутентификации и вектора инициализации AES-CTR.
AES-GCM-SIV — это усовершенствование по сравнению с очень похожим по названию алгоритмом GCM-SIV , с несколькими очень небольшими изменениями (например, как инициализируется AES-CTR), но которое дает практические преимущества для его безопасности. «Это дополнение позволяет шифровать до 250 сообщений одним и тем же ключом, по сравнению со значительным ограничением только в 232 сообщения , которые были разрешены в GCM-SIV». [18]
Определено много режимов работы. Некоторые из них описаны ниже. Целью режимов шифрования является маскировка шаблонов, которые существуют в зашифрованных данных, как показано в описании слабости ECB.
Различные режимы шифрования маскируют шаблоны путем каскадирования выходов из блока шифрования или других глобально детерминированных переменных в последующий блок шифрования. Входы перечисленных режимов суммированы в следующей таблице:
Примечание: g ( i ) — любая детерминированная функция, часто функция тождества .
Самый простой из режимов шифрования — режим электронной кодовой книги (ECB) (названный в честь обычных физических кодовых книг [19] ). Сообщение делится на блоки, и каждый блок шифруется отдельно. ECB не рекомендуется для использования в криптографических протоколах: недостатком этого метода является отсутствие диффузии , при котором он не может скрыть шаблоны данных, когда шифрует идентичные блоки открытого текста в идентичные блоки зашифрованного текста . [20] [21] [22]
Яркий пример того, в какой степени ECB может оставлять шаблоны данных открытого текста в зашифрованном тексте, можно увидеть, когда режим ECB используется для шифрования растрового изображения , содержащего большие области однородного цвета. Хотя цвет каждого отдельного пикселя предположительно зашифрован, общее изображение все еще может быть различимо, поскольку шаблон пикселей одинакового цвета в оригинале остается видимым в зашифрованной версии.
Режим ECB также может сделать протоколы без защиты целостности еще более уязвимыми для атак повторного воспроизведения , поскольку каждый блок расшифровывается точно таким же образом. [ необходима цитата ]
Эрзам, Мейер, Смит и Такман изобрели режим работы цепочки блоков шифра (CBC) в 1976 году. [23] В режиме CBC каждый блок открытого текста подвергается операции XOR с предыдущим блоком зашифрованного текста перед шифрованием. Таким образом, каждый блок зашифрованного текста зависит от всех блоков открытого текста, обработанных до этого момента. Чтобы сделать каждое сообщение уникальным, в первом блоке должен использоваться вектор инициализации .
Если первый блок имеет индекс 1, математическая формула для шифрования CBC имеет вид
в то время как математическая формула для расшифровки CBC выглядит следующим образом:
CBC был наиболее часто используемым режимом работы. Его основными недостатками являются то, что шифрование является последовательным (т. е. его нельзя распараллелить), и что сообщение должно быть дополнено до кратного размера блока шифра. Один из способов решения этой последней проблемы — метод, известный как кража шифротекста . Обратите внимание, что изменение одного бита в открытом тексте или векторе инициализации (IV) влияет на все последующие блоки шифротекста.
Расшифровка с неправильным IV приводит к повреждению первого блока открытого текста, но последующие блоки открытого текста будут правильными. Это происходит потому, что каждый блок подвергается операции XOR с зашифрованным текстом предыдущего блока, а не с открытым текстом, поэтому не нужно расшифровывать предыдущий блок перед использованием его в качестве IV для расшифровки текущего. Это означает, что блок открытого текста может быть восстановлен из двух соседних блоков зашифрованного текста. Как следствие, расшифровка может быть распараллелена. Обратите внимание, что изменение одного бита в зашифрованном тексте приводит к полному повреждению соответствующего блока открытого текста и инвертирует соответствующий бит в следующем блоке открытого текста, но остальные блоки остаются нетронутыми. Эта особенность эксплуатируется в различных атаках на оракул дополнения , таких как POODLE .
Векторы явной инициализации [24] используют это свойство, добавляя один случайный блок к открытому тексту. Шифрование выполняется как обычно, за исключением того, что IV не нужно сообщать процедуре расшифровки. Какой бы IV ни использовала расшифровка, «поврежденным» оказывается только случайный блок. Его можно безопасно отбросить, а остальная часть расшифровки представляет собой исходный открытый текст.
Режим распространяющейся цепочки блоков шифра [25] или цепочки блоков открытого текста [26] был разработан для того, чтобы небольшие изменения в шифртексте распространялись бесконечно при расшифровке, а также при шифровании. В режиме PCBC каждый блок открытого текста подвергается операции XOR как с предыдущим блоком открытого текста, так и с предыдущим блоком шифртекста перед шифрованием. Как и в режиме CBC, в первом блоке используется вектор инициализации. В отличие от CBC, расшифровка PCBC с неправильным IV (вектором инициализации) приводит к повреждению всех блоков открытого текста.
Алгоритмы шифрования и дешифрования следующие:
PCBC используется, в частности, в Kerberos v4 и WASTE , но в остальном не распространен.
В сообщении, зашифрованном в режиме PCBC, если происходит обмен двумя соседними блоками зашифрованного текста, это не влияет на расшифровку последующих блоков. [27] По этой причине PCBC не используется в Kerberos v5.
Режим обратной связи шифра ( CFB) в своей простейшей форме использует весь вывод блочного шифра. В этой вариации он очень похож на CBC, превращая блочный шифр в самосинхронизирующийся потоковый шифр . Расшифровка CFB в этой вариации почти идентична шифрованию CBC, выполняемому в обратном порядке:
NIST SP800-38A определяет CFB с битовой шириной. [28] Режим CFB также требует целочисленного параметра, обозначаемого s, такого, что 1 ≤ s ≤ b. В спецификации режима CFB ниже каждый сегмент открытого текста (Pj) и сегмент зашифрованного текста (Cj) состоит из s бит. Значение s иногда включается в название режима, например, режим CFB 1-бит, режим CFB 8-бит, режим CFB 64-бит или режим CFB 128-бит.
Эти режимы будут обрезать выходные данные базового блочного шифра.
CFB-1 считается самосинхронизирующимся и устойчивым к потере шифротекста; «Когда используется 1-битный режим CFB, то синхронизация автоматически восстанавливается на b+1 позиций после вставленного или удаленного бита. Для других значений s в режиме CFB и для других режимов конфиденциальности в этой рекомендации синхронизация должна быть восстановлена извне». (NIST SP800-38A). То есть потеря 1 бита в 128-битном блочном шифре, таком как AES, приведет к тому, что 129 недействительных бит будут выданы перед выдачей действительных битов.
CFB также может самосинхронизироваться в некоторых особых случаях, отличных от указанных. Например, изменение одного бита в CFB-128 с базовым 128-битным блочным шифром, повторно синхронизируется после двух блоков. (Однако, CFB-128 и т. д. не будут корректно обрабатывать потерю бита; потеря одного бита приведет к потере выравнивания дешифратора с шифратором)
Как и в режиме CBC, изменения в открытом тексте навсегда распространяются в зашифрованном тексте, и шифрование не может быть распараллелено. Также как и в режиме CBC, расшифровка может быть распараллелена.
Режимы CFB, OFB и CTR имеют два преимущества по сравнению с режимом CBC: блочный шифр используется только в направлении шифрования, и сообщение не нужно дополнять до размера, кратного размеру блока шифра (хотя кража шифротекста также может использоваться для режима CBC, чтобы сделать дополнение ненужным).
Режим обратной связи на выходе (OFB) превращает блочный шифр в синхронный потоковый шифр . Он генерирует блоки потока ключей , которые затем подвергаются операции XOR с блоками открытого текста для получения зашифрованного текста. Как и в других потоковых шифрах, переворачивание бита в зашифрованном тексте создает перевернутый бит в открытом тексте в том же месте. Это свойство позволяет многим кодам исправления ошибок нормально функционировать даже при применении до шифрования.
Из-за симметрии операции XOR шифрование и дешифрование абсолютно одинаковы:
Каждая операция выходного обратного блочного шифра зависит от всех предыдущих, и поэтому не может выполняться параллельно. Однако, поскольку открытый текст или шифротекст используется только для финального XOR, операции блочного шифра могут быть выполнены заранее, что позволяет выполнить последний шаг параллельно, как только открытый текст или шифротекст станут доступны.
Можно получить поток ключей режима OFB, используя режим CBC с постоянной строкой нулей в качестве входных данных. Это может быть полезно, поскольку позволяет использовать быстрые аппаратные реализации режима CBC для шифрования в режиме OFB.
Использование режима OFB с частичной блокировкой в качестве обратной связи, как в режиме CFB, уменьшает среднюю длину цикла в 2 32 раза или более. Математическая модель, предложенная Дэвисом и Паркином и подтвержденная экспериментальными результатами, показала, что только при полной обратной связи может быть достигнута средняя длина цикла, близкая к достижимому максимуму. По этой причине поддержка усеченной обратной связи была удалена из спецификации OFB. [29]
Как и OFB, режим счетчика превращает блочный шифр в потоковый шифр . Он генерирует следующий блок потока ключей , шифруя последовательные значения «счетчика». Счетчиком может быть любая функция, которая создает последовательность, которая гарантированно не будет повторяться в течение длительного времени, хотя фактический счетчик с приращением на единицу является самым простым и популярным. Использование простой детерминированной функции ввода раньше было спорным; критики утверждали, что «намеренное подвергание криптосистемы известному систематическому вводу представляет собой ненужный риск». [30] Однако сегодня режим CTR широко принят, и любые проблемы считаются слабостью базового блочного шифра, который, как ожидается, будет безопасным независимо от системного смещения на его входе. [31] Наряду с CBC, режим CTR является одним из двух режимов блочного шифра, рекомендованных Нильсом Фергюсоном и Брюсом Шнайером. [32]
Режим CTR был представлен Уитфилдом Диффи и Мартином Хеллманом в 1979 году. [31]
Режим CTR имеет схожие характеристики с OFB, но также допускает свойство произвольного доступа во время расшифровки. Режим CTR хорошо подходит для работы на многопроцессорной машине, где блоки могут шифроваться параллельно. Кроме того, он не страдает от проблемы короткого цикла, которая может повлиять на OFB. [33]
Если IV/nonce случайны, то их можно объединить со счетчиком, используя любую обратимую операцию (конкатенацию, сложение или XOR), чтобы получить фактический уникальный блок счетчика для шифрования. В случае неслучайного nonce (такого как счетчик пакетов) nonce и счетчик должны быть объединены (например, сохранение nonce в верхних 64 битах, а счетчика в нижних 64 битах 128-битного блока счетчика). Простое добавление или XOR nonce и счетчика в одно значение во многих случаях нарушит безопасность при атаке с выбранным открытым текстом , поскольку злоумышленник может манипулировать всей парой IV–счетчик, чтобы вызвать коллизию. Как только злоумышленник контролирует пару IV–счетчик и открытый текст, XOR шифротекста с известным открытым текстом даст значение, которое при XOR с шифротекстом другого блока, разделяющего ту же пару IV–счетчик, расшифрует этот блок. [34]
Обратите внимание, что nonce в этой диаграмме эквивалентен вектору инициализации (IV) в других диаграммах. Однако, если информация о смещении/местоположении повреждена, будет невозможно частично восстановить такие данные из-за зависимости от смещения байта.
Свойства «распространения ошибок» описывают, как расшифровка ведет себя во время битовых ошибок, т. е. как ошибка в одном бите распространяется каскадом на другие расшифрованные биты.
Ошибки в битах могут возникать намеренно при атаках или случайно из-за ошибок передачи.
Для современного аутентифицированного шифрования (AEAD) или протоколов с кодами аутентификации сообщений, связанными в порядке MAC-Then-Encrypt, любая ошибка бита должна полностью прерывать дешифрование и не должна генерировать никаких конкретных ошибок бита для дешифратора. Т.е. если дешифрование прошло успешно, не должно быть никаких ошибок бита. Таким образом, распространение ошибок является менее важным предметом в современных режимах шифрования, чем в традиционных режимах только конфиденциальности.
(Источник: SP800-38A Таблица D.2: Сводка влияния битовых ошибок на дешифрование)
Например, можно заметить, что ошибка в одном блоке в переданном шифртексте приведет к ошибке в одном блоке в восстановленном открытом тексте для шифрования в режиме ECB, тогда как в режиме CBC такая ошибка затронет два блока. Некоторые считали, что такая устойчивость желательна перед лицом случайных ошибок (например, шума на линии), в то время как другие утверждали, что исправление ошибок увеличивает возможности злонамеренного вмешательства злоумышленников в сообщение.
Однако при использовании надлежащей защиты целостности такая ошибка приведет (с высокой вероятностью) к отклонению всего сообщения. Если желательна устойчивость к случайным ошибкам, перед передачей к шифротексту следует применить коды исправления ошибок .
Было предложено гораздо больше режимов работы блочных шифров. Некоторые из них были приняты, полностью описаны (даже стандартизированы) и используются. Другие были признаны небезопасными и никогда не должны использоваться. Третьи не относятся к категории конфиденциального, аутентичного или аутентифицированного шифрования – например, режим обратной связи по ключу и хеширование Дэвиса–Майера .
NIST поддерживает список предлагаемых режимов для блочных шифров в Modes Development . [28] [35]
Шифрование диска часто использует специальные режимы, специально разработанные для приложения. Настраиваемые режимы шифрования с узкими блоками ( LRW , XEX и XTS ) и режимы шифрования с широкими блоками ( CMC и EME ) предназначены для надежного шифрования секторов диска (см. теорию шифрования диска ).
Многие режимы используют вектор инициализации (IV), который, в зависимости от режима, может иметь такие требования, как использование только один раз (nonce) или непредсказуемость перед его публикацией и т. д. Повторное использование IV с тем же ключом в режиме CTR, GCM или OFB приводит к XOR одного и того же потока ключей с двумя или более открытыми текстами, явному неправильному использованию потока с катастрофической потерей безопасности. Детерминированные режимы шифрования с аутентификацией, такие как алгоритм NIST Key Wrap и режим SIV (RFC 5297) AEAD, не требуют IV в качестве входных данных и возвращают один и тот же зашифрованный текст и тег аутентификации каждый раз для заданного открытого текста и ключа. Другие режимы, устойчивые к неправильному использованию IV, такие как AES-GCM-SIV, выигрывают от входа IV, например, в максимальном объеме данных, которые можно безопасно зашифровать одним ключом, при этом не давая катастрофических сбоев, если один и тот же IV используется несколько раз.
Блочные шифры также могут использоваться в других криптографических протоколах . Они обычно используются в режимах работы, похожих на описанные здесь блочные режимы. Как и в случае со всеми протоколами, для обеспечения криптографической безопасности необходимо позаботиться о правильной разработке этих режимов работы.
Существует несколько схем, которые используют блочный шифр для построения криптографической хэш-функции . Смотрите одностороннюю функцию сжатия для описания нескольких таких методов.
Криптографически безопасные генераторы псевдослучайных чисел (ГПСЧ) также могут быть созданы с использованием блочных шифров.
Коды аутентификации сообщений (MAC) часто строятся из блочных шифров. Примерами являются CBC-MAC , OMAC и PMAC .
{{cite journal}}
: |first=
имеет общее название ( помощь )