Предотвратите частичную расшифровку шифротекстов (или иную утечку информации), гарантируя, что злоумышленник не сможет восстановить какую-либо часть открытого текста, не имея возможности инвертировать одностороннюю перестановку с лазейкой .
Первоначальная версия OAEP (Bellare/Rogaway, 1994) показала форму « осведомленности о открытом тексте » (которая, как они утверждали, подразумевает безопасность против атаки с выбранным шифротекстом ) в модели случайного оракула, когда OAEP используется с любой перестановкой с секретным входом. Последующие результаты противоречили этому заявлению, показывая, что OAEP был безопасен только на уровне IND-CCA1 . Однако в модели случайного оракула было доказано, что исходная схема безопасна на уровне IND-CCA2 , когда OAEP используется с перестановкой RSA с использованием стандартных экспонент шифрования, как в случае RSA-OAEP. [2]
Улучшенная схема (названная OAEP+), которая работает с любой односторонней перестановкой с секретным входом, была предложена Виктором Шупом для решения этой проблемы. [3]
Более поздние работы показали, что в стандартной модели (то есть, когда хэш-функции не моделируются как случайные оракулы) невозможно доказать безопасность IND-CCA2 RSA-OAEP при предполагаемой сложности проблемы RSA . [4] [5]
hLen — длина выходных данных хэш-функции в байтах,
k — длина модуля RSA n в байтах,
M — сообщение, которое необходимо дополнить, длиной mlen (максимум байт),
L — необязательная метка, которая будет связана с сообщением (по умолчанию метка представляет собой пустую строку и может использоваться для аутентификации данных без необходимости шифрования),
PS — это строка байтов, состоящая из нулевых байтов.
⊕ — операция XOR .
Кодирование
RFC 8017 [6] для PKCS#1 v2.2 определяет схему OAEP для кодирования следующим образом:
Хешируем метку L, используя выбранную хеш-функцию:
Сгенерируйте строку заполнения PS, состоящую из байтов со значением 0x00.
Объедините lHash , PS , один байт 0x01 и сообщение M , чтобы сформировать блок данных DB :. Этот блок данных имеет длину байт.
Сгенерировать случайное начальное число длины hLen .
Используйте функцию генерации маски, чтобы сгенерировать маску соответствующей длины для блока данных:
Замаскируйте блок данных с помощью сгенерированной маски:
Используйте функцию генерации маски, чтобы сгенерировать маску длиной hLen для начального числа:
Замаскируйте семя с помощью сгенерированной маски:
Закодированное (дополненное) сообщение представляет собой байт 0x00, объединенный с maskedSeed и maskedDB :
Расшифровка
Декодирование осуществляется путем обратного выполнения шагов, выполняемых в алгоритме кодирования:
Хешируем метку L, используя выбранную хеш-функцию:
Чтобы обратить шаг 9, разделите закодированное сообщение EM на байт 0x00, maskedSeed (длиной hLen ) и maskedDB :
Сгенерируйте seedMask , который использовался для маскировки семени :
Чтобы отменить шаг 8, восстановите начальное значение с помощью seedMask :
Сгенерируйте dbMask , который использовался для маскирования блока данных:
Чтобы отменить шаг 6, восстановите блок данных DB:
Чтобы отменить шаг 3, разделите блок данных на части: .
Убедитесь, что:
lHash' равен вычисленному lHash
PS состоит только из байтов 0x00
PS и M разделены байтом 0x01 и
первый байт EM — это байт 0x00.
Если какое-либо из этих условий не выполняется, то заполнение является недействительным.
Использование в RSA: Закодированное сообщение затем может быть зашифровано с помощью RSA. Детерминированное свойство RSA теперь избегается с помощью кодирования OAEP, поскольку начальное число генерируется случайным образом и влияет на все закодированное сообщение.
Безопасность
Безопасность " все или ничего " заключается в том, что для восстановления M необходимо восстановить весь maskedDB и весь maskedSeed ; maskedDB требуется для восстановления seed из maskedSeed , а seed требуется для восстановления блока данных DB из maskedDB . Поскольку любой измененный бит криптографического хеша полностью меняет результат, весь maskedDB и весь maskedSeed должны быть полностью восстановлены.
Выполнение
В стандарте PKCS#1 случайные оракулы идентичны. Стандарт PKCS#1 также требует, чтобы случайные оракулы были MGF1 с соответствующей хэш-функцией. [7]
^
Эйитиро Фудзисаки, Тацуаки Окамото, Дэвид Пойнтшеваль и Жак Стерн . RSA-- OAEP безопасен при предположении RSA . В J. Kilian, ed., Advances in Cryptology – CRYPTO 2001, vol. 2139 of Lecture Notes in Computer Science, SpringerVerlag, 2001. полная версия (pdf)
^
Виктор Шоуп. OAEP Reconsidered . IBM Zurich Research Lab, Saumerstr. 4, 8803 Ruschlikon, Switzerland. 18 сентября 2001 г. полная версия (pdf)
^
П. Пайе и Дж. Виллар, Торговля однонаправленностью против безопасности выбранного шифротекста в шифровании на основе факторинга , Достижения в криптологии – Asiacrypt 2006.
^
Д. Браун, Какие хэши делают RSA-OAEP безопасным?, IACR ePrint 2006/233.
^ "Операция шифрования". PKCS #1: Спецификации криптографии RSA версии 2.2. IETF . Ноябрь 2016 г. стр. 22. раздел 7.1.1. doi : 10.17487/RFC8017 . RFC 8017. Получено 04.06.2022 .