В криптографии атака оракула с заполнением - это атака, которая использует проверку заполнения криптографического сообщения для расшифровки зашифрованного текста. В криптографии сообщения открытого текста переменной длины часто должны дополняться (расширяться), чтобы быть совместимыми с базовым криптографическим примитивом . Атака основана на наличии «оракула заполнения», который свободно отвечает на запросы о том, правильно ли заполнено сообщение или нет. Атаки оракула заполнения в основном связаны с дешифрованием в режиме CBC, используемым в блочных шифрах . Режимы заполнения для асимметричных алгоритмов, таких как OAEP, также могут быть уязвимы для атак оракула с заполнением. [1]
Симметричная криптография [ править ]
В симметричной криптографии атака оракула с заполнением может быть применена к режиму работы CBC , когда « оракул » (обычно сервер) утекает данные о том, правильно ли заполнено зашифрованное сообщение. Такие данные могут позволить злоумышленникам расшифровать (а иногда и зашифровать) сообщения через оракул, используя ключ оракула, не зная ключа шифрования.
Заполнение атаки оракула на шифрование CBC [ править ]
Стандартная реализация дешифрования CBC в блочных шифрах заключается в расшифровке всех блоков зашифрованного текста, проверке заполнения, удалении заполнения PKCS7 и возврате открытого текста сообщения. Если сервер возвращает ошибку «недопустимое заполнение» вместо общей ошибки «сбой дешифрования», злоумышленник может использовать сервер в качестве оракула заполнения для расшифровки (а иногда и шифрования) сообщений.
Математическая формула для расшифровки CBC:
Как показано выше, расшифровка CBC выполняет XOR каждого блока открытого текста с предыдущим блоком зашифрованного текста. В результате однобайтная модификация в блоке приведет к соответствующему изменению в однобайтовом блоке .
Предположим, у злоумышленника есть два блока зашифрованного текста, и он хочет расшифровать второй блок, чтобы получить открытый текст . Злоумышленник изменяет последний байт (создание ) и отправляет на сервер. Затем сервер возвращает, является ли заполнение последнего расшифрованного блока ( ) правильным (равным 0x01). Если заполнение правильное, злоумышленник теперь знает, что последний байт равен . Следовательно, последний байт равно . Если заполнение неверно, злоумышленник может изменить последний байт на следующее возможное значение. В лучшем случае злоумышленнику потребуется сделать 256 попыток (одно предположение для каждого возможного байта), чтобы найти последний байт. Если расшифрованный блок содержит информацию о заполнении или байты, используемые для заполнения, необходимо будет предпринять дополнительную попытку для устранения этой неоднозначности. [2]
После определения последнего байта злоумышленник может использовать тот же метод для получения предпоследнего байта . Атакующий устанавливает последний байт в , установив последний байт в . Затем злоумышленник использует тот же подход, описанный выше, на этот раз изменяя предпоследний байт до тех пор, пока заполнение не станет правильным (0x02, 0x02).
Если блок состоит из 128 бит ( например, AES ), что составляет 16 байтов, злоумышленник получит открытый текст не более чем за 255⋅16 = 4080 попыток. Это значительно быстрее, чем попытки перебора 128-битного ключа.
Шифрование сообщений с помощью атаки оракула Padding (CBC-R) [ править ]
CBC-R [3] превращает оракула дешифрования в оракула шифрования и в первую очередь демонстрируется против оракулов заполнения.
Используя атаку оракула с заполнением, CBC-R может создать вектор инициализации и блок зашифрованного текста для любого открытого текста:
- расшифровать любой зашифрованный текст P i = PODecrypt (C i ) XOR C i − 1 ,
- свободно выбрать предыдущий шифроблок C x − 1 ,
- создать действительную пару зашифрованный / открытый текст C x-1 = P x XOR PODecrypt (C i ) .
Чтобы сгенерировать зашифрованный текст длиной N блоков, злоумышленник должен выполнить N атак оракула с заполнением. Эти атаки объединяются в цепочку, так что правильный открытый текст строится в обратном порядке, от конца сообщения ( C N ) до начала сообщения ( C 0 , IV). На каждом шаге используется атака оракула с заполнением для построения IV к предыдущему выбранному зашифрованному тексту.
Атака CBC-R не будет работать против схемы шифрования, которая аутентифицирует зашифрованный текст (используя код аутентификации сообщения или аналогичный) перед расшифровкой.
Атаки с использованием дополнительных оракулов [ править ]
Оригинальная атака была опубликована в 2002 году Сержем Воденэ . [4] Конкретные экземпляры атаки были позже реализованы против SSL [5] и IPSec. [6] [7] Он также применялся к нескольким веб-фреймворкам , включая JavaServer Faces , Ruby on Rails [8] и ASP.NET [9] [10] [11], а также к другому программному обеспечению, например, игровому клиенту Steam. . [12] В 2012 году было показано, что он эффективен против некоторых усиленных устройств безопасности. [13]
В то время как эти более ранние атаки были исправлены большинством разработчиков TLS после его публичного объявления, новый вариант, атака Lucky Thirteen , опубликованная в 2013 году, использовала временной побочный канал для повторного открытия уязвимости даже в реализациях, которые ранее были исправлены. По состоянию на начало 2014 года атака больше не считается угрозой в реальной жизни, хотя теоретически она все еще возможна (см. Соотношение сигнал / шум ) против определенного класса машин. По состоянию на 2015 год [Обновить]наиболее активной областью развития атак на криптографические протоколы, используемые для защиты интернет-трафика, являются атаки на более раннюю версию, такие как Logjam [14] и Export RSA / FREAK [15]атаки, которые заставляют клиентов использовать менее безопасные криптографические операции, обеспечиваемые для совместимости с устаревшими клиентами, когда доступны более безопасные. Атака под названием POODLE [16] (конец 2014 г.) сочетает в себе атаку перехода на более раннюю версию (до SSL 3.0) и атаку оракула с дополнением на старый, небезопасный протокол, чтобы обеспечить компрометацию передаваемых данных. В мае 2016 года в CVE - 2016-2107 было обнаружено, что исправление Lucky Thirteen в OpenSSL представило еще один оракул заполнения. [17] [18]
Ссылки [ править ]
- ^ Ясли, Джеймс. «Атака по выбранному зашифрованному тексту на RSA Optimal Asymmetric Encryption Padding (OAEP), стандартизированную в PKCS # 1 v2.0» (PDF) . Исследовательские лаборатории Telstra.
- ^ Является ли атака оракула детерминированной
- ^ Джулиано Риццо; Тайский дуонг (25 мая 2010 г.). Практическое дополнение атак Oracle (PDF) . USENIX WOOT 2010.
- ^ Серж Воденей (2002). Недостатки безопасности, вызванные приложениями заполнения CBC для SSL, IPSEC, WTLS ... (PDF) . ЕВРОКРИПТ 2002.
- ^ Брайс Канвел; Ален Хильтген; Серж Воденэ; Мартин Вуаньу (2003), Перехват пароля в канале SSL / TLS (PDF) .
- ^ Жан Поль Дегабриель; Кеннет Г. Патерсон (2007 г.), Атака стандартов IPsec в конфигурациях только для шифрования (PDF) , заархивировано из оригинала 19 декабря 2018 г. , получено 25 сентября 2018 г. .
- ^ Жан Поль Дегабриель; Кеннет Г. Патерсон (2010 г.), О (не) безопасности IPsec в конфигурациях «MAC-затем-шифрование» , CiteSeerX 10.1.1.185.1534 .
- ^ Джулиано Риццо; Тайский дуонг (25 мая 2010 г.). Практическое дополнение атак Oracle (PDF) . USENIX WOOT 2010.
- ^ Тайский дуонг; Джулиано Риццо (2011). Криптография в Интернете: пример недостатков криптографического дизайна в ASP.NET (PDF) . Симпозиум IEEE по безопасности и конфиденциальности 2011 г.
- ↑ Деннис Фишер (13 сентября 2010 г.). « Криптоатака « Padding Oracle »затронула миллионы приложений ASP.NET» . Сообщение с угрозами . Архивировано из оригинального 13 октября 2010 года.
- ^ Влад Azarkhin (19 сентября 2010). « Объяснение уязвимости ASP.NET " Padding Oracle "» . Архивировано из оригинального 23 октября 2010 года . Проверено 11 октября 2010 года .
- ^ «Взломать криптографию клиента Steam» . База данных Steam . Дата обращения 1 мая 2016 .
- ^ Ромен Барду; Риккардо Фокарди; Юсуке Кавамото; Лоренцо Симионато; Грэм Стил; Джо-Кай Цай (2012 г.), Эффективное противодействие атакам Oracle на криптографическое оборудование (PDF)
- ↑ Мэтью Грин; Надя Хенингер ; Пол Циммерман; и другие. (2015), Несовершенная прямая секретность: как Диффи – Хеллман терпит неудачу на практике (PDF) . Для получения дополнительной информации см. Https://www.weakdh.org. Архивировано 22 декабря 2019 г. на Wayback Machine .
- ↑ Мэтью Грин (3 марта 2015 г.). «Атака недели: FREAK (или« использование АНБ для развлечения и прибыли »)» .; см. https://www.freakattack.com Архивировано 5 марта 2015 г. на Wayback Machine для получения дополнительной информации.
- ↑ Мэтью Грин (14 октября 2014 г.). «Атака недели: ПУДЕЛЬ» .; для получения дополнительной информации см. https://www.poodle.io
- ^ Рекомендации по безопасности OpenSSL [3 мая 2016 г.] , 3 мая 2016 г.
- ^ Еще один Padding Oracle в OpenSSL CBC Ciphersuites, Cloudflare, 4 мая 2016 г.