代码之家  ›  专栏  ›  技术社区  ›  Andrea Zilio

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

  •  0
  • Andrea Zilio  · 技术社区  · 15 年前

    在m2crypto python包(用于python的openssl包装器)的pkey类文档中,据说pkey是对公钥的引用。

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

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

    有人能帮我找出真相吗?

    2 回复  |  直到 13 年前
        1
  •  1
  •   caf    15 年前

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

    (例如两者 EVP_SealInit() EVP_OpenInit 执行副总裁 参数)。

        2
  •  2
  •   Carlos D. Garza    13 年前

    evp-pkey-new的文档直接说明它用于存储私钥。因为原来的海报是从x509foo.get_pubkey()返回一个evp.pkey实例,然后将实例存储为pem显示private key,所以我迷路了。我不能假装知道M2Crypto团队的意图,因为许多使用pkey的函数没有文档记录。例如,一个X509请求对象有一个验证(self,pkey),但它没有告诉我pkey是什么类型的对象。同样地,还有任何文件。我和最初的作者一样困惑,因为我认为RSA至少是 (e,n)公钥 (D,N)私钥

    充其量我想到的是私人钥匙 (d,n,p,q,dp,dq,qinv,t),其中 p和q是大素数,dp和dq和qinv是额外的系数。 解密速度快,T为totelent函数。

    在文档中应该更清楚地区分的原因是有时您希望使用私钥加密(在签名的情况下),以便其他每个人都可以通过使用公钥终止验证。 H=散列(m) sig=h^d(n型) 只有知道d(私钥)的人才能创建签名。 验证由

    h=sig^e(n型)

    如果这两个哈希匹配,您就知道消息是真实的。

    我遇到的问题是evp.pkey要求表示一个公钥 它的assign_rsa()方法声明它接受一个rsa密钥对(“我假设这意味着此时的私钥”)。到目前为止,我发现的任何示例都只是用于创建自关联证书(包括M2Crypto自己的单元测试)。我没有看到任何测试接受第三方X509请求并用自己的CA证书和密钥签名,就像我们在现实中通常看到的那样。由于X509请求不包含私钥,因此单元测试无法帮助我了解如何签署常规CSR。然而,单元测试示例工作良好,因为它的自签名和签名者已经可以访问私钥。事实上,测试mkcert测试的目的正是获取由mkreq方法返回的私钥。 生成X509请求。

    M2Crypto文档由于使用术语而混淆了 pk、pkey甚至pubkey可以互换。

    推荐文章