В криптографии атака оракула-дополнения — это атака, которая использует проверку криптографического сообщения- дополнения для расшифровки зашифрованного текста. В криптографии сообщения открытого текста переменной длины часто приходится дополнять (расширять), чтобы они были совместимы с базовым криптографическим примитивом . Атака основана на наличии « оракула- дополнения », который свободно отвечает на запросы о том, правильно ли дополнено сообщение или нет. Информация может быть предоставлена напрямую или просочиться через сторонний канал .
Самая ранняя известная атака, использующая оракул дополнения, — это атака Блейхенбахера 1998 года, которая атакует RSA с дополнением PKCS #1 v1.5 . [1] Термин «оракул дополнения» появился в литературе в 2002 году, [2] после атаки Сержа Воденай на режим дешифрования CBC , используемый в симметричных блочных шифрах . [3] Варианты обеих атак продолжают находить успех более десятилетия спустя после их первоначальной публикации. [1] [4] [5]
В 1998 году Дэниел Блейхенбахер опубликовал основополагающую статью о том, что стало известно как атака Блейхенбахера (также известная как «атака миллиона сообщений»). Атака использует оракул дополнения против RSA с PKCS #1 v1.5 дополнения, но она не включает этот термин. Более поздние авторы классифицировали его атаку как атаку оракула дополнения. [1]
Мангер (2001) сообщает об атаке на замену PKCS #1 v1.5 padding, PKCS #1 v2.0 "OAEP". [6]
В симметричной криптографии атака padding oracle может быть применена к режиму работы CBC . Утечка данных о валидности padding может позволить злоумышленникам расшифровывать (а иногда и шифровать) сообщения через oracle, используя ключ oracle, не зная ключа шифрования.
По сравнению с атакой Блейхенбахера на RSA с PKCS #1 v1.5, атака Воденай на CBC гораздо более эффективна. [1] Обе атаки нацелены на криптосистемы, которые обычно использовались в то время: CBC — это исходный режим, используемый в Secure Sockets Layer (SSL), и он продолжал поддерживаться в TLS. [4]
Было предпринято несколько мер по смягчению последствий, чтобы программное обеспечение для расшифровки не действовало как оракул, но новые атаки, основанные на синхронизации, неоднократно возрождали этого оракула. TLS 1.2 вводит ряд аутентифицированных шифрований с дополнительными режимами данных, которые не полагаются на CBC. [4]
Стандартная реализация расшифровки CBC в блочных шифрах заключается в расшифровке всех блоков зашифрованного текста, проверке заполнения, удалении заполнения PKCS7 и возврате открытого текста сообщения. Если сервер возвращает ошибку «недопустимое заполнение» вместо общей ошибки «дешифрование не удалось», злоумышленник может использовать сервер в качестве оракула заполнения для расшифровки (а иногда и шифрования) сообщений.
Математическая формула для расшифровки CBC:
Как показано выше, расшифровка CBC выполняет операцию XOR для каждого блока открытого текста с предыдущим блоком. В результате однобайтовая модификация в блоке внесет соответствующее изменение в один байт в .
Предположим, что у злоумышленника есть два блока зашифрованного текста , и он хочет расшифровать второй блок, чтобы получить открытый текст . Злоумышленник изменяет последний байт (создавая ) и отправляет на сервер. Затем сервер возвращает, является ли заполнение последнего расшифрованного блока ( ) правильным (допустимое заполнение PKCS#7). Если заполнение правильное, злоумышленник теперь знает, что последний байт равен , последние два байта равны 0x02, последние три байта равны 0x03, … или последние восемь байтов равны 0x08. Злоумышленник может изменить предпоследний байт (перевернуть любой бит), чтобы гарантировать, что последний байт равен 0x01. (В качестве альтернативы злоумышленник может перевернуть предыдущие байты и выполнить двоичный поиск позиции для определения заполнения. Например, если изменение третьего с конца байта верно, но изменение второго с конца байта неверно, то последние два байта известны как 0x02, что позволяет расшифровать их оба.) Таким образом, последний байт равен . Если заполнение неверно, злоумышленник может изменить последний байт на следующее возможное значение. Максимум, злоумышленнику потребуется сделать 256 попыток, чтобы найти последний байт , 255 попыток для каждого возможного байта (256 возможных, минус один по принципу ящика ), плюс одна дополнительная попытка, чтобы устранить неоднозначное заполнение. [7]
Определив последний байт , злоумышленник может использовать ту же технику для получения предпоследнего байта . Злоумышленник устанавливает последний байт в значение , установив последний байт в значение . Затем злоумышленник использует тот же подход, который описан выше, на этот раз изменяя предпоследний байт до тех пор, пока заполнение не станет правильным (0x02, 0x02).
Если блок состоит из 128 бит ( например, AES ), что составляет 16 байт, злоумышленник получит открытый текст не более чем за 256⋅16 = 4096 попыток. Это значительно быстрее, чем попытки, необходимые для подбора 128-битного ключа.
CBC-R [8] превращает оракул дешифрования в оракул шифрования и в первую очередь демонстрируется против оракулов заполнения.
Используя атаку оракула-заполнения CBC-R может создать вектор инициализации и блок зашифрованного текста для любого открытого текста:
Чтобы сгенерировать шифротекст длиной N блоков, злоумышленник должен выполнить N атак оракула-заполнителя. Эти атаки связаны вместе так, что надлежащий открытый текст создается в обратном порядке, от конца сообщения ( C N ) к началу сообщения ( C 0 , IV). На каждом шаге атака оракула-заполнителя используется для создания IV к предыдущему выбранному шифротексту.
Атака CBC-R не будет работать против схемы шифрования, которая проверяет подлинность зашифрованного текста (используя код аутентификации сообщения или аналогичный) перед расшифровкой.
Оригинальная атака против CBC была опубликована в 2002 году Сержем Воденаем . [3] Конкретные экземпляры атаки были позже реализованы против SSL [9] и IPSec. [10] [11] Она также применялась к нескольким веб-фреймворкам , включая JavaServer Faces , Ruby on Rails [12] и ASP.NET [13] [14] [15], а также к другому программному обеспечению, такому как игровой клиент Steam . [16] В 2012 году было показано, что она эффективна против криптографических токенов PKCS 11. [1]
Хотя эти более ранние атаки были исправлены большинством разработчиков TLS после его публичного объявления, новый вариант, атака Lucky Thirteen , опубликованная в 2013 году, использовала временной боковой канал для повторного открытия уязвимости даже в реализациях, которые ранее были исправлены. По состоянию на начало 2014 года атака больше не считается угрозой в реальной работе, хотя она все еще работоспособна в теории (см. отношение сигнал-шум ) против определенного класса машин. По состоянию на 2015 год [обновлять]наиболее активной областью разработки атак на криптографические протоколы, используемые для защиты интернет-трафика, являются атаки понижения версии , такие как атаки Logjam [17] и Export RSA/FREAK [18] , которые обманывают клиентов, заставляя их использовать менее безопасные криптографические операции, предусмотренные для совместимости с устаревшими клиентами, когда доступны более безопасные. Атака под названием POODLE [19] (конец 2014 г.) сочетает в себе как атаку понижения версии (до SSL 3.0), так и атаку оракула-заполнителя на старый, небезопасный протокол, чтобы позволить скомпрометировать передаваемые данные. В мае 2016 г. было обнаружено в CVE - 2016-2107, что исправление против Lucky Thirteen в OpenSSL представило еще один оракул-заполнитель на основе времени. [20] [21]
Похожая модель атаки использовалась Блейхенбахером против PKCS#1 v1.5 [5] и Мангером против PKCS#1 v2.0 [13]. В этой статье показано, что подобные атаки возможны в мире симметричных ключей.