【问题标题】:RNCryptor: Which settings to change to improve performance?RNCryptor:更改哪些设置以提高性能?
【发布时间】:2013-12-08 07:00:48
【问题描述】:

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

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

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

我可以放弃对速度的保护,因为我只想进行非常基本的加密。

您会推荐使用哪种RNCryptor 设置来加密和解密,以实现最快的解密性能?一个简短的代码示例会很棒!

再次,我对当前用例的非常基本的加密保护很好。

【问题讨论】:

    标签: ios objective-c encryption rncryptor


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      你无能为力,RNCryptor 并不慢。

      AES128 会比 AES256 快一点——或者不取决于平台。

      设置成本很高,因此这是一个可能使事情变得更快的地方。一种可能性是组合字符串。

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

      要考虑的另一件事是TinyCrypt。 “TinyCrypt 的第一点是非常快速地压缩和加密你的文件。”除了 AES,我很少建议使用非主流密码充其量是狡猾的——但您表示您愿意以安全性换取速度。

      【讨论】:

      • 我会明确调查TinyCrypt。关于如何提高设置RNCryptor 的性能的任何想法?我只是在一行代码中使用它:NSData *decryptedData = [RNDecryptor decryptData:encryptedData withPassword:password error:&decryptionError];.
      • 大多数加密方法必须在启动时创建大量状态,这是提高速度的唯一真正希望。大多数芯片组都有某种形式的加密支持。我怀疑 Rob 会提供一些帮助。最好的建议是,让加密领域专家编写您的加密代码或至少对其进行审查——如果您关心安全性的话。
      • 能否推荐一位加密专家(有 iOS 和 Core Data 经验者优先)?
      • Rob NapierGraham Lee 立即浮现在脑海中。我用来审核的人是金融行业的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      相关资源
      最近更新 更多