CoreData SQLite 保护
Posted
技术标签:
【中文标题】CoreData SQLite 保护【英文标题】:CoreData SQLite protection 【发布时间】:2009-12-24 12:51:04 【问题描述】:我喜欢在我的项目中使用 CoreData 及其实体模型。
我需要知道如何将 sqllite 数据库安全地存储到 Iphone 中。 众所周知,当 Iphone 越狱时它具有可导航的文件系统,这意味着对我来说,某人或某人很容易打开或复制到我的 sqllite 数据库的另一个环境。我如何针对这些问题保护我的数据库?
谢谢
【问题讨论】:
【参考方案1】:以粗体字回答。
如果他们已经越狱了你的 iphone 并且有窃取数据的意愿,他们可能有能力解密你放在那里的任何东西;如果数据具有任何价值,则尤其如此。要在这种情况下使用加密,您的应用程序必须以某种方式存储密码,除非您希望用户每次使用 iphone 键盘都输入此密码——从可用性的角度来看,这是一个很大的禁忌。我建议您依靠苹果提供的访问路障和远程擦除工具。
如果您要依赖苹果的 4 位数字密码作为密码 - 即平衡可用性....那么只有 10,000 种组合....不是很安全。
但是.... 最简单且经过时间考验的方法是在块链模式下使用可逆加密块密码来加密敏感列的内容,并从用户那里检索密码每次启动应用程序时。
-- 编辑:进一步讨论--
如果我希望内容以移动方式加密,我希望内容的用户拥有一个上面有内容的 USB 记忆棒和一个安全强化的笔记本电脑/上网本,上面运行着类似 truecrypt 的东西。
【讨论】:
嗯,我说的是字典之类的大量记录,我必须保护这些数据。那么,性能如何?当我查询大量数据时,我发现性能会变差,不是吗? 是的,首先因为您只能以混淆(加密)的形式索引它们。其次,因为它们必须被解密(我认为你很担心)——河豚密码是你最好的性能选择。然而,这可能不是苹果提供的任何加密库的一部分。 另外,即使你采用这种方法并且可以让它发挥作用,电池也会很快耗尽:/ “如果他们越狱了你的 iPhone,他们很聪明,可以解密你放在那里的任何东西”——我认为你大大高估了大多数越狱者的技术能力。除非他们非常有动力去获取这些数据,否则任何程度的加密都会像一扇锁着的门,他们只会转向更容易的目标。【参考方案2】:我不知道未经用户同意手机可以越狱?
在 iPhone 3GS 上,手机上存储的所有数据都是加密的。
我不知道您在存储什么,但将安全性留给 Apple 可能没问题。
你读过这个吗? http://images.apple.com/iphone/business/docs/iPhone_Security_Overview.pdf
如果你真的只有不到 10,000 条记录,而且它们很小 - 比如一两个大小的短字符串,那么你可以使用 NSDictionary / NSArray 在内存中包含 10,000 个项目,成本为 10k*.256k = 2.5 MB 内存,不算多。如果查询很简单,那么您根本不需要 sql。只需遍历每次搜索的所有记录。
您可以将 NSDictionary 存储为加密文件,受密码保护,用户在每次启动时输入密码。
【讨论】:
iphone 数据加密没用 (wired.com/gadgetlab/2009/07/iphone-encryption),但是就像我想说的那样,它足以阻止小偷获取您的数据,真正的黑客将通过苹果的安全一会儿。并且没有用户的同意不需要越狱iphone:p只是持有它的人。 那篇文章被夸大了。是的,黑客可能会从电话中获取一些数据——但这不像普通小偷可以轻易越狱他们刚刚在某个地方捡到的电话。作为第一道防线,加密非常好。 这不是夸大其词,您没有阅读过去 2 年高管丢失所有形式的敏感数据的新闻文章吗?现在每个孩子都知道如何做脚本小子的东西,而且 iPhone 黑客工具附带教学视频。 那么,Hassan 对示例用法有什么建议吗?或者你能提供任何描述它的示例代码吗?我想看看 CoreData 和 Blowfish 一起使用的示例项目,这对我有很大帮助。谢谢【参考方案3】:您是否担心有人偷了手机获取信息?或者拥有手机的人正在访问您的应用包含的文件?
如果不是用户,您可以采取保护措施,例如每次都显示密码(提示:用户会讨厌它,您的应用将获得所有 1 星评价)。
如果您担心的是用户,您会疯狂地认为您可以保护用户在他们自己的设备上拥有的任何东西。你可以应用一些简单的混淆并称之为好。
【讨论】:
以上是关于CoreData SQLite 保护的主要内容,如果未能解决你的问题,请参考以下文章
Cocoa:CoreData - ManagedObjectContext 中的多个实体