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

редактировать

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

Содержание
  • 1 Общие характеристики
  • 2 Формат зашифрованного текста
    • 2.1 CS1
    • 2.2 CS2
    • 2.3 CS3
  • 3 Описание режима кражи зашифрованного текста
    • 3.1 Кража зашифрованного текста ECB
      • 3.1.1 Этапы шифрования ECB (см. Рисунок)
      • 3.1.2 Этапы дешифрования ECB
      • 3.1.3 Распространение ошибки кражи зашифрованного текста ECB
    • 3.2 Кража шифротекста CBC
      • 3.2.1 Этапы шифрования CBC
      • 3.2. 2 Этапы дешифрования CBC
      • 3.2.3 Замечания по реализации CBC
        • 3.2.3.1 Шифрование с использованием шифротекста CBC с использованием стандартного интерфейса CBC
        • 3.2.3.2 Расшифровка с использованием похищения шифротекста CBC с использованием стандартного интерфейса CBC
      • 3.2.4 CBC распространение ошибки кражи зашифрованного текста
  • 4 Ссылки
Общие характеристики

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

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

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

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

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

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

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

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

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

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

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

CS1

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

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

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

CS2

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

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

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

CS3

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

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

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

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

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

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

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

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

Этапы шифрования ECB (см. Рисунок)

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

ECB шаги дешифрования

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

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

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

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

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

Этапы шифрования CBC

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

CBC шаги дешифрования

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

Замечания по реализации CBC

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

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

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

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

Ссылки
Последняя правка сделана 2021-05-15 08:18:13
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте