【问题标题】:Protect iOS Database information保护 iOS 数据库信息
【发布时间】:2013-12-18 16:18:43
【问题描述】:

我正忙着为 iPhone 和 iPad iOS7 编写一个商业电子单词词典类型的应用程序。应用程序的价值实际上在于我工作多年的数据库,而不是应用程序本身。数据库非常大(在转换为 SQLLite 之前在 Windows 计算机上为 195mb),我想知道保护其中数据的最佳方法是什么,以便应用程序可以读取它但其他人无法读取/获取它。似乎大多数移动开发人员都使用 SQLLite,但可以使用普通的十六进制编辑器轻松读取数据。

从这个论坛和其他论坛中,我了解到 SQLCipher 是一个很好的工具。我的问题是 SQLCipher 似乎对数据库进行了加密,然后在需要在临时文件中读取它时对其进行解密,然后再对其进行加密。如果是这种情况,我有两个问题。

  1. 数据库非常大,每次都解密并再次加密会使应用程序变得非常慢。
  2. 什么可以阻止黑客读取/复制解密的 (temp) 文件,即使是很短的时间也是如此?

我是否了解 SQLCipher 的工作正常,如果是,是否有任何其他工具/方法来加密/保护数据库,以便程序仍然可以使用 SQL 查询读取它,而无需以任何方式轻松获得数据,或任何您可能还有其他建议?

谢谢

【问题讨论】:

    标签: ios database encryption protection sqlcipher


    【解决方案1】:

    根据此页面:http://sqlcipher.net/design 他们不会将您的数据库作为一个整体进行解密,因此您的问题 #1 的答案是否定的。他们声称标准 SQLite 性能的开销约为 5-15%。

    至于 #2 - SQLCipher 将在页面中解密数据库,因此理论上 - 有人可以以解密的方式访问内存中的该页面。但是,这对于您使用的任何加密方法都是正确的。想想看——即使你解密了完整的数据库,你的应用程序也需要在某些时候显示/访问其中的一些数据。并且此时必须解密数据。这里唯一的问题 - 在给定时刻将解密多少数据。

    您拥有的另一种选择是尝试使用标准 SQLite 和标准加密库自己实现加密/解密。例如,您可以单独加密每一行(甚至包含敏感数据的字段),并在需要时对其进行解密——但话又说回来,在某个时刻,该特定行将在内存中被解密并且对黑客可见。

    【讨论】:

    • 如果我想加密一个文本文件,可以吗?
    • 当然。您可以加密文本文件,但您需要在应用程序的内存中对其进行解密,对吧?
    • 感谢您的回答。如果它只发生在内存级别,我很高兴,只要整个文件没有被解密为临时文件,有人可以在它处于解密格式时复制它。我想知道,SQLLite 是 iOS7 中最容易使用的数据库格式,还是可能有另一种内置加密功能的格式,根本不需要 SQLCipher 之类的东西?
    • SQLite 很容易使用。 CoreData 可能是另一个选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多