"традиционный формат закрытого ключа" против PKCS8 - PullRequest
0 голосов
/ 03 декабря 2018

Страница man для PEM_write_PrivateKey утверждает, что она записывает закрытый ключ, используя традиционный формат закрытого ключа .

Как это связано с PKCS8 и PKCS1?

1 Ответ

0 голосов
/ 04 декабря 2018

Документация, на которую вы ссылаетесь, не является точной (больше).В настоящее время PEM_write_PrivateKey() делает то же самое, что и PEM_write_PKCS8PrivateKey() для реализаций OpenSSL ключей RSA, DSA и EC.

Как и в случае с OpenSSL, исходный код является более надежным способом получения вашей информации.,Глядя на PEM_write_bio_PrivateKey(), который должен дать «традиционный» формат в соответствии с этой документацией, мы видим:

int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
                             unsigned char *kstr, int klen,
                             pem_password_cb *cb, void *u)
{
    if (x->ameth == NULL || x->ameth->priv_encode != NULL)
        return PEM_write_bio_PKCS8PrivateKey(bp, x, enc,
                                             (char *)kstr, klen, cb, u);
    return PEM_write_bio_PrivateKey_traditional(bp, x, enc, kstr, klen, cb, u);
}

Действительно, есть упоминание о традиционной функции записи закрытого ключа, но только если метод priv_encode не реализован для этого конкретного типа ключа.Но на самом деле это реализовано для стандартных типов ключей.Для 1.0.2g, версии, которую вы используете в соответствии с вашим комментарием ниже, вы можете увидеть соответствующие функции здесь: rsa_priv_encode(), dsa_priv_encode() и eckey_priv_encode().PKCS # 8 является стандартным форматом при записи закрытых ключей.

PKCS # 8 способен захватывать ключи нескольких типов.Его формат включает в себя возможность хранить закрытые ключи в зашифрованном виде.Это отличается от старых форматов, где шифрование ключа происходило на уровне PEM с использованием более слабой схемы шифрования.Посмотрите этот ответ на вопрос SO Обратный вызов пароля для чтения открытого ключа с помощью OpenSSL API , чтобы получить более подробное объяснение этого в случае RSA, сравнивая его с PKCS # 1.

"Традиционный «формат ключа в вашем вопросе относится к форматам ключей не-PKCS # 8, которые являются стандартными в случае ключей RSA и EC и специфичными для OpenSSL для DSA, но не являются единообразными.Для ключей RSA этот формат часто называют форматом PKCS # 1.См. Также этот ответ на вопрос SO PKCS # 1 и формат PKCS # 8 для закрытого ключа RSA для получения дополнительной информации.

Если вы хотите писать в «традиционных» форматах, вы будетедолжны явно вызывать связанные функции, как, например, PEM_write_RSAPrivateKey () .В этом случае документация действительно представляется точной (за исключением грамматической ошибки :-)):

Функции RSAPrivateKey обрабатывают закрытый ключ RSA с использованием структуры RSA.Процедуры записи используют традиционный формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...