SQLCipher - SQLCipher有多安全?它是否曾被黑客攻击过?

3

它以页面级别加密SQLLite数据库,这很好,没有什么问题!

但是你的源代码怎么办?虽然它被编译了,但即使它被编译了,有人也可以反编译它,检索出你的密码并解密数据库吗?


如果在你的代码中存在,那么总有人能够获取它。这只是时间和努力的问题。真正的问题是,对于他们来说,这种努力是否值得。 - borrrden
1
@borrrden 如果密码在代码中,这不就像你锁上门,然后把钥匙放在门垫下吗?如果需要几年才能反编译,我会感觉还好,但事实并非如此。 - 001
你唯一能做的就是混淆代码,但即使如此也只是拖延时间而已。如果代码在内存中存在,那么有人可以使用调试器来检查内存。这并不是第一次有人问这个问题,这是一个非常流行的问题,却没有真正的答案。 - borrrden
SQLCipher数据库的关键材料不应该硬编码到应用程序中。至少一些密钥材料必须直接来自用户。SQLCipher旨在保护用户数据,而不是用作数字版权管理工具。 - Stephen Lombardo
1个回答

2

SQLCipher有多安全?

根据SQLCipher设计文档,它基于安全组件(AES、OpenSSL、HMAC_SHA1、PBKDF2等)。如果这些声明是正确的,那听起来很不错。

有点不寻常的是(至少对我来说),每个页面都有一个随机IV。这与典型的文件系统加密模式AES-XTS有所不同。 SQLCipher使用的设计相对于AES-XTS具有某些优点,例如再次写入相同的数据不会导致相同的加密页面。但是,可能存在缺点,例如我不确定是否可以移动或复制页面(将加密页面复制到另一页)。也许不可能,但是从设计文档中我看不出如何防止这种情况。这就是使用非标准加密模式的风险 :-) 但即使出现这种问题,攻击者也无法读取数据;它只允许某些类型的攻击。即使使用AES-XTS,仍然可能发生某些类型的攻击,所以我不会太担心。

你的源代码怎么样?

为了保持安全,请勿将密码存储在代码中。相反,让用户输入密码或将其存储在密钥链中。据我所见,这对于AndroidiOS都是可能的,但我不知道细节。


针对您关于移动或复制页面的评论,我们通过在每页MAC中包含页面编号来解决这个问题。因此,页面的MAC包括IV、加密数据和页面编号。试图在数据库中重新排序或移动页面会导致MAC检查失败。 - Stephen Lombardo
@StephenLombardo 这很有道理,非常感谢!看起来SQLCipher的设计是合理的,可能比标准化的AES-XTS稍微“更好”。 - Thomas Mueller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接