【问题标题】:SQLCipher securitySQLCipher 安全性
【发布时间】:2013-02-13 09:11:32
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: java android sqlcipher


    【解决方案1】:

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

    没有。

    也许我错过了什么?

    密钥来自用户,以用户输入的密码短语的形式。在 SQLCipher for Android 中,此密码短语被传递给 SQLiteOpenHelper 修订版上的 getReadableDatabase() 等方法。

    【讨论】:

      【解决方案2】:

      是的,保护密钥是棘手的部分。理想情况下,它(部分)由用户在登录应用程序时输入的密码提供,但这并不总是理想的,因此有时您必须诉诸备受诟病的“默默无闻的安全性”方法并从位组装密钥以及到处藏匿的碎片。

      【讨论】:

      • 好吧,我发布说没有 100% 安全的解决方案来保存敏感数据。我不能让用户输入密钥,因为我想向用户隐藏该数据。感谢您的宝贵时间。
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        我生成密钥形式 secureRandom 然后将密钥保存在 KeyStore (BKS) 上。 对于 KeyStore,我使用以下方式生成密码:随机、用户信息、设备信息和密码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-14
          • 2013-10-15
          • 2012-08-31
          • 2016-11-09
          • 1970-01-01
          • 2016-02-02
          相关资源
          最近更新 更多