在 M2Crypto python 包(Python 的 OpenSSL 包装器)的 PKey 类文档中,据说 PKey 是对公钥的引用。
我的观点是它是对私钥的引用,因为 PKey 类的 init 方法调用 evp_pkey_new openssl 函数,从这个链接:http ://linux.die.net/man/3/evp_pkey_new应该分配一个对私钥结构的新参考!
只有两种可能的解释:M2Crypto 文档错误或我报告的链接信息错误。
有人可以帮我找出真相吗?
EVP_PKEY_new 的文档直接说明了它用于存储私钥。我迷失了,因为原始海报是因为 x509foo.get_pubkey() 只返回一个 EVP.PKey 实例,并且将实例存储为 pem 显示 PRIVATE KEY。我不能假装知道 M2Crypto 团队的意图,因为许多使用 PKey 的功能都没有记录。例如,一个 x509 请求对象有一个 verify(self,pkey) 但没有告诉我 pkey 是什么类型的对象。同样在那里或任何文件。我和原作者一样困惑,因为我认为 RSA 至少有 nn 个 (e,n)#Public key (d,n)#Private key
充其量我认为 Privatekeys (d,n,p,q,dp,dq,qinv,t) 其中 p 和 q 是大素数 dp 和 dq 和 qinv 是使解密更快的额外系数,而 t 作为总函数.
在文档中应该更清楚地区分的原因是有时您想用私钥加密(在签名的情况下),以便其他人都可以通过使用公钥解密来进行验证。h = hash(m) sig = h^d (mod n) 只有知道 d(私钥)的人才能创建签名。验证由
h = sig^e (mod n)
如果两个哈希值匹配,您就知道该消息是真实的。
我遇到的问题是 EVP.Pkey 声称代表一个公钥,但它的 assign_rsa() 方法声明它接受一个 RSA 密钥对(“我假设这意味着此时的私钥”。任何例子我到目前为止,我发现仅用于创建自签名证书(包括 M2Crypto 自己的单元测试。我没有看到任何测试接受第三方 x509 请求并使用自己的 ca 证书和密钥对其进行签名,就像我们通常在现实中看到的那样.单元测试在弄清楚如何签署一般CSR方面没有帮助我,因为X509请求不包含私钥.但是单元测试示例工作正常,因为它是自签名的并且签名者已经可以访问私有密钥键。事实上,test_mkcert 测试的作用就是获取由生成 x509 请求的 mkreq 方法返回的私钥。
M2Crypto 文档令人困惑,因为它们可以互换使用术语 pk、pkey 甚至 pubkey。
OpenSSL 文档不完整 -EVP_PKEY
分配的结构EVP_PKEY_new()
用于存储私钥或公钥。键的类型取决于您稍后加载到结构中的内容。
(例如,两者都EVP_SealInit()
取EVP_OpenInit
参数EVP_PKEY
)。