В документации для EVP_PKEY_new прямо указывается, что она использовалась для хранения закрытых ключей. И я заблудился, так как оригинальный плакат таков, поскольку x509foo.get_pubkey () просто возвращает экземпляр EVP.PKey, а сохранение этого экземпляра в виде pem показывает PRIVATE KEY. Я не могу притворяться, что знаю намерение команды M2Crypto, поскольку многие функции, использующие PKey, не документированы. Например, объект запроса x509 имеет команду verify (self, pkey), но ничего не говорит мне о том, что это за объект pkey. Точно так же есть или любая документация. Я так же запутался, как и оригинальный автор, так как я думаю о RSA, по крайней мере, с точки зрения
(e, n) # Открытый ключ
(d, n) #Частный ключ
и в лучшем случае я думаю о Privatekeys
(d, n, p, q, dp, dq, qinv, t) где
p и q - большие простые числа dp, а dq и qinv - дополнительные коэффициенты, чтобы сделать
расшифровываем быстрее и используем как функцию.
Причина, по которой различие должно быть более четко указано в документации, заключается в том, что иногда вы хотите зашифровать с помощью закрытых ключей (в случае подписи), чтобы все остальные могли проверить их путем расшифровки с использованием открытого ключа.
h = хэш (м)
sig = h ^ d (мод n)
только тот, кто знает d (закрытый ключ), может создать подпись.
Проверка сделана
h = sig ^ e (mod n)
если два хэша совпадают, вы знаете, что сообщение является подлинным.
Проблема, с которой я столкнулся, заключается в том, что EVP.Pkey заявляет, что еще не представляет открытый ключ.
его метод assign_rsa () объявляет, что он принимает пару ключей RSA («Я предполагаю, что на данный момент это означает закрытый ключ». Любые примеры, которые я обнаружил, пока только для создания самоподписанного сертификата (включая собственные модульные тесты M2Crypto Я не вижу никаких тестов, которые бы принимали сторонний запрос x509 и подписывали его собственным сертификатом и ключом, как мы обычно видим в реальности. Модульные тесты не помогают мне понять, как подписывать общие CSR, начиная с запросов X509, не будут содержать закрытый ключ. Тем не менее примеры модульных тестов работают нормально, так как самоподписанный подписчик уже имел доступ к закрытым ключам. Infact тест test_mkcert делает именно то, что он принимает закрытый ключ, возвращенный обратно метод mkreq
который генерирует запрос x509.
Документы M2Crypto сбивают с толку, так как они используют термины
pk, pkey и даже pubkey взаимозаменяемо.