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:
- PBEwithSHA1AndRC4_128
- PBEwithSHA1AndRC4_40
- PBEwithSHA1AndDESede (3-key)
- PBEwithSHA1AndDESede (2-key)
- PBEwithSHA1AndRC2_128
- 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 и в справочные руководства.