RSA-OAEP, RSA-OAEP-256, RSA-OAEP-384, RSA-OAEP-512

RSA-OAEP относится к семейству алгоритмов асимметричного шифрования ключа в стандарте JWE (JSON Web Encryption), используемом в экосистеме JOSE. В библиотеке jose эти алгоритмы применяются для защиты CEK (Content Encryption Key), который затем используется симметрическим шифрованием основного содержимого.

В JWE структура шифрования разделяется на два уровня:

  • асимметричный алгоритм (alg) — защищает симметрический ключ
  • симметрический алгоритм (enc) — шифрует полезные данные

RSA-OAEP определяет способ, которым RSA используется для шифрования CEK с применением схемы Optimal Asymmetric Encryption Padding (OAEP). OAEP добавляет случайность и защитные преобразования перед RSA-операцией, устраняя детерминированность классического RSA.


RSA-OAEP (OAEP с SHA-1)

RSA-OAEP без уточнения хэша в JWA традиционно использует SHA-1 внутри OAEP:

  • хэш-функция: SHA-1
  • маскирующая функция MGF1: SHA-1

Формально алгоритм обозначается как:

  • RSA-OAEP

Несмотря на устаревание SHA-1 в криптографическом контексте подписи, в OAEP он сохраняет ограниченное применение, поскольку используется только внутри padding-схемы, а не как механизм целостности.

Особенности:

  • максимальная совместимость со старыми системами
  • широкая поддержка в legacy-инфраструктуре
  • менее предпочтителен в новых системах

RSA-OAEP-256 (OAEP с SHA-256)

Более современный вариант:

  • хэш-функция: SHA-256
  • MGF1: SHA-256

Обозначение:

  • RSA-OAEP-256

В большинстве современных реализаций JOSE этот алгоритм является предпочтительным.

Причины использования:

  • устранение зависимости от SHA-1
  • соответствие современным криптографическим требованиям
  • лучшая стойкость к теоретическим атакам на хэш-функции

В реализации jose данный алгоритм является стандартным выбором при работе с RSA-шифрованием.


RSA-OAEP-384 и RSA-OAEP-512

В официальной спецификации JWA (RFC 7518) определены только:

  • RSA-OAEP (SHA-1)
  • RSA-OAEP-256 (SHA-256)

Алгоритмы:

  • RSA-OAEP-384
  • RSA-OAEP-512

не входят в базовый стандарт, однако в некоторых криптографических библиотеках и расширениях могут встречаться как:

  • экспериментальные реализации
  • корпоративные профили безопасности
  • кастомные политики с усиленными хэш-функциями (SHA-384, SHA-512)

Логика таких вариантов:

  • SHA-384 / SHA-512 применяются в OAEP и MGF1
  • увеличивается криптографический запас стойкости
  • возрастает стоимость вычислений и размер метаданных

В JOSE-экосистеме их поддержка зависит от конкретной реализации и криптографического backend’а (например, Node.js crypto).


Использование RSA-OAEP в библиотеке jose

Работа с RSA-OAEP в jose строится вокруг функций EncryptJWT, jwtEncrypt, CompactEncrypt, importSPKI, importPKCS8.

Генерация ключевой пары (вне jose)

RSA-ключи обычно создаются через системные инструменты или Node.js crypto:

import { generateKeyPair } from 'node:crypto'

generateKeyPair('rsa', {
  modulusLength: 2048,
  publicKeyEncoding: {
    type: 'spki',
    format: 'pem'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'pem'
  }
}, (err, publicKey, privateKey) => {
  // ключи готовы
})

Импорт ключей в jose

import { importSPKI, importPKCS8 } from 'jose'

const publicKey = await importSPKI(publicKeyPem, 'RSA-OAEP-256')
const privateKey = await importPKCS8(privateKeyPem, 'RSA-OAEP-256')

Обозначение алгоритма при импорте фиксирует контекст допустимого использования ключа.


Шифрование JWE с RSA-OAEP-256

import { CompactEncrypt } from 'jose'

const encoder = new TextEncoder()

const jwe = await new CompactEncrypt(
  encoder.encode('секретные данные')
)
  .setProtectedHeader({
    alg: 'RSA-OAEP-256',
    enc: 'A256GCM'
  })
  .encrypt(publicKey)

Ключевые элементы:

  • alg: RSA-OAEP-256 — защита ключа
  • enc: A256GCM — симметрическое шифрование данных

Дешифрование

import { compactDecrypt } from 'jose'

const { plaintext } = await compactDecrypt(jwe, privateKey)

console.log(new TextDecoder().decode(plaintext))

Использование RSA-OAEP (SHA-1)

const publicKey = await importSPKI(publicKeyPem, 'RSA-OAEP')
.setProtectedHeader({
  alg: 'RSA-OAEP',
  enc: 'A256GCM'
})

Этот вариант используется в системах, где требуется совместимость со старыми OAuth2 / OpenID Connect провайдерами.


Сравнение RSA-OAEP и RSA-OAEP-256

RSA-OAEP:

  • SHA-1 внутри OAEP
  • максимальная совместимость
  • устаревший криптографический профиль

RSA-OAEP-256:

  • SHA-256 внутри OAEP
  • современный стандарт
  • рекомендуется для новых систем

Разница проявляется только на уровне KDF/OAEP padding, а не в самом RSA-математическом ядре.


Особенности RSA-OAEP в JWE-экосистеме

  1. Шифруется только CEK Основные данные всегда шифруются симметрическим алгоритмом (enc).

  2. Не влияет на размер payload напрямую RSA применяется только к ключу.

  3. Критична совместимость сторон Обе стороны должны поддерживать одинаковый alg.

  4. Зависимость от криптопровайдера Node.js crypto, WebCrypto API и OpenSSL могут иметь разные ограничения.


Выбор алгоритма в прикладных системах

Практическая логика выбора:

  • системы с legacy-интеграциями → RSA-OAEP
  • новые API и сервисы → RSA-OAEP-256
  • закрытые корпоративные профили → иногда SHA-384 / SHA-512 расширения

При этом в инфраструктуре jose обычно фиксируется строгий список допустимых alg через политики валидации заголовков JWE.


Типовые ошибки при использовании

  • несоответствие alg между encrypt/decrypt
  • импорт ключа с неправильным алгоритмом
  • попытка использовать RSA-OAEP-256 с ключом, импортированным как RSA-OAEP
  • отсутствие поддержки SHA-256 в старых Node.js версиях

Криптографическая модель OAEP

OAEP строится на двух внутренних функциях:

  • MGF1(mask generation function)
  • hash function (SHA-1 / SHA-256 / SHA-384 / SHA-512)

Схематично процесс:

  1. сообщение дополняется случайным seed
  2. seed маскирует данные через MGF1
  3. формируется padded block
  4. применяется RSA encryption

Эта конструкция устраняет детерминированность RSA и делает схему семантически безопасной при корректной реализации.


Практическая совместимость алгоритмов

Алгоритм SHA внутри Совместимость Статус
RSA-OAEP SHA-1 высокая legacy
RSA-OAEP-256 SHA-256 высокая стандарт
RSA-OAEP-384 SHA-384 ограниченная расширение
RSA-OAEP-512 SHA-512 ограниченная расширение

Интеграция в архитектуру JWE

RSA-OAEP часто используется в гибридной схеме:

  • RSA-OAEP → защита симметрического ключа
  • AES-GCM → защита данных

Такая комбинация позволяет:

  • сохранить производительность (AES)
  • обеспечить безопасный обмен ключами (RSA)
  • масштабировать систему без пересмотра криптографической модели