我应该如何保护 iOS 中的 SQLite 数据库?

Posted

技术标签:

【中文标题】我应该如何保护 iOS 中的 SQLite 数据库?【英文标题】:How Should I Secure a SQLite Database in iOS? 【发布时间】:2011-05-16 14:25:08 【问题描述】:

我正在开发一款医疗保健 ios 应用。我希望我的用户数据被加密,所以如果他们的 iPhone 被盗,小偷将无法访问他们的健康信息。合法所有者应该能够访问他们的信息(与this question 不同)。

我正在考虑使用SQLCipher 加密整个数据库,并将 SQLCipher 密码放入 Keychain。

这是个好方法吗?

另外,我是否正确理解——因为一切都在设备上——一个坚定的黑客无论如何都能够闯入?

【问题讨论】:

Secure information contained on iPhone SQLite DB的可能重复 另见iPhone SQLite Password Field Encryption 好吧,这并不是那个问题的真正副本,因为受保护的数据不是我的(应用程序开发人员)而是用户的。我不是试图保护我的 IP 免受竞争对手的侵害,而是试图保护用户的健康信息不被窃贼或人们窥探 iPhone 的备份。 如果有的话,它是 How can I encrypt CoreData contents on an iPhone 的副本,你提供了一个很好的答案! @ford : github.com/sjlombardo/sqlcipher 这不起作用你能分享一下你是如何加密 sqlite 文件的吗? 【参考方案1】:

以双重加密为目标:您应该按照所述加密数据库,但要求用户在每次启动应用程序时输入密码。数据库的密钥将是密码的哈希,用随机数加盐。将密码盐存储在钥匙串中。

一个坚定的黑客可以通过文件系统访问访问加密的 SQLite 数据库。如果他们能够破解钥匙串加密,他们将很容易破解数据库,但通过要求用户输入密码(或密码),它有助于抵御这种攻击。

【讨论】:

【参考方案2】:

我认为您的解决方案是有道理的。它提供了很好的安全性,并使您的应用易于使用。

您使用钥匙串获得的主要好处是用户备份是安全的,因为钥匙串内容没有使用 iphone 备份。 (但我想你已经知道了)

但这是巨大的安全性,因为潜在的黑客将不得不物理访问 iphone。此外,如果 iphone 被 pin 阻止,那么获取数据的唯一快速方法可能是物理访问设备的闪存,这不是最简单的事情。

老实说,如果您强制用户输入长密码,我不相信他们会使用您的应用。如果你让他们使用他们喜欢的任何密码,黑客将能够使用字典攻击来破解数据库加密。

【讨论】:

以上是关于我应该如何保护 iOS 中的 SQLite 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何保护我的 iOS 应用程序中的敏感内容不被截图? [复制]

我应该选择 Hiberlite 将 SQLite 集成到我的 Win/iOS 应用程序中吗?

以编程方式将 SQLite 数据导出到 iOS 中的 Excel

保护源代码免遭劫持 iOS

CoreData SQLite 保护

当我使用 iPhone 运行项目时如何在 iOS 中使用 sqlite