1

Android 应用程序的 SQLCipher 究竟是如何工作的? http://sqlcipher.net/design/

据我了解,这一切都取决于 PRAGMA 密钥,并且该密钥应保存在应用程序中,可能以二进制形式保存。

然而,这是不安全的,因为几乎每个人都可以在 root 手机上反编译 .apk 文件。也许我错过了什么?

谢谢你。

4

4 回答 4

2

据我了解,这一切都取决于 PRAGMA 密钥,并且该密钥应保存在应用程序中,可能以二进制形式保存。

不。

也许我错过了什么?

getReadableDatabase()密钥来自用户,以用户输入的密码短语的形式。在 Android的SQLCipher 中,此密码短语被传递给SQLiteOpenHelper.

于 2013-02-13T12:49:00.660 回答
1

SQLCipher 团队普遍建议不要在应用程序二进制文件中嵌入固定密钥。无论应用程序在隐藏嵌入式密钥方面多么有创意,一个足够坚定的攻击者都能够从应用程序包中提取它并打开数据库。

不幸的是,一些应用程序仍然选择使用带有嵌入式密钥的 SQLCipher 作为 DRM 的基本形式,即使临时用户难以查看数据。然而,这并没有提供任何实质性的安全性。

如果您需要保护敏感数据,最好的方法是使用源自用户输入的强密码的密钥。SQLCipher 自动提供强密钥派生,因此您需要做的就是通过 PRAGMA 密钥或 SQLCipher 包装器库中提供的等效密钥机制之一提供用户密码。

于 2013-02-13T13:29:55.210 回答
1

Yes, securing the key is the tricky part. Ideally it's (partly) supplied by a password the user enters when signing on to the app, but that isn't always ideal, so sometimes you have to resort to the much-maligned "security by obscurity" approach and assemble the key from bits and pieces stashed here and there.

于 2013-02-13T13:44:27.490 回答
0

I generate key form secureRandom and then save key on KeyStore (BKS). For KeyStore i generate password using: random, user info, device info and password.

于 2015-06-25T20:07:31.603 回答