Кража зашифрованного текста - Ciphertext stealing

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

Общие характеристики

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

Это достигается путем изменения обработки двух последних блоков сообщения. Обработка всех блоков, кроме двух последних, не изменилась, но часть второй-Зашифрованный текст последнего блока «украден» для заполнения последнего блока открытого текста. Заполненный последний блок затем шифруется как обычно.

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

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

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

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

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

Чтобы реализовать CTS-шифрование или дешифрование данных неизвестной длины, реализация должна отложить обработку (и буферизовать) два самых последних блока данных, чтобы их можно было правильно обработать в конце потока данных.

Формат зашифрованного текста

Есть несколько разных способов организовать зашифрованный текст для передачи. Биты зашифрованного текста одинаковы во всех случаях, просто передаются в другом порядке, поэтому выбор не влияет на безопасность; это просто вопрос удобства реализации.

Нумерация здесь взята из Дворкина, который описывает их все. Третий - самый популярный и описан Daemen и Шнайер; Мейер описывает родственную, но несовместимую схему (в отношении порядка битов и использования ключей).

CS1

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

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

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

CS2

Часто более удобно поменять местами два последних блока зашифрованного текста, так что зашифрованный текст заканчивается полным последним блоком, за которым следует усеченный предпоследний блок. Это приводит к естественно выровненным блокам зашифрованного текста.

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

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

CS3

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

Описание режима кражи зашифрованного текста

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

Следующие шаги описывают, как обрабатывать последние два блока открытого текста, называемые пп−1 и пп, где длина пп−1 равно размеру блока шифра в битах, B; длина последнего блока, пп, является M биты; и K это ключ, который используется. M может варьироваться от 1 до B, включительно, поэтому пп возможно, это полный блок. В описании режима CBC также используется блок зашифрованного текста непосредственно перед соответствующими блоками, Cп−2, который на самом деле может быть IV, если открытый текст умещается в два блока.

Для этого описания используются следующие функции и операторы:

  • Руководитель (данные, а): возвращает первый а биты строки данных.
  • Хвост (данные, а): возвращает последний а биты строки данных.
  • Зашифровать (K, data): используйте базовый блочный шифр в режиме шифрования для строки 'data' с помощью ключа K.
  • Расшифровать (K, data): используйте базовый блочный шифр в режиме дешифрования для строки 'data' с помощью ключа K.
  • XOR: Побитовое исключающее ИЛИ. Эквивалентно поразрядному сложению без использования бита переноса.
  • ||: оператор конкатенации. Объедините строки по обе стороны от оператора.
  • 0а: строка а 0 бит.

Кража зашифрованного текста ECB

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

Шаги шифрования ECB (см. Рисунок)

Шаги шифрования ECB для CTS
  1. Eп−1 = Зашифровать (K, пп−1). Зашифровать пп−1 создавать Eп−1. Это эквивалентно поведению в стандартном режиме ECB.
  2. Cп = Голова (Eп−1, M). Выберите первый M кусочки Eп−1 создавать Cп. Последний блок зашифрованного текста, Cп, состоит из ведущих M биты предпоследнего блока зашифрованного текста. Во всех случаях последние два блока отправляются в другом порядке, чем соответствующие блоки открытого текста.
  3. Dп = пп || Хвост (Eп−1, BM). Pad пп с младшими битами из Eп−1.
  4. Cп−1 = Зашифровать (K, Dп). Зашифровать Dп создавать Cп−1. Во-первых M бит, это эквивалентно тому, что произошло бы в режиме ECB (кроме порядка зашифрованного текста). За последние BM бит, это второй раз, когда эти данные были зашифрованы под этим ключом (он уже был зашифрован при производстве Eп−1 на шаге 2).

Шаги расшифровки ECB

  1. Dп = Расшифровать (K, Cп−1). Расшифровать Cп−1 создавать Dп. Это отменяет шаг 4 процесса шифрования.
  2. Eп−1 = Cп || Хвост (Dп, BM). Pad Cп с извлеченным зашифрованным текстом в конце Dп (помещается туда на шаге 3 процесса шифрования ECB).
  3. пп = Голова (Dп, M). Выберите первый M кусочки Dп создавать пп. Как описано в шаге 3 процесса шифрования ECB, первый M кусочки Dп содержать пп. Мы ставим этот последний (возможно, частичный) блок в очередь для окончательного вывода.
  4. пп−1 = Расшифровать (K, Eп−1). Расшифровать Eп−1 создавать пп−1. Это отменяет шаг шифрования 1.

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

Битовая ошибка при передаче Cп−1 приведет к повреждению обоих пп−1 и пп.Битовая ошибка при передаче Cп приведет к повреждению всего блока пп−1. Это существенное изменение по сравнению с поведением ЕЦБ по распространению ошибок.

Кража шифротекста CBC

В CBC уже существует взаимодействие между обработкой различных смежных блоков, поэтому CTS имеет меньшее концептуальное влияние в этом режиме. Это влияет на распространение ошибки.

Шаги шифрования CBC

  1. Иксп−1 = пп−1 XOR Cп−2. Эксклюзивный или пп−1 с предыдущим блоком зашифрованного текста, Cп−2, создавать Иксп−1. Это эквивалентно поведению в стандартном режиме CBC.
  2. Eп−1 = Зашифровать (K, Иксп−1). Зашифровать Иксп−1 создавать Eп−1. Это эквивалентно поведению в стандартном режиме CBC.
  3. Cп = Голова (Eп−1, M). Выберите первый M кусочки Eп−1 создавать Cп. Последний блок зашифрованного текста, Cп, состоит из ведущих M биты предпоследнего блока зашифрованного текста. Во всех случаях последние два блока отправляются в другом порядке, чем соответствующие блоки открытого текста.
  4. п = пп || 0BM. Pad пп с нулями в конце для создания п длины B. Нулевое заполнение на этом шаге важно для шага 5.
  5. Dп = Eп−1 XOR п. Эксклюзивный или Eп−1 с п создавать Dп. Во-первых M биты блока, это эквивалентно режиму CBC; первый M биты зашифрованного текста предыдущего блока, Eп−1, XORed с M биты открытого текста последнего блока открытого текста. Нулевое заполнение п на шаге 4 был важен, потому что он заставляет эффект операции XOR воздействовать на последний BM бит, эквивалентный копированию последнего BM кусочки Eп−1 до конца Dп. Это те самые кусочки, которые были удалены Eп−1 на шаге 3, когда Cп был создан.
  6. Cп−1 = Зашифровать (K, Dп). Зашифровать Dп создавать Cп−1. Во-первых M битов, это эквивалентно тому, что произошло бы в режиме CBC (кроме порядка зашифрованного текста). За последние BM бит, это второй раз, когда эти данные были зашифрованы под этим ключом (он уже был зашифрован при производстве Eп−1 на шаге 2).

Шаги расшифровки CBC

  1. Dп = Расшифровать (K, Cп−1). Расшифровать Cп−1 создавать Dп. Это отменяет шаг 6 процесса шифрования.
  2. C = Cп || 0BM. Pad Cп с нулями в конце, чтобы создать блок C длины B. Мы набиваем Cп с нулями, чтобы помочь на шаге 3.
  3. Иксп = Dп XOR C. Эксклюзивный или Dп с C создавать Иксп. Глядя на первый M бит, этот шаг имеет результат XORing Cп (первый M биты процесса шифрования ' Eп−1) с (теперь расшифрованным) пп Голова XOR (Eп−1, M) (см. шаги 4–5 процесса шифрования). Другими словами, мы расшифровали CBC первый M кусочки пп. Глядя на последний BM бит, это восстанавливает последние BM кусочки Eп−1.
  4. пп = Голова (Иксп, M). Выберите первый M кусочки Иксп создавать пп. Как описано в шаге 3, первый M кусочки Иксп содержать пп. Мы ставим этот последний (возможно, частичный) блок в очередь для окончательного вывода.
  5. Eп−1 = Cп || Хвост (Иксп, BM). Добавляем хвост (BM) кусочки Иксп к Cп создавать Eп−1. Как описано в шаге 3, Eп−1 состоит из всех Cп (который M биты) с последним BM кусочки Иксп. Собираем заново Eп−1 (что то же самое Eп−1 видно в процессе шифрования) для обработки на шаге 6.
  6. Иксп−1 = Расшифровать (K, Eп−1). Расшифровать Eп−1 создавать Иксп−1. Это отменяет шаг шифрования 2. Иксп−1 такой же, как и в процессе шифрования.
  7. пп−1 = Иксп−1 XOR Cп−2. Эксклюзивный или Иксп−1 с предыдущим блоком зашифрованного текста, Cп−2, создавать пп−1. Наконец, мы отменяем шаг XOR из шага 1 процесса шифрования.

Заметки о реализации CBC

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

Кража шифротекста CBC с использованием стандартного интерфейса CBC
  1. Добавьте 0 в последний частичный блок открытого текста.
  2. Зашифруйте весь открытый текст с заполнением в стандартном режиме CBC.
  3. Поменяйте местами два последних блока зашифрованного текста.
  4. Усечь зашифрованный текст до длины исходного открытого текста.
CipherText Stealing (CTS) на CBC, режим шифрования
Расшифровка кражи шифротекста CBC с использованием стандартного интерфейса CBC
  1. Dп = Расшифровать (K, Cп−1). Расшифруйте предпоследний блок зашифрованного текста, используя режим ECB.
  2. Cп = Cп || Хвост (Dп, BM). Дополните зашифрованный текст до ближайшего кратного размеру блока, используя последний BM биты дешифрования блочного шифра предпоследнего блока зашифрованного текста.
  3. Поменяйте местами два последних блока зашифрованного текста.
  4. Расшифруйте (модифицированный) зашифрованный текст, используя стандартный режим CBC.
  5. Обрезать открытый текст до длины исходного зашифрованного текста.
CipherText Stealing (CTS) на CBC, режим дешифрования

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

Битовая ошибка при передаче Cп−1 приведет к повреждению обоих пп−1 и пп.Битовая ошибка при передаче Cп приведет к соответствующей битовой ошибке в пп, а также при повреждении всего блока пп−1.

Рекомендации

  • Дэмен, Джоан (1995). «2.5.1 и 2.5.2». Дизайн шифров и хеш-функций, стратегии, основанные на линейном и дифференциальном криптоанализе (PDF) (Кандидатская диссертация). Katholieke Universiteit Leuven.
  • Шнайер, Брюс (1995). Прикладная криптография (2-е изд.). John Wiley & Sons, Inc., стр. 191, 195. ISBN  978-0-471-12845-8.
  • Мейер, Карл Х .; Матиас, Стивен М. (1982). Криптография: новое измерение в безопасности компьютерных данных. John Wiley & Sons, Inc., стр. 77–85. ISBN  978-0-471-04892-3.
  • Р. Болдуин; Р. Ривест (октябрь 1996 г.). Алгоритмы RC5, RC5-CBC, RC5-CBC-Pad и RC5-CTS. Дои:10.17487 / RFC2040. RFC 2040.
  • Дворкин, Моррис (октябрь 2011 г.). Рекомендации для режимов работы блочного шифра: три варианта кражи зашифрованного текста для режима CBC (PDF). Национальный институт стандартов и технологий США (NIST). Приложение к NIST Special Pub 800-38A.