【问题标题】:How to store secure string in Android?如何在 Android 中存储安全字符串?
【发布时间】:2016-08-21 15:59:11
【问题描述】:

有没有可以理解的在 Android 中使用 KeyStore 的例子?

我真的不明白如何保护我在 ROOTED 设备中的 Android 应用程序中的密码/令牌/anything_else 不被可以物理访问设备的黑客使用。

我知道我可以使用一些 ALIAS 生成 KeyPair,并使用它的私钥作为数据库密码,但我感兴趣的是:任何黑客都可以从我的反编译 apk 中读取这个 ALIAS(因为我无法混淆别名字符串) 并构建另一个使用相同 ALIAS 从 android KeyStore 获取 privateKey 的应用程序?

有什么解决办法吗?

【问题讨论】:

  • 目前,我找到的唯一解决方案是将我的数据存储在由 SqlCipher 加密的数据库中。使用ormLite访问,密码存储在NDK方法中作为常量。在我的 DbHelper 扩展 OrmLiteOpenHelper 中,我正在使用密码初始化数据库,该密码从 NDK 返回方法。在 NDK 方法中,这只是返回“secretpassword”。 Bulletproof Android book 说从 NDK 中获取这个常量比较困难,因为你必须反汇编它,而不仅仅是像 Java 代码那样反编译。对此有何想法?

标签: android security passwords keystore


【解决方案1】:

我真的不明白如何保护我在 ROOTED 设备中的 Android 应用程序中的密码/令牌/anything_else 不被可以物理访问设备的黑客使用。

你不能。 Client Authenticity is Not the Server's Problem.

假设您在应用中存储了一个加密值,而不是直接存储该值。解密此值的密钥在哪里?应用程序必然需要解密此值。现在,黑客需要做的就是下载您的 .apk,将其插入 Lobotomy,他们会很快弄清楚发生了什么。

如果您想对运行您的软件的人隐藏敏感信息,最好不要在设备本身上放置敏感信息。

【讨论】:

    【解决方案2】:

    您需要将密钥存储在应用程序中吗?

    如果在第一次安装时你要求用户设置密码,你用那个密钥加密你的 SQLCipher 数据库(也许也散列它),然后每次当用户启动应用程序时,你都会询问密码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 2015-04-14
      • 2022-11-11
      • 2013-03-02
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多