RNCryptor:要改变哪些设置以提高性能?

时间:2013-11-23 10:19:14

标签: ios objective-c encryption rncryptor

我的应用程序中有很多短字符串需要解密,解密速度非常关键。

目前我正在试验RNCryptor,但发现其默认设置对我的用例来说有点慢。否则它是一个很棒的框架: - )

加密只会进行一次,因此其性能并不重要。

我很好地放弃了对速度的保护,因为我只想要有一个非常基本的加密。

为了实现最快的解密性能,您建议使用哪些RNCryptor设置进​​行加密和解密?一个简短的代码样本会很棒!

同样,对于当前用例,我可以使用非常基本的加密保护。

2 个答案:

答案 0 :(得分:7)

RNCryptor的大部分时间都在拨打PBKDF2。它迭代20,000次(每个键10,000次)。虽然在即将推出的RNCryptor版本中它可能会快一点,但基于密码的加密总是很慢。这是一个安全功能;它的目的很慢。它的设计速度慢,可以挫败攻击者,同时对最常见的用例产生可接受的影响。

您可以使用基于密钥的方法而不是基于密码的方法来显着提高性能。基于密钥的方法没有注入减速。如果可能的话,这将是我推荐的方法。生成两个随机的256位密钥而不是密码。

您可以将PBKDF2迭代次数设置为较小的数字(例如,在处理JavaScript时这是必要的),但是生成密钥的速度越快,安全性就越差。

有许多方法可以修改格式以提高用例的性能,但是很容易弄乱它并严重损害安全性。正如@Zaph所说,在修改任何安全框架之前,我要么做很多研究,要么聘请专家。

答案 1 :(得分:4)

你无能为力,RNCryptor并不慢。

AES128将比AES256快一点 - 或者不依赖于平台。

设置成本很高,因此可以让事情变得更快。一种可能性是组合字符串。

如果您可以将所有字符串设置为块大小的倍数,则可以使用一个设置,ECB模式和部分CCryptor函数。注意,ECB模式将降低安全性,尤其是在短字符串上。使用CCCryptorCreate()进行设置,并使用带有CCCryptorUpdate()的短填充字符串进行解密。

要考虑的另一件事是TinyCrypt。 “TinyCrypt的第一点就是快速压缩和加密你的文件。”除了AES之外,我很少建议使用非主流的密码充其量只是狡猾 - 但是你说你愿意为了速度而权衡安全性。