【问题标题】:How to store the key used in SQLCipher for android如何存储用于 android 的 SQLCipher 中的密钥
【发布时间】:2014-03-26 01:56:15
【问题描述】:

我正在使用适用于 Android 的 SQLCipher。我已经完成了所有必要的事情 加载http://sqlcipher.net/sqlcipher-for-android/中提到的库

我观察到您设置了密码,即输入的密钥:

    SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, "test123", null);

那么您的密码如何免受黑客攻击?因为它可以从 java 文件中访问。 ?

有什么正确的方法可以存储密码吗?

谢谢, 笔尖

【问题讨论】:

  • 您可以“将其隐藏起来”:如果您使用的密码与颜色字符串无法区分怎么办?即:“#fad005”......或者它可能类似于一个id,即:“0x7f070005”......只是一个想法
  • @ArtooDetoo:请您详细解释一下。我还不清楚。谢谢
  • 您可以使用可以轻易迷惑黑客的密码字符串。他看到代表颜色的字符串,他已经习惯了看到它们。但他不知道这些“颜色”之一就是你的密码。或者你可以将它隐藏在你的 strings.xml 中,就像它是一个普通的字符串一样,比如 2.00.48 r 15 - 只是另一个想法跨度>
  • @ArtooDetoo:感谢 ArtooDetoo 的帮助。会试试看:)
  • 看,这些只是简单的想法......您可以将字符串隐藏到某些自定义颜色的 ARGB 组件中,例如......甚至是 png(这种技术称为“隐写术” )。

标签: android sqlite sqlcipher


【解决方案1】:

那么你的密码如何免受黑客攻击?

不是。不过,对密码进行硬编码可以进行简单的演示。

有什么正确的方法可以存储密码吗?

用户应通过您的 UI 提供用户数据库的密码。然后用户将密码存储在用户的头脑中,或者您可以将用户头脑中的内容与其他内容结合起来进行轻量级的双因素身份验证(例如,配对的蓝牙可穿戴设备的 MAC 地址)。

【讨论】:

  • 我不想从用户界面获取任何密码输入。我想存储一个用于加密的密钥。
  • @Nibs:既然任何人都想得到那个存储的密钥,那么加密的意义何在?如果他们可以访问数据库,他们就可以获得密钥。
  • 我在链接sqlcipher.net/design 上读到了这个。当使用密码初始化时,SQLCipher 使用 PBKDF2(OpenSSL 的 PKCS5_PBKDF2_HMAC_SHA1)派生密钥数据。每个数据库都在文件的前 16 个字节中使用唯一的随机盐进行初始化。该盐用于密钥派生,它确保即使使用相同的密码创建两个数据库,它们也不会具有相同的加密密钥。默认配置使用 64000 次迭代进行密钥派生(这可以在运行时使用“PRAGMA kdf_iter”进行更改)。所以我想可以将密码保存在 .java 文件中
  • @Nibs:将密码保存在 Java 文件中意味着任何人都可以得到密码。您所描述的是在攻击者知道密码时防止暴力攻击。
【解决方案2】:

我想建议以下方法:

  • 第一次创建数据库时,您必须创建一个随机密码。
  • 您将此密码存储在密钥库中。
  • 每当您打开应用程序时,您都会从密钥库中读取密码并将其用于连接数据库。

那么密钥库访问是如何工作的呢?请参阅 blog entry 1blog entry 2 以及相应的 github repository。该解决方案适用于 Android 版本 2.1 至 4.3。

注意事项:

  1. 该解决方案仅适用于私有 API 访问,因此将来可能会中断。
  2. 需要屏幕锁定密码才能存储密钥,如果用户删除其锁定屏幕密码,所有密钥都会被擦除。

【讨论】:

    【解决方案3】:

    被忽略的是SQLCipher给出的演示纯粹是为了演示。克服显而易见的问题取决于开发人员的想象力。不太明显的是,您不会将密钥存储在私有局部变量中,因为对您的类文件执行字符串搜索可能会泄露您的密钥,从而减少成功的暴力攻击所需的字典。在十六进制编辑器中打开您的 classes.dex 并尝试一下。

    这不是您应该关心的 .java 文件,因为只有您的开发人员应该在其中。这是 .class 文件。下一级的努力是一些混淆的努力,但这实际上只会限制不耐烦的人。

    看看这个讨论 https://groups.google.com/forum/#!topic/sqlcipher/OkE0rUwXEb8

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-09
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多