openjdk.ruOpenJDK на русском

JEP 121: Stronger Algorithms for Password-Based Encryption

Более стойкие алгоритмы для шифрования на основе пароля

АвторValerie Peng
ОтветственныйVincent Ryan
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск8
Компонентsecurity-libs / java.security
Обсуждениеsecurity dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
ОдобренBrian Goetz
Создан2011/05/11 20:00
Обновлён2026/08/04 23:16
Задача8046111

Аннотация

Добавить в провайдер SunJCE реализации более стойких алгоритмов Password-Based-Encryption (PBE, шифрование на основе пароля).

Что не является целью

Помимо алгоритмов, перечисленных ниже в разделе «Описание», PKCS#5 определяет для PBES2 ещё несколько схем шифрования, многие из которых устарели: DES-CBC-PAD, DES-EDE3-CBC-PAD, RC2-CBC-PAD и RC5-CBC-PAD. Поскольку спроса на использование этих устаревших схем шифрования с более новой криптографией на основе пароля, например PBES2, нет, их поддержку добавлять не планируется.

Хотя спецификация PKCS#11 определяет некоторые механизмы для криптографии на основе пароля, провайдер SunPKCS11 сейчас не поддерживает ни один из них. Поддержка со стороны нижележащей библиотеки PKCS11 тоже, по-видимому, минимальна: например, реализация Solaris softtoken поддерживает только CKM_PBE_SHA1_RC4_128 и CKM_PKCS5_PBKD2. Поэтому провайдер SunPKCS11 в рамки этого JEP не входит.

PKCS#5 v2.0 Amendment 1: XML Schema for Password-Based Cryptography определяет XML-идентификаторы для алгоритмов PBE, заданных в PKCS#5 v2.0, но этим следует заниматься отдельно, в коде для XML, а не в провайдере SunJCE.

Мотивация

Алгоритмы PBE, которые сейчас поддерживает провайдер SunJCE, охватывают только DESede и RC2 (40-bit) с SHA1. Чтобы оставаться конкурентоспособными, мы должны поддерживать и реализации алгоритмов PBE с более стойкими алгоритмами шифрования и дайджеста сообщений, такими как шифр AES и дайджесты семейства SHA-2, а также алгоритмы, заданные в PKCS#12.

Описание

PKCS#12 задаёт для своего режима защиты конфиденциальности паролем (password-privacy mode) следующие алгоритмы PBE:

  1. PBEwithSHA1AndRC4_128
  2. PBEwithSHA1AndRC4_40
  3. PBEwithSHA1AndDESede (3-key)
  4. PBEwithSHA1AndDESede (2-key)
  5. PBEwithSHA1AndRC2_128
  6. PBEwthSHA1AndRC2_40

Сейчас мы поддерживаем только 3 и 6. Чтобы полностью поддерживать хранилища ключей PKCS12, нужно добавить поддержку всех остальных.

Поступали также запросы на алгоритмы криптографии на основе пароля с более стойкими схемами шифрования и дайджеста, такими как AES и дайджесты семейства SHA-2. Поэтому нам следует добавить поддержку PBES2 и PBMAC1 (как они определены в PKCS#5 v2.1), которые PKCS#5 рекомендует для новых приложений.

Провайдер SunJCE будет доработан, чтобы поддерживать следующие алгоритмы:

  • шифр PBEwithSHA1AndRC4_128
  • шифр PBEwithSHA1AndRC4_40
  • шифр PBEwithSHA1AndDESede (2-key)
  • шифр PBEwithSHA1AndRC2_128

и, возможно, комбинации алгоритмов шифрования PBES2, зарегистрированные под именами вида PBEWith<prf>And<encryption>, где

  • <prf> — один из HmacSHA1, HmacSHA224, HmacSHA256, HmacSHA384 или HmacSHA512, а

  • <encryption> — AES (то есть AES-CBC-PAD в черновике PKCS#5 v2.1: AES в режиме CBC с PKCS5Padding).

и наконец, если позволит время, добавить поддержку одного или нескольких из следующих алгоритмов MAC PBMAC1:

  • MAC PBEWithHmacSHA1
  • MAC PBEWithHmacSHA224
  • MAC PBEWithHmacSHA256
  • MAC PBEWithHmacSHA384
  • MAC PBEWithHmacSHA512

Тестирование

В спецификации стандарта PKCS#5 нет тестовых векторов, поэтому для проверки нашей реализации придётся изучить сторонние провайдеры и тестировать на соответствие им.

Влияние

  • JCP: мы должны суметь поддержать новые алгоритмы PBE без изменений API, но если для PBMAC1 понадобятся изменения API, они будут предложены для Umbrella JSR.

  • Документация: нужно добавить новые поддерживаемые алгоритмы PBE во все соответствующие технические описания (whitepapers) по безопасности, в документацию провайдера SunJCE и в справочные руководства.