3

我有一个 RSA 公钥、一些数据和该数据的签名。我需要验证签名。但是,签名不是数据的摘要,而是整个数据的签名。(数据本身只有 16 个字节,因此签名者在签名之前不会费心对数据进行哈希处理。)我可以通过在初始化上下文时指定 NULL 引擎来验证 C 中的签名:

EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(verify_key, NULL);

但是,我一直无法在 Ruby 的 OpenSSL::PKey::PKey 验证方法中找到等效项。该方法需要一个 Digest 对象,并且我找不到实际上不会散列但只是按原样返回数据的 Digest。我尝试创建自己的 Digest 子类,但我不相信它可以工作,因为底层 OpenSSL 库不知道自定义摘要类型的存在。

我被卡住了,还是有办法解决这个问题,因为我无法修改签名者运行的代码?

4

1 回答 1

0

总结评论中的答案,以便从“未回答”过滤器中删除此问题...

猫头鹰

您是否尝试过找到类似的功能public_decrypt?它可能会起作用,因为通常您不应该使用私钥加密并使用公钥解密。运气好的话,它将接受 PKCS#1 填充的签名版本(请注意,用于加密和签名的填充在 PKCS#1 中是不同的)。

温默

当然 - 使用公钥解密签名并验证它是否与数据匹配工作正常。到目前为止,这与标准 PKCS#1 填充一起工作得很好,但我会做更多的研究,看看不同的加密和签名填充是否在实践中是一个问题。谢谢。

猫头鹰

在对填充进行解密和验证之后,剩下的就是(如果可能的话,安全的)比较。所以这将很好地取代验证功能。大多数安全性在于模算术和填充。

于 2013-10-10T06:29:47.187 回答