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.