M2Crypto:PKey是对公钥还是私钥的引用?

时间:2010-05-01 13:00:58

标签: python openssl m2crypto

在M2Crypto python包(一个Python的OpenSSL包装器)的PKey类文档中,据说PKey是对公钥的引用。

我认为它是对私钥的引用,因为PKey类的init方法调用evp_pkey_new openssl函数,该函数从此链接:http://linux.die.net/man/3/evp_pkey_new应该分配对私钥结构的新引用!

有两种可能的解释:M2Crypto文档错误或我报告的链接信息错误。

有人可以帮我找到真相吗?

2 个答案:

答案 0 :(得分:2)

EVP_PKEY_new的文档直接指出它用于存储私钥。我丢失了原始海报,因为x509foo.get_pubkey()只返回一个EVP.PKey实例,并将实例存储为pem显示私钥。我不能假装知道M2Crypto团队的意图,因为许多使用PKey的函数都没有记录。例如,x509请求对象有一个验证(self,pkey)但却没有告诉我什么类型的对象pkey。同样有那里或任何文件。我和最初的作者一样困惑,因为我至少在nn条件下想到了RSA (e,n)#Public key (d,n)#Private key

充其量我想到了私人钥匙 (d,n,p,q,dp,dq,qinv,t)其中     p和q是大素数dp,dq和qinv是额外的系数 解密得更快,t作为整个函数。

在文档中应该更清楚地区分的原因有时候您希望使用私钥进行加密(在签名的情况下),以便其他每个人都可以通过使用公钥进行破解来进行验证。 h =哈希(m) sig = h ^ d(mod n) 只有一个知道d(私钥)的人可以创建签名。 验证由

完成

h = sig ^ e(mod n)

如果两个哈希匹配,则表示该消息是真实的。

我遇到的问题是EVP.Pkey还要代表一个公钥 它的assign_rsa()方法声明它接受一个RSA密钥对(“我假设这意味着此时私钥”。到目前为止我发现的任何例子都只是用于创建一个自签名证书(包括M2Crypto自己的单元测试)我没有看到任何接受第三方x509请求的测试,并使用它们自己的ca证书和密钥签名,就像我们通常在现实中看到的那样。单元测试在确定如何签署一般方面对我没有帮助。自X509请求以来的CSR不会包含私钥。但单元测试示例工作正常,因为它自签名且签名者已经可以访问私钥。事实上,test_mkcert测试确实完成了它需要私钥返回的私钥。 mkreq方法 生成x509请求。

M2Crypto文档因使用条款而引起混淆 pk,pkey甚至是pubkey可互换。

答案 1 :(得分:1)

OpenSSL文档不完整 - EVP_PKEY分配的EVP_PKEY_new()结构用于存储私有公钥。密钥的类型取决于您以后加载到结构中的内容。

(例如,EVP_SealInit()EVP_OpenInit都需要EVP_PKEY个参数。