2010-05-01 1 views
0

В документации класса PKey пакета python M2Crypto (оболочка OpenSSL для Python) сказано, что PKey является ссылкой на открытый ключ.M2Crypto: Является ли PKey ссылкой на открытый или закрытый ключ?

Мое мнение заключается в том, что это ссылка на закрытый ключ, потому что метод init класса PKey вызывает функцию evp_pkey_new openssl, которая по этой ссылке: http://linux.die.net/man/3/evp_pkey_new должна выделять новую ссылку на структуру закрытого ключа!

Существует два возможных объяснения: документация M2Crypto неверна или ссылка, о которой я сообщал, имеет неверную информацию.

Может ли кто-нибудь помочь мне найти правду?

ответ

1

документация OpenSSL является неполным - EVP_PKEY структуры выделенной EVP_PKEY_new() используется для хранения либо частных или открытых ключей. Тип ключа определяется тем, что вы позже загрузите в структуру.

(например, оба EVP_SealInit() и EVP_OpenInit принимают EVP_PKEY параметров).

2

В документации для EVP_PKEY_new указано, что используется для хранения секретных ключей. И я потерялся, поскольку исходный плакат с тех пор, как x509foo.get_pubkey() просто возвращает экземпляр EVP.PKey, и он хранит экземпляр, поскольку pem показывает PRIVATE KEY. Я не могу притворяться, что знаю команду M2Crypto, поскольку многие функции, которые используют PKey, не документируются. Например, объект запроса x509 имеет проверку (self, pkey), но ничего не сообщает мне о том, какой тип объекта pkey. Также там или в любой документации. Я так же, как запутался, как оригинал, так как я Автор развивает думать RSA по крайней мере пп- условий (е, п) #Public ключ (d, п) #Private ключевых

и в лучшем случае я думаю, что из Частные ключи (d, n, p, q, dp, dq, qinv, t), где p и q - большие простые числа dp, а dq и qinv - дополнительные коэффициенты, чтобы сделать дешифрование быстрее, а t - функцией тотализатора.

Причина, по которой различие должно было быть более ясным в документации, иногда вы хотите зашифровать с помощью закрытых ключей (в случае с сигнатурой), чтобы каждый другой мог проверить, прекратив использование открытого ключа. h = hash (m) sig = h^d (mod n) только тот, кто знает d (закрытый ключ), может создать подпись. Проверка осуществляется

ч = сиг^е (по модулю п)

, если два хэши совпадают вы знаете, что сообщение является подлинным.

Проблема, с которой я столкнулся, - это EVP.Pkey claimes для представления открытого ключа его метод assign_rsa() объявляет, что он принимает пару ключей RSA («Я предполагаю, что это означает закрытый ключ на этом этапе», Любые примеры, которые я нашел до сих пор, предназначены только для создания собственного сертификата (включая собственные модульные тесты M2Crypto. Я не вижу никаких тестов, которые принимают сторонний запрос x509 и подписывают его со своим собственным сертификатом и ключом, как мы как правило, видят на самом деле. Модульные тесты не помогают мне понять, как подписать общие CSR, так как X509 Requests не будет содержать закрытый ключ. Тем не менее, примеры тестов модулей отлично работают, поскольку он сам подписывается, а подписавший уже имел доступ к закрытым ключам. Infact test_mkcert test делает именно то, что он берет закрытый ключ, переданный методом mkreq , который генерирует x50 9.

Документы M2Crypto путаются, поскольку они используют взаимозаменяемые термины pk, pkey и даже pubkey.