它在页面级别对 SQLLite 数据库进行加密,好的,没问题!
但是你的源代码呢?它已编译,但即使它编译了有人可以反编译它,检索您的密码并解密数据库?
SQLCipher 的安全性如何?
根据SQLCipher 设计文档,它基于安全组件(AES、OpenSSL、HMAC_SHA1、PBKDF2、...)。如果这些说法是正确的,那对我来说听起来不错。
有点不寻常(至少对我而言)是每页有一个随机 IV。这与典型的文件系统加密模式AES-XTS有所不同。SQLCipher 使用的设计与 AES-XTS 相比具有一定的优势,例如再次写入相同的数据不会导致相同的加密页面。但是,可能有缺点,例如我不太确定使用 SQLCipher 是否可以移动或复制页面(将加密页面复制到另一个页面)。这可能是不可能的,但是从设计文档中我看不出这是如何防止的。如果使用非标准加密模式,这就是风险 :-) 但即使这是一个问题,它也不允许攻击者读取数据;它只允许某些类型的攻击。即使使用 AES-XTS,某些类型的攻击也是可能的,所以我不会太担心。
你的源代码呢?
为了保存内容,请勿将密码存储在代码中。相反,让用户输入密码,或将其存储在钥匙串中。据我所知,这对Android和iOS都是可能的,但我不知道细节。