Encryption

可以在 RSA 加密/解密之上實現 RSA 簽名嗎?

  • November 11, 2014

我需要使用 RSA-SHA256 簽名。不幸的是,並非所有 Microsoft CryptoAPI 提供商都支持這一點。我可能會得到一個 CryptoAPI 提供程序的句柄,該提供程序只能使用 RSA 加密/解密,並且可能使用 SHA1 簽名,但不能使用 SHA256 簽名。此外,私鑰可能不可用(例如,它可能在智能卡或某些此類設備中)。

那麼我有可能自己“填補空白”嗎?畢竟,我可以自己計算數據的 SHA256 雜湊值。然後我可以用提供者以某種方式對其進行加密並獲得有效的簽名嗎?簡單地加密雜湊似乎不起作用(它會產生錯誤的結果)。

或者簽名算法是加密算法的修改,如果提供者不支持它,那麼我在物理上無能為力?

如果您可以適當地影響填充方案,那麼您可以這樣做的唯一方法。在數學上,使用私鑰的教科書 RSA 加密與教科書的 RSA 簽名生成相同。

然而,沒有人應該使用教科書 RSA。在實踐中,使用了填充方案,並且它們在兩種操作之間有所不同。因此,除非您可以關閉填充(和填充檢查)並自己實現簽名填充,否則答案是否定的。

我提到填充檢查的原因是理論上,RSA 解密(與 RSA 加密操作相同,但使用私鑰)不會添加填充。RSA 解密操作可能會檢查填充並在不正確時拋出錯誤,或者它會剝離填充,這是您不想要的。

引用自:https://crypto.stackexchange.com/questions/20172