Перейти к содержимому
ecdsa.com

PKCS #8

Независимый от алгоритма контейнер закрытого ключа (PrivateKeyInfo, RFC 5208; OneAsymmetricKey, RFC 5958), который хранится в PEM как -----BEGIN PRIVATE KEY----- или, если он защищён паролем, как -----BEGIN ENCRYPTED PRIVATE KEY-----.
Другие написанияPKCS#8PrivateKeyInfoBEGIN PRIVATE KEYOneAsymmetricKey

PrivateKeyInfo — это SEQUENCE из версии, privateKeyAlgorithm (AlgorithmIdentifier), privateKey типа OCTET STRING и необязательных атрибутов; строка октетов содержит ключ в формате конкретного алгоритма (RSAPrivateKey из PKCS #1, ECPrivateKey из SEC 1, 32-байтный seed Ed25519 в обёртке по RFC 8410, seed или развёрнутый ключ ML-DSA). Версия 2 по RFC 5958 добавляет необязательный открытый ключ.

EncryptedPrivateKeyInfo защищает эту структуру шифрованием на основе пароля, сегодня это PBES2 (RFC 8018). Когда OpenSSL 3.6 просят зашифровать ключ, он использует PBES2 с PBKDF2-HMAC-SHA256 и AES-256-CBC; в старых ключах может встречаться PBES1 с DES или RC2, и современные библиотеки их не принимают.

Поскольку PKCS #8 указывает алгоритм, большинство библиотек ожидает именно этот формат: OpenSSL 3 записывает его по умолчанию, а PKCS8EncodedKeySpec в Java, x509.ParsePKCS8PrivateKey в Go, createPrivateKey в Node и импорт pkcs8 в WebCrypto работают с ним. Другие форматы преобразуйте командой openssl pkcs8 -topk8 -nocrypt или openssl pkey.

Стандарты и ссылки

Все термины