题
我一直在开发一个在大量文件中使用非对称加密的系统。我目前正在使用具有 4096 位密钥的 RSA 来加密每个文件的 256 位随机生成的 AES 密钥,但性能有些欠缺,因为一项所需的操作是扫描所有文件(系统处于运行状态时的估计数量)使用量约为 10,000)并确定哪些可以使用特定的私钥进行解密。虽然我不希望此操作是即时的,但目前花费的时间太长(每秒处理约 2 个文件)。我考虑过减少密钥长度,但即使将其减少到 2048 位也无法提供我所需的性能水平。512 位就可以了,但这样的密钥现在可以轻松破解,这是不可能的。
有人能给我指出一个更快但具有相似加密强度的系统吗?它需要通过 Java JCA 提供程序(例如类似 bouncycastle 的东西),以便巧妙地插入我现有的应用程序。我知道充气城堡支持 El Gamal,但我找不到任何有关该算法有多强大的详细信息,或者它是否可能比 RSA 更快。我还听说椭圆曲线系统只需要相对较短的密钥(384 位等),但不知道在哪里可以找到其中之一的实现。
解决方案
对于您提出的问题,请尝试椭圆曲线上的 Diffie-Hellman,也称为“ECDH”。一旦我们处理当前技术无法破解的规模,估计安全性就有点困难,因为这取决于我们如何押注未来的技术发展。然而,可以说 P-256 曲线上的 ECDH 提供了“128 位”的安全性,该级别类似于从 2048 位 RSA 获得的安全级别。该级别对于所有当前用途来说足够了,或者更恰当地说,如果 P-256 不足以满足您的需要,那么您的问题有非常特殊的需求,并且加密强度可能是您最不需要担心的。
在我的 PC(2.4 Ghz Intel Core2,64 位模式,运行 Linux)上,OpenSSL 声称使用单个内核每秒处理大约 900 个 ECDH 实例。
编辑: 对于密钥安全性的估计,取决于长度,对于几种算法,请参见 这个网站.
其他提示
你为什么不计算每个键的强加密散列,然后存储在清澈的每个文件名?然后,给定一个键,你需要来匹配所有的文件,你可以简单地散列键和表中查找。
我会去,需要较少的RSA运算的方法。 SSL / TLS,尽管他们使用RSA等加密AES等按键,请不要使用AES进行简单的数据,因为它是在足够大的密钥尺寸计算上昂贵的操作,对每个数据包,或在您的情况做安全,每个文件为基础。