В криптографии , шифротекст кражи ( CTS ) представляет собой общий метод с использованием режима блочного шифра работы , который позволяет для обработки сообщений, которые не делится на блоки , не приводя к любому расширению шифротекста , за счет слегка повышенной сложности.
Общие характеристики
Кража зашифрованного текста - это метод шифрования открытого текста с использованием блочного шифра без дополнения сообщения кратным размеру блока, поэтому зашифрованный текст имеет тот же размер, что и открытый текст.
Это достигается путем изменения обработки двух последних блоков сообщения. Обработка всех блоков, кроме двух последних, не изменяется, но часть зашифрованного текста второго -последнего блока «украдена» для заполнения последнего блока открытого текста. Заполненный последний блок затем шифруется как обычно.
Окончательный зашифрованный текст для последних двух блоков состоит из частичного предпоследнего блока (с опущенной «украденной» частью) плюс полного последнего блока, которые имеют тот же размер, что и исходный открытый текст.
Для расшифровки необходимо сначала расшифровать последний блок, а затем восстановить украденный зашифрованный текст до предпоследнего блока, который затем может быть расшифрован как обычно.
В принципе, можно использовать любой режим работы блочного шифрования с блочной ориентацией , но режимы, подобные потоковому шифрованию, уже могут применяться к сообщениям произвольной длины без заполнения, поэтому они не получают преимуществ от этого метода. Обычными режимами работы , которые связаны с кражей зашифрованного текста, являются электронная кодовая книга (ECB) и цепочка блоков шифров (CBC).
Для кражи зашифрованного текста в режиме ECB требуется, чтобы открытый текст был длиннее одного блока . Возможный обходной путь - использовать режим работы блочного шифра, подобный потоковому шифрованию, когда длина открытого текста составляет один блок или меньше, например режимы CTR, CFB или OFB.
Кража зашифрованного текста для режима CBC не обязательно требует, чтобы открытый текст был длиннее одного блока . В случае, когда длина открытого текста составляет один блок или меньше, вектор инициализации (IV) может действовать как предыдущий блок зашифрованного текста. В этом случае получателю необходимо отправить измененный IV. Это может быть невозможно в ситуациях, когда IV не может быть свободно выбран отправителем при отправке зашифрованного текста (например, когда IV является производным или предварительно установленным значением), и в этом случае кража зашифрованного текста для режима CBC может только встречаются в открытых текстах длиннее одного блока.
Чтобы реализовать CTS-шифрование или дешифрование данных неизвестной длины, реализация должна отложить обработку (и буферизовать) два самых последних блока данных, чтобы их можно было должным образом обработать в конце потока данных.
Формат зашифрованного текста
Есть несколько разных способов организовать зашифрованный текст для передачи. Биты зашифрованного текста одинаковы во всех случаях, просто передаются в другом порядке, поэтому выбор не влияет на безопасность; это просто вопрос удобства реализации.
Нумерация здесь взята у Дворкина, который их всех описывает. Третий - самый популярный и описан Дэменом и Шнайером ; Мейер описывает родственную, но несовместимую схему (в отношении порядка битов и использования ключей).
CS1
Возможно, наиболее очевидный способ организовать зашифрованный текст - передать усеченный предпоследний блок, за которым следует полный последний блок. Для приемника это неудобно по двум причинам:
- В любом случае получатель должен сначала расшифровать последний блок, и
- Это приводит к тому, что последний блок не выравнивается по естественной границе, что усложняет аппаратную реализацию.
Это имеет то преимущество, что, если последний блок открытого текста оказывается кратным размеру блока, зашифрованный текст идентичен исходному режиму работы без кражи зашифрованного текста.
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, если открытый текст помещается в два блока.
Для этого описания используются следующие функции и операторы:
- Руководитель (данные, ): возвращает первые а биты строки «данных».
- Tail (data, a ): возвращает последние a бит строки data.
- Шифрование ( K , данные): использовать базовый блок шифра в режиме шифровать на строке «данные» с использованием ключа K .
- Расшифровать ( К , данные): использовать базовый блок шифра в режиме расшифровка по строке «данные» с использованием ключа K .
- XOR : побитовое исключающее ИЛИ. Эквивалентно поразрядному сложению без использования бита переноса.
- ||: оператор конкатенации. Объедините строки по обе стороны от оператора.
- 0 : строка через 0 бит.
Кража зашифрованного текста ECB
Кража зашифрованного текста в режиме ECB вводит межблочную зависимость в последних двух блоках, что приводит к изменению поведения распространения ошибок для последних двух блоков.
Шаги шифрования ECB (см. Рисунок)
- E n −1 = Зашифровать ( K , P n −1 ). Зашифруйте P n −1, чтобы создать E n −1 . Это эквивалентно поведению в стандартном режиме ECB.
- C n = Голова ( E n -1 , M ). Выберите первые M битов E n -1, чтобы создать C n . Последний блок зашифрованного текста, C n , состоит из первых M битов предпоследнего блока зашифрованного текста. Во всех случаях последние два блока отправляются в другом порядке, чем соответствующие блоки открытого текста.
- D n = P n || Хвост ( E n −1 , B - M ). Заполните P n битами младшего разряда из E n -1 .
- C n −1 = Зашифровать ( K , D n ). Зашифруйте D n, чтобы создать C n −1 . Для первых M битов это эквивалентно тому, что произошло бы в режиме ECB (кроме порядка зашифрованного текста). Для последних битов B - M это второй раз, когда эти данные были зашифрованы этим ключом (они уже были зашифрованы при получении E n −1 на шаге 2).
Шаги расшифровки ECB
- D n = Расшифровать ( K , C n −1 ). Расшифруйте C n −1, чтобы создать D n . Это отменяет шаг 4 процесса шифрования.
- E n −1 = C n || Хвост ( Д н , Б - М ). Pad C n с извлеченным зашифрованным текстом в конце D n (помещенный туда на шаге 3 процесса шифрования ECB).
- P n = Голова ( D n , M ). Выберите первые M битов D n, чтобы создать P n . Как описано на шаге 3 процесса шифрования ECB, первые M битов D n содержат P n . Мы ставим этот последний (возможно, частичный) блок в очередь для окончательного вывода.
- P n −1 = Расшифровать ( K , E n −1 ). Расшифруйте E n -1, чтобы создать P n -1 . Это отменяет шаг шифрования 1.
Распространение ошибки кражи шифротекста ECB
Битовая ошибка при передаче C n -1 приведет к повреждению в масштабе всего блока как P n -1, так и P n . Битовая ошибка при передаче C n приведет к повреждению P n -1 на уровне всего блока . Это существенное изменение по сравнению с поведением ЕЦБ по распространению ошибок.
Кража шифротекста CBC
В CBC уже существует взаимодействие между обработкой различных смежных блоков, поэтому CTS имеет меньшее концептуальное влияние в этом режиме. Это влияет на распространение ошибок.
Шаги шифрования CBC
- X n −1 = P n −1 XOR C n −2 . Исключающее ИЛИ P n -1 с предыдущим блоком зашифрованного текста C n -2 , чтобы создать X n -1 . Это эквивалентно поведению стандартного режима CBC.
- E n −1 = Зашифровать ( K , X n −1 ). Зашифруйте X n −1, чтобы создать E n −1 . Это эквивалентно поведению стандартного режима CBC.
- C n = Голова ( E n -1 , M ). Выберите первые M битов E n -1, чтобы создать C n . Последний блок зашифрованного текста, C n , состоит из первых M битов предпоследнего блока зашифрованного текста. Во всех случаях последние два блока отправляются в другом порядке, чем соответствующие блоки открытого текста.
- P = P n || 0 В - М . Pad P п с нулями в конце , чтобы создать P длины B . Нулевое заполнение на этом шаге важно для шага 5.
- Д п = Е п -1 исключающее Р . Исключающее ИЛИ 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 n . Это те же самые биты, которые были удалены из E n -1 на шаге 3 при создании C n .
- C n −1 = Зашифровать ( K , D n ). Зашифруйте D n, чтобы создать C n −1 . Для первых M битов это эквивалентно тому, что произошло бы в режиме CBC (кроме порядка зашифрованного текста). Для последних битов B - M это второй раз, когда эти данные были зашифрованы этим ключом (они уже были зашифрованы при получении E n −1 на шаге 2).
Шаги расшифровки CBC
- D n = Расшифровать ( K , C n −1 ). Расшифруйте C n −1, чтобы создать D n . Это отменяет шаг 6 процесса шифрования.
- C = C n || 0 В - М . Коврик С п с нулями в конце , чтобы создать блок C длиной B . Мы дополняем C n нулями, чтобы облегчить выполнение шага 3.
- Х п = Д п исключающее ИЛИ С . Исключающее ИЛИ 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 .
- P n = Голова ( X n , M ). Выберите первые M битов X n, чтобы создать P n . Как описано в шаге 3, первые M битов X n содержат P n . Мы ставим этот последний (возможно, частичный) блок в очередь для окончательного вывода.
- E n −1 = C n || Хвост ( X n , B - M ). Добавьте хвостовые ( B - M ) биты X n к C n, чтобы создать E n −1 . Как описано в шаге 3, Е п -1 состоит из всех С п (что M бит в длину) прилагаемая с последним B - M бит X н . Мы повторно собираем E n −1 (который является тем же самым E n −1, наблюдаемым в процессе шифрования) для обработки на этапе 6.
- X n −1 = Расшифровать ( K , E n −1 ). Расшифруйте E n −1, чтобы создать X n −1 . Это меняет этап шифрования 2. X n -1 то же самое, что и в процессе шифрования.
- P n −1 = X n −1 исключающее ИЛИ C n −2 . Исключающее ИЛИ X n -1 с предыдущим блоком зашифрованного текста, C n -2 , чтобы создать P n -1 . Наконец, мы отменяем шаг XOR из шага 1 процесса шифрования.
Заметки о реализации CBC
Для кражи зашифрованного текста CBC существует умный (но непрозрачный) метод реализации описанного процесса кражи зашифрованного текста с использованием стандартного интерфейса CBC. Использование этого метода приводит к снижению производительности на этапе дешифрования одной операции дешифрования дополнительного блока по сравнению с тем, что было бы необходимо при использовании специальной реализации.
Кража шифротекста CBC с использованием стандартного интерфейса CBC
- Добавьте 0 в последний частичный блок открытого текста.
- Зашифруйте весь открытый текст с заполнением в стандартном режиме CBC.
- Поменяйте местами два последних блока зашифрованного текста.
- Обрезать зашифрованный текст до длины исходного открытого текста.
Расшифровка кражи шифротекста CBC с использованием стандартного интерфейса CBC
- D n = Расшифровать ( K , C n −1 ). Расшифруйте предпоследний блок зашифрованного текста, используя режим ECB.
- C n = C n || Хвост ( Д н , Б - М ). Дополните зашифрованный текст до ближайшего кратного размеру блока, используя последние B - M битов дешифрования блочного шифра предпоследнего блока зашифрованного текста.
- Поменяйте местами два последних блока зашифрованного текста.
- Расшифруйте (модифицированный) зашифрованный текст, используя стандартный режим CBC.
- Обрезать открытый текст до длины исходного зашифрованного текста.
Распространение ошибки кражи шифротекста CBC
Битовая ошибка при передаче C n -1 приведет к повреждению в масштабе всего блока как P n -1, так и P n . Битовая ошибка при передаче C n приведет к соответствующей битовой ошибке в P n и к повреждению P n -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 . DOI : 10,17487 / RFC2040 . RFC 2040 .
- Дворкин, Моррис (октябрь 2011 г.). Рекомендации по режимам работы блочного шифра: три варианта кражи зашифрованного текста для режима CBC (PDF) . Национальный институт стандартов и технологий США (NIST). Приложение к NIST Special Pub 800-38A.