Перейти к содержанию

Оптимальное асимметричное шифрование с дополнением

Материал из Мегавики
(перенаправлено с «OAEP»)

OAEP (англ. Optimal Asymmetric Encryption Padding, Оптимальное асимметричное шифрование с дополнением) — схема дополнения, обычно используемая совместно с какой-либо односторонней функцией с потайным входом (например RSA или функции Рабина) для повышения криптостойкости последней. OAEP предложено Михиром Белларе[англ.] и Филлипом Рогавэем[англ.][1], а его применение для RSA впоследствии стандартизировано в PKCS#1 и RFC 2437.

История[править]

Оригинальная версия OAEP, предложенная Белларе и Рогавэем в 1994 году заявлялась как устойчивая к атакам на основе подобранного шифротекста в сочетании с любой односторонней функции с потайным входом[1]. Дальнейшие исследования показали, что такая схема обладает устойчивостью только к атакам на основе неадаптивно подобранного шифротекста[2]. Несмотря на это, было доказано, что в модели случайных оракулов при использовании стандартного RSA с шифрующей экспонентой, схема обладает так же устойчивостью к атакам на основе адаптивно подобранного шифротекста[3]. В более новых работах было доказано, что в стандартной модели (когда хеш-функции не моделируются как случайные оракулы) невозможно доказать устойчивость к атакам на основе адаптивного шифротекста в случае использования RSA[4].

Алгоритм OAEP[править]

Схема OAEP

Классическая схема OAEP представляет собой двухъячеечную сеть Фейстеля, где в каждой ячейке данные преобразуются с помощью криптографической хеш-функции. На вход сеть получает сообщение с дописанными к нему проверяющими нулями и ключ — случайную строку[5].

В схеме используются следующие обозначения:

Шифрование[править]

  1. Сообщению m дописывается k1 нулей, благодаря чему оно достигает nk0 бит в длину.
  2. Генерируется случайная k0-битная строка r.
  3. G расширяет k0 бит строки r до nk0 бит.
  4. X=m00..0G(r).
  5. H ужимает nk0 бит X до k0 бит.
  6. Y=rH(X).
  7. Зашифрованный текст X||Y.

Расшифрование[править]

  1. Восстанавливается случайная строка r=YH(X)
  2. Восстанавливается исходное сообщение как m00..0=XG(r)
  3. Последние k1 символов расшифрованного сообщения проверяются на равенство нулю. Если имеются ненулевые символы, то сообщение подделано злоумышленником.

Применение[править]

Алгоритм OAEP применяется для предварительной обработки сообщения перед использованием RSA. Сначала сообщение дополняется до фиксированной длины с помощью OAEP, затем шифруется с помощью RSA. Совместно, такая схема шифрования получила название RSA-OAEP и является частью действующего стандарта шифрования с открытым ключом (RFC 3447). Так же Виктором Бойко было доказано, что функция вида gG,H(x)=f(OAEPG,H(x,r)) в модели случайных оракулов является преобразованием типа "все или ничего"[англ.][4].

Модификации[править]

В силу таких недостатков, как невозможность доказать криптографическую стойкость к атакам на основе подобранного шифротекста, а также низкая скорость работы схемы[6], впоследствии были предложены модификации на основе OAEP, которые устраняют данные недостатки.

Алгоритм OAEP+[править]

Виктор Шоуп[англ.] предложил свой вариант схемы дополнения на основе OAEP (называемый OAEP+), который является устойчивым к атакам с адаптивно подобранным шифротекстом в случае комбинирования с любой односторонней функцией с потайным входом[2].

Шифрование[править]

  1. Генерируется случайная k0-битная строка r.
  2. H преобразует r||m в строку длины k1.
  3. G преобразует r в строку длины nk0k1.
  4. Составляется левая часть сообщения X=(G(r)m)||H(r||m).
  5. H преобразует X в строку длины k0.
  6. Составляется правая часть сообщения Y=H(X)r.
  7. Зашифрованный текст X||Y.

Расшифрование[править]

  1. Восстанавливается случайная строка r=YH(X).
  2. X разбивается на две части X1 и X2, размерами nk1k0 и k1 бит соответственно.
  3. Восстанавливается исходное сообщение как m=G(r)X1.
  4. Если не выполняется H(r||m)=X2, то сообщение подделано.

Алгоритм SAEP/SAEP+[править]

Дэн Боне предложил две упрощённые реализации OAEP, названные SAEP и SAEP+ соответственно. Основная идея упрощения шифрования заключается в отсутствии последнего шага — сообщение «склеивалось» с изначально сгенерированной случайной строкой r. Таким образом, схемы состоят только из одной ячейки Фейстеля, благодаря чему достигается прирост к скорости работы[7]. Отличием алгоритмов друг от друга выражается в записи проверяющих битов. В случае SAEP это нули, в то время как для SAEP+ — это хеш от m||r (соответственно как у OAEP и OAEP+)[5]. Недостатком алгоритмов является сильное уменьшение длины сообщения. Надёжность схем в случае использования функции Рабина и RSA была доказана только при следующем ограничении на длину передаваемого текста: mn/2+k0 для SAEP+ и дополнительно mn/4 для SAEP[8]. Стоит отметить, что при примерно одинаковой скорости работы, SAEP+ имеет меньше ограничений на длину сообщения чем SAEP[8], благодаря чему признан более предпочтительным[8].

В схеме используются следующие обозначения:

Шифрование SAEP+[править]

  1. Генерируется случайная k0-битная строка r.
  2. G преобразует m||r в строку длины k1.
  3. H преобразует r в строку длины nk0.
  4. Вычисляется X=(m||G(m||r))H(r).
  5. Зашифрованный текст X||r.

Дешифрование SAEP+[править]

  1. Вычисляется X1||X2=XH(r), где X1 и X2 — строки размерами nk0k1 и k0 соответственно.
  2. Проверяется равенство X2=G(X1||r). Если равенство выполняется, то исходное сообщение X1, если нет — то сообщение подделано злоумышленником.

См. также[править]

Примечания[править]

Литература[править]