Атака на основе подобранного шифротекста

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Атака на основе подобранного шифротекста (англ. Chosen-ciphertext attack) — криптографическая атака, при которой криптоаналитик собирает информацию о шифре путём подбора зашифрованного текста и получения его расшифровки при неизвестном ключе. Как правило, криптоаналитик может воспользоваться устройством расшифрования один или несколько раз для получения шифротекста в расшифрованном виде. Используя полученные данные, он может попытаться восстановить секретный ключ для расшифровки. Существуют шифры, для которых атаки данного типа могут оказаться успешными. К их числу относятся: Схема Эль-Гамаля; RSA, используемый в протоколе SSL; NTRU. Для защиты используют шифры RSA-OAEP и Крамера-Шоупа.

Атака на основе подобранного шифротекста может быть адаптивной и неадаптивной.

Атака на основе неадаптивно подобранного шифротекста

При неадаптивной атаке криптоаналитик не использует результаты предыдущих расшифровок, то есть шифротексты подбираются заранее. Такие атаки называют атаками в обеденное время (lunchtime или CCA1).

Атака на основе адаптивно подобранного шифротекста

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

Атака на протоколы, базирующиеся на стандарте шифрования RSA PKCS#1

[править | править код]

Краткое описание стандарта RSA PKCS#1

[править | править код]

Один из представителей криптосистем с открытым ключом (Public Key Cryptography Standards), базирующихся на алгоритме RSA. Пусть k — байтовая длина модуля RSA, n. Существует много вариантов исполнения стандарта PKCS#1. В данном примере рассмотрена версия RSAES-PKCS1-v1_5 без использования цифровой подписи, второй байт блока сообщения равен 00 или 01. Стандарт может оперировать с сообщениями максимальной длины, равной k—11. Блок стандарта PKCS#1, EB, состоит из k байт. Его вид EB = 00||02||PS||00||D. Первые два байта постоянны и равны соответственно 00 и 02. PS — строка заполнения, сгенерированное псевдослучайное число, состоящее из ненулевых байтов. Для повышения уровня безопасности рекомендуется генерировать новый блок PS для каждого отдельного шифрования. Его длина, соответственно, равна k-3-|D|, где D — блок данных, |D| - его байтовая длина. Длина блока PS должна быть не менее 8-ми байтов. Блоки PS и D должны быть разделены между собой нулевым байтом. Для удобства в дальнейшем не будем конкретизировать стандарт RSAES-PKCS1-v1_5, будем обозначать его как PKCS#1. Пусть n, e — открытый ключ, а p, q, d — секретный ключ. Согласно RSA . Блок EB преобразуется в целое число x и шифруется алгоритмом RSA, . Получатель проверяет длину шифротекста, , расшифровывает его , преобразует в блочный вид и проверяет наличие правильных первых двух байтов, разделяющего нулевого байта и длину блока PS. Если проверка не пройдена, то выдаётся ошибка.

Описание атаки

[править | править код]

Данный пример иллюстрирует возможность успешной атаки на основе адаптивно подобранного шифротекста. Пусть у криптоаналитика есть доступ к устройству, которое для любого выбранного шифротекста показывает, имеет ли соответствующий открытый текст формат стандарта PKCS#1, и перед ним стоит задача расшифровать шифротекст C. Таким образом аналитик может подбирать различные шифротексты и отсылать их на устройство. Получив ответ, он составляет следующий шифротекст, исходя из результатов предыдущих. Таким образом, на основании ответов, полученных от устройства и знаний о формате открытого сообщения, соответствующего стандарту, криптоаналитик может вычислить . Решающим фактором в атаке являются первые два байта открытого сообщения, которые являются константами. В данном примере рассмотрен алгоритм, который минимизирует количество шифротекстов, необходимых для получения открытого сообщения. Атаку можно разделить на 3 этапа:

  • Получение шифротекста , который соответствует сообщению
  • Нахождение малых чисел , для которых шифротексты вида удовлетворяют стандарту PKCS. Для каждого успешно найденного , используя предыдущие знания об , аналитик вычисляет ряд интервалов, в которых должно содержаться .
  • Нахождение ряда, состоящего только из одного интервала. В этом случае аналитик обладает достаточной информацией об , чтобы выбрать нужное , для которого удовлетворяет стандарту PKCS. Величина постепенно увеличивается, пока интервал не уменьшится до одного возможного числа.

Математическое описание атаки

[править | править код]

Предположим, что перед криптоаналитиком стоит цель узнать . Так как k — байтовая длина числа n, тогда . Аналитик выбирает число s, вычисляет и посылает на устройство. Если устройство принимает сообщение, то нам точно известно, что первые два байта 00 и 02. Обозначим для удобства . Допустим, что s подошло, тогда верна оценка . Собрав информацию такого типа, мы можем найти m. Как правило, шифротекстов будет достаточно, но это число может колебаться в широких пределах. Распишем атаку пошагово.

  1. Нахождение . Имея целое число c, выбираем различные случайные целые числа , затем проверяем с помощью устройства, удовлетворяет ли выражение стандарту PKCS. Для первого успешно найденного таким образом числа находим , , .
  2. Нахождение подходящих сообщений
    1. Начало поиска. Если i=1, тогда ищем наименьшее положительное число , для которого шифротекст удовлетворяет стандарту PKCS.
    2. Иначе, если и число интервалов в не менее 2-х, тогда ищем наименьшее целое число , для которого шифротекст удовлетворяет стандарту PKCS.
    3. Иначе, если содержит точно один интервал (то есть ), тогда выбираем целые числа , которые удовлетворяют выражениям и , до тех пор, пока шифротекст не будет удовлетворять стандарту PKCS.
  3. Сужение множества решений. После того как найдено, ряд интервалов вычисляется как для всех и .
  4. Вычисление решения. Если содержит только один интервал вида , тогда устанавливаем и возвращаем m как решение . Иначе и переходим к шагу 2.

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

Анализ атаки

[править | править код]

Оценка вероятности соответствия сообщения стандарту PKCS

[править | править код]

Пусть вероятность того, что случайно выбранный шифротекст имеет подходящий формат открытого сообщения, равна , а  — вероятность того, что для любого случайно выбранного целого числа первые 2 байта 00 и 02. Так как , отсюда следует, что . Модуль RSA обычно выбирается кратным 8-и. Значит, обычно близко к . Вероятность того, что PS блок содержит не менее 8-ми ненулевых байтов, завершающихся одним нулевым байтом, равна . Предполагая, что n не менее 512 бит (k > 64), имеем . Значит, .

Оценка интервалов

[править | править код]

Докажем, что . Так как соответствует стандарту PKCS, то , отсюда следует, что . Предположим, что . Значит, существует интервал с . Так как соответствует стандарту PKCS, то существует такое r, что , значит, , , то есть содержится в одном из интервалов.

Оценка сложности атаки

[править | править код]

Сообщение в шаге 1 выбрано случайно, значит, необходимо отослать на устройство около сообщений, чтобы найти . Аналогично для шагов 2.1 и 2.2 при . Пусть  — число интервалов в . Тогда для . Длина интервала ограничена сверху величиной . Зная, что формата PKCS, получаем интервалов формы . будет содержать около интервалов. Если , тогда каждый из интервалов или его часть включается в , если перекрывается с одним из интервалов . Ни один из интервалов не может перекрываться с двумя интервалами . Если интервалы случайно распределены, тогда вероятность того, что один пересекается с , будет ограничена сверху величиной . Таким образом уравнение для получено в предположении, что один интервал должен содержать величину . В нашем случае мы ожидаем, что получим с помощью примерно и имеем . Следовательно, примет единичное значение с большой вероятностью. Поэтому ожидается, что шаг 2.2 возникнет только один раз. Проанализируем шаг 2.3. Имеется , следовательно, , поэтому . Длина интервала . Поэтому можно найти пару , удовлетворяющую неравенствам в шаге 2.3 для каждой третьей величины . Вероятность того, что , равна приблизительно . Поэтому мы можем найти , удовлетворяющую стандарту примерно с помощью шифротекстов. Так как остальной интервал в разделяется наполовину в каждом шаге 2.3, мы ожидаем найти с помощью около шифротекстов. Для и понадобится около шифротекстов для успешной атаки. Все вероятности, обозначенные выше, были найдены в предположении, что все независимы. Пусть и удовлетворяют стандарту PKCS и имеют одинаковую длину блока PS. Тогда для некоторого целого числа получаем и . Тогда с большой вероятностью удовлетворяют стандарту PKCS, так как тоже часто удовлетворяют стандарту. Обычно выбирают n кратным 8-ми, так как для него вероятность мала. Модуль с битовой длиной, равной , является удобным для аналитика, так как для успешной атаки необходимо в этом случае около шифротекстов.

Доступ к расшифровывающему устройству

[править | править код]

Рассмотрим 3 ситуации, в которых аналитик может получить доступ к устройству.

  1. Обычное шифрование. Alice генерирует сообщение, шифрует его по стандарту PKCS#1 без применения проверки целостности и посылает его Bob-у. Bob расшифровывает его и, если формат расшифрованного сообщения не удовлетворяет стандарту, то он выдает ошибку, в противном случае он действует согласно протоколу. Таким образом аналитик может выступить в роли Alice и проверять сообщения на соответствие стандарту. Заметим, что атака аналитика работает, даже если используется аутентификация на последующем шаге, так как он получит нужную информацию до того, как надо будет подтвердить пользователя.
  2. Детализированные сообщения об ошибках. Проверка целостности является важной частью RSA-шифрования. Один из путей проведения такой проверки является подпись сообщения секретным ключом, до того как отправитель шифрует его открытым ключом. Тогда злоумышленнику не удастся создать правильное сообщение случайно. Тем не менее, атака может быть успешной. В случае неудавшейся проверки получатель отправляет сообщение, в котором уточняется информация, где произошла ошибка в проверке. В частности, это ставит под угрозу безопасность, возвращать различные сообщения об ошибке для сообщения, которое не удовлетворяет стандарту, и для сообщения, в котором произошла ошибка проверки подписи.
  3. Временна́я атака. В некоторых вариантах формирования сообщений включается и шифрование, и подпись. Рассмотрим последовательность действий.
    1. Сообщение расшифровывается.
    2. Если оно не удовлетворяет стандарту, то отсылается сообщение об ошибке.
    3. В противном случае идет проверка подписи.
    4. Если подпись неправильная, то выдается ошибка, иначе доступ.

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

Литература

[править | править код]