當你說你「用RSA私鑰加密」時,你實際上並沒有加密東西。這是一個混亂的歷史位。你正在做的是一個數字簽名,插件使用相應的公鑰驗證。混淆來自於這樣一個事實:在適當的情況下,RSA簽名可以被看作是一種首先採用私鑰的「反向加密」。然而,它在一些細節上有所不同(例如填充和散列函數的參與),這使得它在實現時有很大不同。
如果您使用適當 RSA數字簽名方案(如那些在PKCS#1所描述的,節8「簽名方案附錄」中的一個)產生的,具有足夠大的RSA密鑰(1024位或更多)通過一個正確實施的密鑰生成算法,然後沒有已知的,計算上可行的方法讓攻擊者利用您生成的簽名來僞造新的簽名(並且更有利於破解RSA私鑰)。這絕不是證明你的簽名不能幫助攻擊者,但30年的公共研究在這個問題上還沒有出現這樣的違規行爲。
但是請注意,使用細節,特別是填充(初始部分,將待簽名數據轉換爲RSA數學核心可處理的大數字)已被證明是微妙的;許多提出的填充方法已被成功攻擊。 PKCS#1填充已經進行了相當長時間的審查(對於「v1.5」填充已經有二十年了),並且抵制了迄今爲止所有這些嘗試。 「ISO 9796」填料系列的表現並不好,很多變種已被打破。
如果您是而不是根據一個完善的標準(即PKCS#1)計算您的簽名,那麼您正在尋找麻煩。不要那樣做。幸運的是,大多數RSA實現(在加密庫和編程語言/環境中)遵循PKCS#1。
Thaks爲一個真棒的答案 – Riz 2010-04-19 18:38:15