2013-02-11 99 views
3

我有一个RSA公钥,一些数据和该数据的签名。我需要验证签名。但是,签名不是数据的摘要,而是整个数据的摘要。 (数据本身只有16字节,所以,签名人不打扰签名之前散列的数据。),我可以通过初始化上下文时指定NULL发动机验证在C签名:使用Ruby OpenSSL验证非哈希数据的签名

EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(verify_key, NULL); 

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

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

+2

这是否使用PKCS#1v1.5填充而不散列(丑陋但合理安全),还是根本不使用填充(可能完全破碎)? – CodesInChaos 2013-02-11 20:36:19

+0

它使用PKCS#1v1.5填充而不散列。 – Wammer 2013-02-11 20:45:10

+2

您是否试图找到像'public_decrypt'这样的函数?它可能正常工作,因为通常情况下,您不应使用私钥进行加密并使用公钥进行解密。有一点运气,它会接受PKCS#1填充的签名版本(请注意PKCS#1中用于加密和签名的填充不同)。 – 2013-02-11 20:46:48

回答

0

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

owlstead

你有没有试图找到像public_decrypt的功能?它可能正常工作,因为通常情况下,您不应使用私钥进行加密并使用公钥进行解密。有一点运气,它会接受PKCS#1填充的签名版本(请注意PKCS#1中用于加密和签名的填充不同)。

Wammer

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

owlstead

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