Режим Шифрования

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

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

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

История

В 1981 году был принят стандарт FIPS 81. В стандарте были описаны первые режимы работы блочных шифров: ECB, CBC, OFB и CFB. В 2001 году институт NIST (национальный институт стандартов и технологий США) пересмотрел список режимов и добавил в него описание работы блочного шифра AES в режиме CTR (SP800-38A). В январе 2010 года NIST добавил в стандарт описание работы шифра AES в режиме XTS (SP800-38E).

В стандарте описаны не все режимы, а только режимы, одобренные институтом NIST. Например, режим CTS (англ. ciphertext stealing) в стандарте не описан, но реализован во многих популярных криптографических библиотеках.

Режимы шифрования определяются рядом национально и международно признанных организаций. Наиболее влиятельной из них является NIST.

Основные режимы

Ниже приведено описание нескольких режимов шифрования с использованием блочных шифров.

Electronic Codebook (ECB)

В ГОСТ 28147—89 этот режим называется режимом простой замены.

Шифрование:

Пусть дано сообщение Режим Шифрования  (открытый текст, последовательность бит, данные).

Во время шифрования выполняются следующие действия:

Режим Шифрования 
Шифрование в режиме ECB (режиме электронной кодовой книги)
  1. Сообщение делится на блоки одинакового размера. Размер (длина) блока равен n и измеряется в битах. В результате получается последовательность блоков Режим Шифрования . Последний блок при необходимости дополняется до длины Режим Шифрования .
  2. Каждый блок Режим Шифрования  шифруется алгоритмом шифрования Режим Шифрования  с использованием ключа k:
    Режим Шифрования 
    где:
    В результате получаются зашифрованные блоки Режим Шифрования .

Расшифровка:

выполняется функцией Режим Шифрования  с использованием того же ключа k:

    Режим Шифрования 

Особенности:

  • каждый блок шифруется/расшифровывается независимо от других блоков.

Недостатки ECB:

Режим Шифрования  Режим Шифрования  Режим Шифрования 
Открытый текст в виде изображения Криптограмма, полученная шифрованием в режиме ECB. На изображении видны черты исходного изображения Криптограмма, полученная шифрованием в режиме, отличном от ECB. Изображение представляет собой псевдослучайную последовательность пикселей

Достоинства ECB:

  • постоянная скорость обработки блоков (скорость определяется эффективностью реализации шифра);
  • возможно распараллеливание вычислений (так как блоки не связаны между собой).

Этот режим называется режимом электронной кодовой книги, так как существует возможность создать книгу, в которой каждому блоку открытого текста будет сопоставлен блок зашифрованного текста. Однако создать книгу — нетривиальная задача. Если размер блока равен x бит, то в книге будет содержаться 2x записей, и каждая книга будет соответствовать одному ключу.

Cipher Block Chaining (CBC)

Для шифрования некоторого сообщения Режим Шифрования  выполняются следующие действия.

Режим Шифрования 
Шифрование в режиме CBC (режиме сцепления блоков шифротекста)
  • Сообщение разбивается на блоки одинакового размера. Размер (длина) блока равен n и измеряется в битах. При необходимости последний блок дополняется до длины Режим Шифрования .
  • Шифрование очередного (i-го) блока сообщения (Режим Шифрования ) выполняется с использованием предыдущего зашифрованного ((i-1)-го) блока (Режим Шифрования ). Для первого блока (Режим Шифрования ) зашифрованного блока (Режим Шифрования ) не существует, поэтому первый блок шифруют с использованием «вектора инициализации» (англ. initialization vector, IV):
    Режим Шифрования  (вектор инициализации — случайное число)
    Размер (длина) IV равна размеру блока (n).
  • В функцию шифрования Режим Шифрования  передаётся сумма по модулю 2 («⊕», «xor») текущего блока сообщения Режим Шифрования  и предыдущего зашифрованного блока Режим Шифрования :
    Режим Шифрования 
    где:
    • i — номер блока;
    • k — ключ;
    • IV — вектор инициализации (синхропосылка);
    • Режим Шифрования  — блок сообщения (открытый текст);
    • Режим Шифрования  — зашифрованный блок (шифротекст), полученный на предыдущем шаге шифрования;
    • Режим Шифрования  — функция, выполняющая блочное шифрование.

Расшифровка выполняется функцией Режим Шифрования  с использованием тех же ключа k и вектора инициализации IV:

    Режим Шифрования 
    Режим Шифрования 

Недостатки CBC:

  • возможность определения начала изменения данных по изменению шифротекста (если сравнить шифротексты двух сообщений с одним и тем же ключом, то номер первого блока, в котором шифротексты различаются, будет соответствовать номеру первого блока, в котором различаются исходные сообщения);
  • возможность изменения открытого текста при перемещении[куда?] блоков[каких?]; (Предыдущий автор, наверное, хотел сказать, о смене порядка блоков шифра. Это скорее недостаток ECB, и да, возможно изменить открытый текст при ECB, просто меняя блоки шифра местами).
  • возможность изменения блока шифротекста Режим Шифрования  путём изменения блока сообщения Режим Шифрования ;
  • невозможность распараллеливания шифрования (поскольку для шифрования каждого i-го блока требуется блок, зашифрованный на предыдущем шаге (блоки связаны между собой)).

Достоинства CBC:

  • постоянная скорость обработки блоков (скорость определяется эффективностью реализации шифра; время выполнения операции «xor» пренебрежимо мало);
  • отсутствие статистических особенностей, характерных для режима ECB (поскольку каждый блок открытого текста «смешивается» с блоком шифротекста, полученным на предыдущем шаге шифрования);
  • возможность распараллеливания расшифровки.

Propagating Cipher Block Chaining (РСВС)

Недостатки режима CBC привели к созданию усовершенствованного режима распространяющегося сцепления блоков шифра (Propagating Cipher Block Chaining, РСВС). Естественно, этот режим похож на CBC за исключением того, что предыдущий блок открытого текста и предыдущий блок шифротекста подвергается операции XOR с текущим блоком открытого текста перед шифрованием или после него.
Режим Шифрования 
Соответственно расшифрование: Режим Шифрования 
где Режим Шифрования  — вектор инициализации
Режим шифрования РСВС применяется в протоколе Kerberos 4 версии и позволяет обнаруживать ошибки. Данный режим шифрования не является федеральным или международным стандартом. Режим РСВС — вариант режима СВС, обладающий специфическим свойством — ошибка шифротекста приводит к неправильному дешифрированию всех последующих блоков. Это соответственно означает, что проверка стандартного блока в конце сообщения обеспечивает целостность всего сообщения.

Режим Шифрования 
Шифрование в режиме PCBC


Конечно, этот режим не лишён недостатков, так перестановка двух блоков шифротекста приводит к неправильной расшифровке двух соответствующих блоков открытого текста, но из-за XOR над открытым текстом и шифротекстом дальнейшие ошибки компенсируются. Поэтому, если при проверке целостности проверяются только несколько последних блоков расшифрованного текста, можно получить частично испорченное сообщение. Хотя никто ещё не воспользовался этой уязвимостью в Kerberos, но в 5 версии уже перешли на режим CBC.

Cipher Feedback (CFB)

Режим обратной связи по шифротексту, режим гаммирования с обратной связью (англ. cipher feed back mode, CFB). Во время шифрования каждый блок открытого текста складывается по модулю 2 с блоком, зашифрованным на предыдущем шаге.

    Режим Шифрования 
    Режим Шифрования 
    Режим Шифрования 
Режим Шифрования 
Шифрование в режиме обратной связи по шифротексту

Криптостойкость CFB определяется криптостойкостью используемого шифра. Блоки открытого текста «смешиваются» («маскируются») с блоками шифротекста. Если в режиме CFB с полноблочной обратной связью имеется два идентичных блока шифротекста, результат, например, шифрования алгоритмом DES на следующем шаге будет тем же. Скорость шифрования режима CFB с полноблочной обратной связью та же, что и у блочного шифра, причём возможности распараллеливания процедуры шифрования ограничены.

Output Feedback (OFB)

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

Из-за симметрии операции сложения, шифрование и расшифрование похожи:

Режим Шифрования 

Режим Шифрования 

Режим Шифрования 

Режим Шифрования 

Режим Шифрования 
Шифрование в режиме OFB
Режим Шифрования 
Расшифрование в режиме OFB

Каждая операция блочного шифра обратной связи вывода зависит от всех предыдущих и поэтому не может быть выполнена параллельно. Однако, из-за того, что открытый текст или зашифрованный текст используются только для конечного сложения, операции блочного шифра могут быть выполнены заранее, позволяя выполнить заключительное шифрование параллельно с открытым текстом.
Обратная связь по выходу на k разрядов не рекомендуется из соображений криптостойкости. Режим OFB имеет следующее преимущество по сравнению с режимом CFB: ошибки, возникающие в результате передачи по каналу с шумом, при дешифровании не «размазываются» по всему шифротексту, а локализуются в пределах одного блока. Однако открытый текст может быть изменён путём определённых манипуляций с блоками шифротекста. Несмотря на то, что OFB-шифрование не поддаётся распараллеливанию, эффективность процедуры может быть повышена за счёт предварительной генерации независимой последовательности блоков.

Данный метод называется также «режим обратной связи по выходу».

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

Counter mode (CTR)

Режим счётчика (counter mode, CTR) предполагает возврат на вход соответствующего алгоритма блочного шифрования значения некоторого счётчика, накопленного с момента старта. Режим делает из блочного шифра потоковый, то есть генерирует последовательность, к которой применяется операция XOR с текстом сообщения. Исходный текст и блок зашифрованного текста имеют один и тот же размер блока, как и основной шифр (например, DES или AES). Режим CTR предусматривает следующие операции.

    Шифрование в режиме CTR

Режим Шифрования 

    Расшифровка в режиме CTR

Режим Шифрования 

Режим Шифрования  — значение счётчика для i-го блока.

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

Во-первых, значения счётчика для шифрования блоков в пределах одного сообщения получаются из начального значения счётчика использованием функции приращения. Чтобы обеспечивать случайность, величина приращения может зависеть от номера блока. Стандартная функция приращения может быть применена как ко всему блоку счётчика, так и к его части. Пусть значение счётчика представляет блок из b битов, а функцию приращения мы применяем к m младшим разрядам.

Режим Шифрования 

Режим Шифрования 

Режим Шифрования  — функция конкатенации; Режим Шифрования  — младшие Режим Шифрования  битов; Режим Шифрования  — старшие Режим Шифрования  битов. Уникальность значений счётчика обеспечивается для всех блоков сообщения при условии, что Режим Шифрования . Где Режим Шифрования  — количество блоков, на которое разбивается сообщение.

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

При отсутствии обратной связи алгоритмы шифрования и расшифровки в режиме CTR могут выполняться параллельно. Более того, большие объёмы вычислений, связанные с шифрованием значений счётчика, могут быть выполнены заранее, до того, как открытый текст или шифротекст окажутся доступными. Это обеспечивает режиму CTR преимущество перед режимами CFB и OFB.

Random Delta (RD)

Режим Random Delta используется для устранения предсказуемости изменения счётчика в режиме CTR. К примеру, это AES, и размер блока 16 байт. Берётся случайный Initialization Vector (например, с помощью RdRand). Его младшие 8 байт считаются случайной дельтой — Random Delta (RD):

Режим Шифрования 
Initialization Vector для Random Delta

Initial (Initialization Vector) шифруется и передаётся в начале сообщения. Блок 0 перед шифрованием XOR-ится с Initial. Для каждого последующего блока величина Initial увеличивается на Delta (в беззнаковом целочисленном представлении — uint128 += uint64):

Режим Шифрования 
Режим сцепления «Random Delta»

Таким образом устраняется предсказуемость изменения счётчика в режиме CTR. Если там дельта — всегда единица, здесь дельта — случайное число, одно из 2^64. Злоумышленнику оно, как и Initial, неизвестно.

Также, CTR настораживает непосредственным соседством открытого текста с шифротекстом через XOR. В Random Delta между открытым текстом и шифротекстом лежит AES.

Открытость передачи Initial также вызывает вопросы. Чем меньше атакующий видит — тем лучше. Чем более открытый текст отдалён от шифротекста — тем лучше. Все известные режимы — ECB, CBC, OFB, CTR — обладают какими-то из этих недостатков. В Random Delta всё лежит за AES'ом, а Initial и Delta — случайные величины, которые злоумышленнику неизвестны.

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

Режим Шифрования 
Random Delta + Hash

Похоже, что Random Delta + Hash указанных недостатков лишён. Передано в общественное достояние.

Важный момент: между закрытым текстом и открытым должно лежать множество пермутаций AES'а, иное ослабляет глубину шифрования. Закрытый текст как функция от открытого посредством одной лишь XOR сводит на нет глубину шифрования, которую даёт AES (а именно такой способ используют режимы OFB, CFB, CTR).

Криптостойкость Random Delta не намного ниже криптостойкости самого AES'а.

Если требуется более высокая степень случайности дельты (например, 128-битная), она может генерироваться отдельно и передаваться в начале сообщения вместе с Initial.

Как и CTR, Random Delta позволяет осуществлять шифрование/дешифрование блоков параллельно, с большей производительностью, не дожидаясь шифрования/дешифрования предыдущего блока (что является необходимостью в CBC, PCBC, CFB, OFB).

Режим "Random Delta 128" отличается использованием отдельных 128-битных Initial и Delta. Даёт бОльшую случайность тени.

Режим Шифрования 
Режим сцепления «Random Delta 128»

Galois/Counter Mode (GCM) и AEAD

Galois/Counter Mode (счётчик с аутентификацией Галуа) — более безопасная модификация CTR, предоставляющее аутентифицированное шифрование с присоединёнными данными (AEAD-режим блочного шифрования).

Initialization vector (IV)

В криптографии вектор инициализации[en] (Режим Шифрования ) представляет собой некоторое число, как правило, оно должно быть случайным или псевдослучайным. Случайность имеет решающее значение для достижения семантической безопасности, которая при повторном использовании схемы под тем же ключом не позволит злоумышленнику вывести отношения между сегментами зашифрованных сообщений. Для блочных шифров использование Режим Шифрования  описывается режимами работы. Рандомизация требуется также для других примитивов, таких как универсальные хеш-функции и коды аутентификации сообщений на их основе.

В таких режимах шифрования, как CBC, CFB и OFB на вход подаётся вектор инициализации (Режим Шифрования ). Причём как отправитель, так и получатель в начале сеанса связи должны иметь один и тот же Режим Шифрования . Значение Режим Шифрования  вовсе не обязано быть секретным и вполне может быть передано вместе с первым блоком шифротекста. Что действительно важно, так это то, что в режимах CBC и CFB это значение должно быть непредсказуемым, а в режиме OFB — уникальным.

Непредсказуемости в режимах CBC и CFB можно достичь несколькими способами. Например, можно подвергнуть преобразованию той же функцией значение какого-либо счётчика (скажем, счётчика сообщений). Или использовать ГПК для генерации псевдослучайной последовательности нужной длины.

В режиме OFB вектор инициализации не обязан быть непредсказуемым, зато он должен быть уникален для всех сеансов связи, в которых в OFB используется один и тот же секретный ключ шифрования Режим Шифрования . Этого можно достичь, опять же используя счётчик сообщений. Если же не следовать этому требованию, то секретность сообщения в режиме OFB может быть легко скомпрометирована. Одним из следствий этого требования является то, что очередной вектор инициализации для режима OFB нельзя генерировать путём применения функции с тем же ключом Режим Шифрования .

Padding (набивка)

Режимы ECB, CBC и PCBC работают с сообщениями открытого текста, длина которых должна быть кратна длине одного блока. Если это свойство не выполняется, то к сообщению необходимо добавить необходимое количество битов, называемых дополнением (англ. padding). Например, «padding method 2» ISO/IEC 9797-1 предлагает добавлять в конец сообщения единичный бит, а оставшиеся заполнять нулями.

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

Распространение ошибок

Для любого режима бит ошибки в блоке шифротекста приводит к тому, что результат его расшифрования оказывается испорченным. В режимах CFB, OFB и CTR испорченный бит будет иметь ту же позицию в расшифрованном блоке, что и бит ошибки в блоке шифротекста, на остальные биты блока ошибка не распространится. В режимах ECB и CBC же испорченным может оказаться любой бит блока, с вероятностью около 50 % (зависит от прочности самого шифра). При этом в режимах ECB, OFB и CTR испорченным оказывается исключительно блок, получающийся в результате расшифровки испорченного блока. В режиме CBC ошибочному расшифрованию подвержен также и следующий блок, при этом испорченные биты будут соответствовать битам ошибки в шифротексте предыдущего блока. В режиме CFB бит ошибки в сегменте шифротексте влияет на следующие b/s (округляя до целого, b — длина блока, s — длина сегмента) сегментов, а ошибочным может оказаться любой из битов расшифрованного текста.

Наличие битов ошибок в векторе инициализации также наносит ущерб процессу расшифровки. В режиме OFB бит ошибки в IV поражает каждый блок шифротекста в соответствующем сообщении. В режиме CFB при ошибках в векторе инициализации испорченным окажется, по крайней мере, первый сегмент шифротекста. Будут ли испорчены остальные сегменты зависит от положения самого правого бита в IV (в худшем случае пострадают b/s сегментов шифротекста). При использовании режимов OFB и CFB в результате появления бита ошибки в IV испорченным может оказаться любой бит повреждённого шифротекста. В режиме CBC испорчены будут исключительно биты первого блока шифротекста, стоящие на позициях, соответствующих битам ошибки в векторе инициализации.

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

Помимо возникновения бита ошибки в блоке шифротекста может произойти стирание или вставка бита. Это приводит к нарушению границ всех последующих блоков шифротекста, а результаты расшифровки будут абсолютно неверными, пока синхронизация границ не восстановится. При использовании режима 1-битного CFB синхронизация восстанавливается автоматически спустя b+1 позиций после появившегося или исчезнувшего бита. В остальных режимах автоматического восстановления синхронизации не происходит.

Выбор режима шифрования

Выбор режима шифрования зависит от поставленной вами цели.

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

Примечания

См. также

Литература

  • Брюс Шнайер «Прикладная криптография».
  • Ященко В. В. «Введение в криптографию».
  • Чмора А. П. «Современная прикладная криптография».

Tags:

Режим Шифрования ИсторияРежим Шифрования Основные режимыРежим Шифрования Initialization vector (IV)Режим Шифрования Padding (набивка)Режим Шифрования Распространение ошибокРежим Шифрования Выбор режима шифрованияРежим Шифрования ПримечанияРежим Шифрования См. такжеРежим Шифрования ЛитератураРежим ШифрованияБлочный шифрОткрытый текстШифрованиеШифротекст

🔥 Trending searches on Wiki Русский:

ЯрославльМастурбацияЧерниговская, Татьяна ВладимировнаКэтрин, принцесса УэльскаяМексикаПэтриотПелеПи (число)ХаракириСписок фильмов кинематографической вселенной MarvelФоллаут (телесериал)Блиновская, Елена ОлеговнаГорода-миллионеры РоссииПелевин, Виктор ОлеговичБиблиография Ханса Кристиана АндерсенаМакгрегор, КонорИсчезнувшаяYouTube VancedАнглийский алфавитШекспир, УильямWebMoneyАбай КунанбаевПутешествия ГулливераСудьба человекаОблако Mail.ruВосстание СпартакаPinterestКлимова, Екатерина АлександровнаЕкатерина IIГардемарины, вперёд!Радио «Свобода»Кроуфорд, ТеренсХарламов, ГарикПограничное расстройство личности115-я отдельная механизированная бригадаКосмос между намиЧерногорияКиви (фрукт)Назарбаев, Нурсултан АбишевичЯндексПорнографияПожар в торговом центре «Зимняя вишня»Екатерина IXVideosВторая чеченская войнаИсламское государствоПо законам военного времени (телесериал)Папины дочки. НовыеМанчестер ЮнайтедЖуравлёв, Алексей АлександровичВолгоградЦыганеТамерланИисус ХристосЕльчин, Антон ВикторовичПётр IСписок штатов и территорий США по численности населенияCall of DutyКатехизис еврея в СССРИнтернетИрландияМорпехи (фильм)Список султанов Османской империиПригожин, Евгений ВикторовичДанияМасонствоНикитин, Игорь ВалерьевичКемстач, Леон ИльичНавальный, Алексей АнатольевичНосов, Николай НиколаевичАстанаИранСпособы самоубийстваКонтинентСёгун (мини-сериал, 2024)Маяковский, Владимир ВладимировичЛатинский язык🡆 More