Кратко

  • RFC 9879 разрешает PBMAC1 в PKCS #12, требует общий профиль PBKDF2/HMAC-SHA-256 и исправляет кодирование пароля из RFC 9579.
  • Старое приложение может добраться до зашифрованного ключевого материала, не поняв новую проверку, а слабые пароли и параметры KDF остаются отдельными угрозами.
  • Проверяемая миграция раздельно фиксирует реальные параметры, результат MAC, поведение при ошибке и дальнейшее хранение ключа.

PKCS #12 переносит сертификаты, закрытые ключи и другие секреты между платформами. У такого переноса несколько результатов: структура распознана, шифротекст открыт, MAC подтверждён, параметры соответствуют местной политике, ключ помещён в нужное хранилище. Фраза «импорт успешен» скрывает, какие именно результаты получены.

RFC 9879 опубликован в сентябре 2025 года как информационный документ IETF. Он отменяет RFC 9579 и обновляет RFC 7292 и RFC 8018. id-PBMAC1 становится допустимым типом в DigestAlgorithmIdentifier. При его выборе обязательны согласованные PBMAC1-params, а значение целостности вычисляется над authSafe по этим параметрам.

Главное изменение — расширяемость. Старый механизм PKCS #12 жёстко связывал вывод ключа MAC со специальной функцией контейнера. PBMAC1 явно называет KDF и функцию аутентификации. Все реализации обязаны поддерживать PBKDF2 вместе с HMAC-SHA-256 для проверки и для PRF PBKDF2. Другие HMAC семейства SHA-2 рекомендуются, а scrypt и иные KDF допускаются.

Поэтому решают параметры, а не имя. Длина производного ключа должна быть записана явно. PBKDF2 без keyLength принимать нельзя; для HMAC-SHA-256 ожидается 32 октета. PBKDF2 с HMAC-SHA-1 не рекомендуется, а другие дайджесты с выходом 160 бит и меньше запрещены.

Внешние поля способны дать ложный сигнал. При PBMAC1 значения macSalt и iterations верхнего уровня нужно игнорировать, хотя ради старых программ их советуют оставлять непустыми и ненулевыми. Сканер, который показывает только внешнее число итераций, может подтвердить величину, не участвовавшую в реальном вычислении.

Совместимость проведена отдельной линией. Новый синтаксис задуман так, чтобы старое приложение могло расшифровать ключевой материал, даже если оно не понимает новую защиту целостности, при условии что оно способно проигнорировать ошибку проверки MAC. Это смягчает переход, но доказывает: открыть ключ и подтвердить целостность — разные события. RFC не утверждает, что так действует конкретный продукт.

История кодирования показывает ценность точных байтов. RFC 9579 требовал BMPString с завершающим NULL. Проверенная опечатка 7974 объяснила, что программа для тестовых векторов фактически оставляла пароль в UTF-8. RFC 9879 закрепил UTF-8 без NULL и BOM. Одинаковая строка на экране не гарантирует одинаковый ввод KDF.

Приложение содержит корректные примеры с SHA-256 и SHA-512 и некорректные случаи с изменённой итерацией, солью и отсутствующей длиной. Их прохождение подтверждает конкретную арифметику. Оно не подтверждает качество рабочего пароля, закрытие при неизвестной схеме, охват всех считывателей или место хранения ключа.

RFC 9879 предупреждает, что KDF может допускать выход длиной один октет, а параметры KDF сами не защищены криптографически. Короткий ключ упрощает полный перебор HMAC. Документ рекомендует отклонять длину менее 20 октетов и разрешает отказывать при слабых параметрах. Такое право должно стать локальным правилом, иначе оно останется текстом.

RFC 8018 задаёт общий предел: парольная криптография допускает автономный перебор. Соль и число итераций повышают цену попытки, но не добавляют случайность предсказуемому паролю. Scrypt стремится сделать параллельную атаку дороже за счёт памяти; RFC 9879 разрешает его, но не требует. Два контейнера PBMAC1 могут иметь разную фактическую стойкость.

Полная запись импорта должна идти по шагам: контейнер получен; версии производителя и считывателя известны; OID и рабочие параметры извлечены; политика их приняла; байты пароля определены; MAC проверен; расшифрование оценено отдельно; использование разрешено; хранилище названо; повторный экспорт проверен. Неизвестное состояние нельзя дорисовывать успехом следующего шага.

Источники