我正在构建一个 iPhone 应用程序,我目前需要加密一个字符串,将其存储在一个文件中,以便以后解密。据我了解,我可以使用对称加密来执行此操作,但我的加密/解密密钥可以进行逆向工程。不对称加密可以解决这个问题,但似乎我需要一个服务器来发送数据以使用私钥解密。有谁知道我可以在独立应用程序中安全地加密/解密字符串的方法?
谢谢!
我正在构建一个 iPhone 应用程序,我目前需要加密一个字符串,将其存储在一个文件中,以便以后解密。据我了解,我可以使用对称加密来执行此操作,但我的加密/解密密钥可以进行逆向工程。不对称加密可以解决这个问题,但似乎我需要一个服务器来发送数据以使用私钥解密。有谁知道我可以在独立应用程序中安全地加密/解密字符串的方法?
谢谢!
与所有与安全有关的问题一样,问题是:你在为谁辩护?
如果您试图阻止不经意间的窃贼(或脚本小子)读取加密字符串,则使用内置的 iOS 加密服务(例如Keychain)可以提供足够好的安全性。显然,安全性的强度将部分取决于您无法控制的各种因素(特别是用户为设备配置的密码锁类型(如果有的话))。
下一个级别将是使用对称加密密钥(即受用户密码保护的密钥)的对称加密。正如@lukas 所指出的,原则上这当然可以被破解,但从实际的角度来看,如果用户为足够大的密钥选择了足够强的密码短语,那么将有效地阻止临时到中级的攻击者。
另一方面,如果您需要像布鲁斯·施奈尔( Bruce Schneier)所说的那样保守秘密,而不是向您的妹妹,而是向世界主要政府保密,那么这些方法可能是不够的,您将不得不探索其他选择,包括但不仅限于将字符串存储在多个位置,使用多个密钥和多个身份验证因素。
所有这一切(保存最后一个选项)的主要 Apple 参考资料是Secure Coding Guide,它在开头页面的末尾引用了其他更具体的编程指南(包括钥匙串和加密服务)。我也衷心推荐 Graham Lee 的Professional Cocoa Application Security。如果你想要一个理论基础,黄金标准是 Schneier 的应用密码学。
这个基本问题在 Stackoverflow 上经常被问到。答案是,您不能对自己的客户的安全性感到困惑,而且您永远不应该花费过多的钱来尝试。我推荐以下链接以查找之前的许多讨论:
从上面你会发现更多的链接。但最终的答案是,你很可能试图解决错误的问题,而你认为你想解决的问题是无法解决的。
有谁知道我可以在独立应用程序中安全地加密/解密字符串的方法?
不会。如果有人对数据有物理访问权,它就可以被破解。做一个网络服务来解决这个问题。
您是否考虑过使用钥匙串服务?