2010-04-17 23 views
5

我正在研究允許插件訪問不同功能集的apllication,每個插件都提供了「初始化字符串」,用於設置不同功能的訪問級別。開發人員給我發送這些字符串,然後使用我的1024位RSA私鑰對它們進行加密,並將編碼數據發送回去。啓動時,我的應用程序使用內置公鑰解碼編碼數據(編碼初始化字符串),如果「解碼數據!=初始化字符串」無法啓動。是否有可能獲得RSA私鑰知道公鑰和「原始數據=>加密數據」條目集?

那麼,是否有可能使用「初始化字符串」=>「編碼初始化字符串」(從其他插件中提取)的數據庫來破解我的私鑰,或者使其能夠在合理的時間內對其進行破解?

回答

5

當你說你「用RSA私鑰加密」時,你實際上並沒有加密東西。這是一個混亂的歷史位。你正在做的是一個數字簽名,插件使用相應的公鑰驗證。混淆來自於這樣一個事實:在適當的情況下,RSA簽名可以被看作是一種首先採用私鑰的「反向加密」。然而,它在一些細節上有所不同(例如填充和散列函數的參與),這使得它在實現時有很大不同。

如果您使用適當 RSA數字簽名方案(如那些在PKCS#1所描述的,節8「簽名方案附錄」中的一個)產生的,具有足夠大的RSA密鑰(1024位或更多)通過一個正確實施的密鑰生成算法,然後沒有已知的,計算上可行的方法讓攻擊者利用您生成的簽名來僞造新的簽名(並且更有利於破解RSA私鑰)。這絕不是證明你的簽名不能幫助攻擊者,但30年的公共研究在這個問題上還沒有出現這樣的違規行爲。

但是請注意,使用細節,特別是填充(初始部分,將待簽名數據轉換爲RSA數學核心可處理的大數字)已被證明是微妙的;許多提出的填充方法已被成功攻擊。 PKCS#1填充已經進行了相當長時間的審查(對於「v1.5」填充已經有二十年了),並且抵制了迄今爲止所有這些嘗試。 「ISO 9796」填料系列的表現並不好,很多變種已被打破。

如果您是而不是根據一個完善的標準(即PKCS#1)計算您的簽名,那麼您正在尋找麻煩。不要那樣做。幸運的是,大多數RSA實現(在加密庫和編程語言/環境中)遵循PKCS#1。

+0

Thaks爲一個真棒的答案 – Riz 2010-04-19 18:38:15

2

來自RSA的公鑰/私鑰技術的整點是很難難以扭轉。

有一些已知的裂縫利用了一些特定的實現缺陷,但基本算法被認爲需要數十年才能產生強力攻擊。請參閱this

+0

爲什麼這會降低投票率? Sheesh,強硬的人羣。 – egrunin 2010-04-17 18:34:48

+0

是啊!爲什麼它低調? – wallyk 2010-04-18 21:03:33

5

這種密碼分析攻擊被稱爲known plaintext attack,應用在RSA1024上真的很難。或者至少,試圖用已知的明文來破解RSA密鑰將會像在沒有它們的情況下那樣努力去做,與您的問題相關的唯一已知類型的攻擊是定時攻擊,但它需要很好地瞭解您的RSA的具體實現,因爲它通過測量解密所需的時間來工作。

事實上,RSA的安全性是由兩個複雜的數學問題給出的,並且知道純文本和相關的密文並不能給你提供太多幫助。

在任何情況下已知明文攻擊通常需要很多進行樣品(如百萬或數十億的DES),所以它不是那麼容易還較弱的算法。