我有一个RSA公钥,一些数据和该数据的签名。我需要验证签名。但是,签名不是数据的摘要,而是整个数据的摘要。 (数据本身只有16字节,所以,签名人不打扰签名之前散列的数据。),我可以通过初始化上下文时指定NULL发动机验证在C签名:使用Ruby OpenSSL验证非哈希数据的签名
EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(verify_key, NULL);
然而,我一直无法在Ruby的OpenSSL :: PKey :: PKey验证方法中找到等价物。该方法需要一个Digest对象,并且没有Digest我可以发现它实际上并不散列,但只是按原样返回数据。我试图创建自己的摘要子类,但我不相信这可以工作,因为底层OpenSSL库不会知道自定义摘要类型的存在。
我卡住了,还是有办法解决这个问题,因为我不能修改签名者运行的代码?
这是否使用PKCS#1v1.5填充而不散列(丑陋但合理安全),还是根本不使用填充(可能完全破碎)? – CodesInChaos 2013-02-11 20:36:19
它使用PKCS#1v1.5填充而不散列。 – Wammer 2013-02-11 20:45:10
您是否试图找到像'public_decrypt'这样的函数?它可能正常工作,因为通常情况下,您不应使用私钥进行加密并使用公钥进行解密。有一点运气,它会接受PKCS#1填充的签名版本(请注意PKCS#1中用于加密和签名的填充不同)。 – 2013-02-11 20:46:48