Android 应用程序的 SQLCipher 究竟是如何工作的? http://sqlcipher.net/design/
据我了解,这一切都取决于 PRAGMA 密钥,并且该密钥应保存在应用程序中,可能以二进制形式保存。
然而,这是不安全的,因为几乎每个人都可以在 root 手机上反编译 .apk 文件。也许我错过了什么?
谢谢你。
Android 应用程序的 SQLCipher 究竟是如何工作的? http://sqlcipher.net/design/
据我了解,这一切都取决于 PRAGMA 密钥,并且该密钥应保存在应用程序中,可能以二进制形式保存。
然而,这是不安全的,因为几乎每个人都可以在 root 手机上反编译 .apk 文件。也许我错过了什么?
谢谢你。
据我了解,这一切都取决于 PRAGMA 密钥,并且该密钥应保存在应用程序中,可能以二进制形式保存。
不。
也许我错过了什么?
getReadableDatabase()
密钥来自用户,以用户输入的密码短语的形式。在 Android的SQLCipher 中,此密码短语被传递给SQLiteOpenHelper
.
SQLCipher 团队普遍建议不要在应用程序二进制文件中嵌入固定密钥。无论应用程序在隐藏嵌入式密钥方面多么有创意,一个足够坚定的攻击者都能够从应用程序包中提取它并打开数据库。
不幸的是,一些应用程序仍然选择使用带有嵌入式密钥的 SQLCipher 作为 DRM 的基本形式,即使临时用户难以查看数据。然而,这并没有提供任何实质性的安全性。
如果您需要保护敏感数据,最好的方法是使用源自用户输入的强密码的密钥。SQLCipher 自动提供强密钥派生,因此您需要做的就是通过 PRAGMA 密钥或 SQLCipher 包装器库中提供的等效密钥机制之一提供用户密码。
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.
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.