2010-02-02 42 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产生信任。我不知道现在是否有椭圆曲线加密算法 - 也就是说我知道他们正在研究,但了解他们可能没有准备好用于生产,我听说有专利问题。