我有一個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