Статья:

Атака Padding Oracle на блочные шифры

Конференция: XL Студенческая международная заочная научно-практическая конференция «Молодежный научный форум: технические и математические науки»

Секция: Технические науки

Выходные данные
Андросова Т.Е., Болдырев А.С., Курочкин В.М. [и др.] Атака Padding Oracle на блочные шифры // Молодежный научный форум: Технические и математические науки: электр. сб. ст. по мат. XL междунар. студ. науч.-практ. конф. № 11(40). URL: https://nauchforum.ru/archive/MNF_tech/11(40).pdf (дата обращения: 26.12.2024)
Лауреаты определены. Конференция завершена
Эта статья набрала 0 голосов
Мне нравится
Дипломы
лауреатов
Сертификаты
участников
Дипломы
лауреатов
Сертификаты
участников
на печатьскачать .pdfподелиться

Атака Padding Oracle на блочные шифры

Андросова Татьяна Евгеньевна
студент 4 курса, кафедра геоинформатики и информационной безопасности, Самарский университет, РФ, г. Самара
Болдырев Артем Сергеевич
студент 4 курса, кафедра геоинформатики и информационной безопасности, Самарский университет, РФ, г. Самара
Курочкин Владислав Михайлович
студент 4 курса, кафедра геоинформатики и информационной безопасности, Самарский университет, РФ, г. Самара
Чернов Роман Вячеславович
студент 4 курса, кафедра геоинформатики и информационной безопасности, Самарский университет, РФ, г. Самара

 

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

Блочные шифры

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

Стандартом PKCS#7 предусмотрено следующее правило дополнения блока: если размер блока равен N, а число занятых байт в последнем блоке равно L, то в конец данного блока дописываются N – L байт со значением N – L. Например, если N = 8, а L = 5, то в конец блока допишутся 3 байта со значением 03, так как N – L = 3.

В работе рассмотрен определенный режим сцепления блоков: Cipher Block Chaining (CBC). Схема CBC выглядит следующим образом:

 

Рисунок 1. Схема шифрования в режиме CBC

 

Рисунок 2. Схема расшифровки в режиме CBC

 

Здесь Pi – блоки исходного сообщения, Ci – зашифрованные блоки, К – ключ шифрования, EK – функция шифрования, DK – функция расшифровки, IV – инициализирующий вектор, «+» – операция XOR. IV представляет собой некоторую известную строку байт с длиной, равной длине блока.

Padding Oracle

При атаке Padding Oracle предполагается, что мы можем отправлять сообщения некоторому приложению (Оракулу) на расшифровку, которое может возвращать ответ, корректно ли выполнено дополнение последнего блока. Расшифровка сообщения происходит с последних блоков шифротекста. Рассмотрим алгоритм расшифровки блока Ci+1.

1.  Сформируем блок R, все байты которого, кроме последнего, зададим случайными значениями. Перебираем байт RN от 0x00 до 0xFF, каждый раз посылая Оракулу сообщение [R||Ci+1] для расшифровки, где «||» означает конкатенацию блоков. Если при некотором значении RN Оракул «одобрит» дополнение, то мы можем утверждать, что дополнение при расшифровке получилось равным 01 (TN = 01). После этого вычисляем SN = RN xor 0x01. SN является последним байтом блока так называемого «промежуточного состояния». Найдя SN, мы можем вычислить pN = SN xor cN.

 

Рисунок 3. Пояснение к первому шагу атаки

 

2.  Сформируем новый блок R, все байты которого, кроме двух последних, зададим случайными значениями. RN = SN xor 0x02, чтобы всегда получать TN = 02. Перебираем байт RN-1 от 0x00 до 0xFF, каждый раз посылая Оракулу сообщение [R||Ci+1] для расшифровки. Если при некотором значении RN-1 Оракул «одобрит» дополнение, то мы можем утверждать, что дополнение при расшифровке получилось равным 02 02 (TN-1 = 02). После этого вычисляем SN-1 = RN-1 xor 0x02. Блок Ii+1 остается неизменным во время расшифровки блока Ci+1. Найдя SN-1, мы можем вычислить pN-1 = SN-1 xor cN-1.

 

Рисунок 4. Пояснение ко второму шагу атаки

 

На третьем шаге соответственно пытаемся получить дополнение 03 03 03, на четвертом – 04 04 04 04 и так далее. После N шагов получаем полностью блок Pi+1. Далее переходим к блоку Ci и находим блок Pi, отбрасывая при этом блок Ci+1 из рассмотрения, считая блок Ci последним. При расшифровке блока С1 в качестве предыдущего блока берем IV.

Рассмотрим пример расшифровки сообщения C, которое разбивается на блоки C1 = [8b1e394e9c3a37c8073fb0e300a3b479] и C2 = [4e890457a0b83dd105bb76b8723203a9].

Каждая строка на рисунках 5 и 6 – один шаг. Зеленым цветом выделен блок R, «##»– случайный байт. Красным цветом выделен блок I, «##» –неизвестный на данном шаге байт. Желтым цветом выделен блок P, «#» – неизвестный на данном шаге байт. Нераспознанные символы на рисунке 5 – это байты 06 06 06 06 06 06, которыми дополнялся последний блок перед шифрованием сообщения.

 

Рисунок 5. Расшифровка блока C2

 

Рисунок 5. Расшифровка блока C1

 

Заключение

В данной статье рассмотрен алгоритм атаки Padding Oracle, который использует уязвимости дополнения блока и режима сцепления блоков CBC. Рассмотрен пример, показывающий эффективность данной атаки.

 

Список литературы:
1. Мао В. Современная криптография: теория и практика: Пер. с англ. – М.: Издательский дом «Вильямс», 2005. – 768 с.