2013-02-11 98 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

填充的解密和驗證後,所有剩下的是(如果可能的話,安全)進行比較。所以這將取代驗證功能相當好。大部分安全性都在模塊化算術和填充中。