2010-02-02 82 views
1

我一直在研究在大量文件中使用非對稱加密的系統。我目前正在使用帶有4096位密鑰的RSA爲每個文件加密256位隨機生成的AES密鑰,但性能有點欠缺,因爲一個必需的操作是掃描所有文件(系統處於使用量約爲10,000),並確定哪些可以使用特定的私鑰解密。雖然我不希望這個操作是瞬間的,但它現在需要很長時間(每秒處理大約2個文件)。我曾考慮過縮短密鑰長度,但即使降低到2048位也不能提供所需的性能水平。 512位只會削減它,但是現在這樣的密鑰現在可以被輕易破解,這是不可能的。比RSA更快的非對稱密碼

任何人都可以指向一個速度更快但密碼強度相似的系統嗎?它需要通過Java JCA提供者(例如像bouncycastle之類的東西)來實現,以便整齊地插入到我現有的應用程序中。我知道有彈性的城堡支持El Gamal,但我無法找到有關這種算法有多強大的細節,或者它甚至可能比RSA更快。我也聽說過橢圓曲線系統只需要相對較短的鍵(384位等),但不知道在哪裏找到其中一個實現。

回答

2

對於您提出的問題,請嘗試橢圓曲線上的Diffie-Hellman,也稱爲「ECDH」。一旦我們處理不能用當前技術破解的尺寸,估算安全性有點困難,因爲這取決於我們如何打賭未來的技術發展。然而,人們可以說ECDH在P-256曲線上提供了「128位」的安全性,這個水平與2048位RSA相似。如果P-256對你來說不夠用,那麼你的問題有非常特殊的需求,並且密碼強度可能是你最擔心的問題,這個水平對於所有現在的用法來說已經足夠了。在我的PC上(運行Linux的2.4 Ghz Intel Core2,64位模式),OpenSSL聲稱使用單個內核每秒鐘可以約900個ECDH實例。

編輯:對於幾種算法的關鍵安全性(取決於長度)的估計,請參閱this site

+1

聽起來很理想,並在我的機器上用openssl檢查它,結果稍微慢一些,但仍然足夠。現在找到一個我可以使用的實現。 :) – user264636 2010-02-02 22:22:40

+0

那麼,OpenSSL *是*也是一個庫,開源和所有,準備集成到各種應用程序中... – 2010-02-02 22:32:34

+0

不幸的是,似乎沒有任何主動維護的Java綁定。最後我使用了bouncycastle,它比openssl慢,但表現得不錯。 – user264636 2010-02-25 09:12:21

2

爲什麼不計算每個密鑰的密碼強散列,然後用每個文件名將其存儲在明文中?然後,給定一個您需要與所有文件匹配的密鑰,您可以簡單地散列該密鑰並在表中查找它。

+0

或者你可以存儲它被加密的公鑰(或它的散列) – cobbal 2010-02-02 19:20:37

+0

我的要求之一是你不能告訴一個文件被加密的密鑰,除非你有密碼來解密該密鑰;我認爲這可以防止這些解決方案。 – user264636 2010-02-02 22:18:58

0

我會去尋求一種需要較少RSA操作的方法。 SSL/TLS雖然使用RSA等加密AES等密鑰,但不要將AES用於數據,僅僅因爲它在計算上昂貴的操作,需要在每個數據包上安全地執行足夠大的密鑰大小,或者在您的情況下,每個文件的基礎。

另一個公鑰系統是:http://en.wikipedia.org/wiki/ElGamal_encryption。安全方面,我相信它尚未被打破,但現在我個人會對RSA產生信任。我不知道現在是否有橢圓曲線加密算法 - 也就是說我知道他們正在研究,但瞭解他們可能沒有準備好用於生產,我聽說有專利問題。