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

For*_*ord 7 sqlite security iphone cocoa-touch objective-c

我正在开发一款医疗保健iOS应用程序.我希望我的用户数据被加密,因此如果他们的iPhone被盗,小偷将无法访问他们的健康信息.合法所有者应该能够访问他们的信息(与这个问题不同).

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

这是一个好技术吗?

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

Jas*_*son 5

旨在进行两因素加密:您应该按照说明对数据库进行加密,但是要求用户每次启动应用程序时都输入密码。数据库的密钥将是密码的哈希值,并带有一个随机数。将密码盐存储在钥匙串中。

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


Pio*_*pla 2

我认为你的解决方案很有意义。它提供了相当好的安全性,并使您的应用程序易于使用。

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

但这是巨大的安全保障,因为潜在的黑客必须物理访问 iPhone。此外,如果 iPhone 被 PIN 码阻止,那么获取数据的唯一快速方法可能是物理访问设备的闪存,但这并不是最简单的事情。

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