使用Ruby OpenSSL验证非散列数据的签名

时间:2013-02-11 19:21:20

标签: ruby encryption openssl rsa digital-signature

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

EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(verify_key, NULL);

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

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

1 个答案:

答案 0 :(得分:0)

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

owlstead

  

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

Wammer

  

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

owlstead

  

在对填充进行解密和验证之后,剩下的就是(如果可能的话,安全)比较。这样就可以很好地取代验证功能。大部分安全性都在模块化算术和填充中。