【问题标题】:Secure download of data in Android application在 Android 应用程序中安全下载数据
【发布时间】:2012-08-27 18:39:59
【问题描述】:

我有一个返回 JSON 字符串和我的数据的 URL。现在,我想保密这些数据,所以只有我的 Android 应用程序可以显示它。

我的第一个想法是使用私钥(在服务器端)对数据进行编码,并将相同的私钥存储在应用程序中,以便它可以解码消息。但是,攻击者(用户)可以反编译.apk并获取私钥。

  1. 您知道如何保护它吗?
  2. 反编译Java是simple。 Android .apk 怎么样?我听说有一种叫做 ProGuard 的东西——Android 默认使用它吗?它是否保护代码?

【问题讨论】:

  • “你知道如何保护它吗?”它永远不会是 100% 安全的,任何你作为人类可以实施来保护它的东西都可以被其他人撤消。
  • @FoamyGuy 我同意你的观点,这永远不会是 100% 安全的。但我们可以让它更安全。但是,我不同意一般性陈述“您作为人类可以实施以保护它的任何东西都可以被其他人撤消”。例如One-time pad encryption.

标签: android security


【解决方案1】:

这通常是做不到的:如果用户需要查看数据,他们必须能够对其进行解密,等等。您可以通过不将数据存储在磁盘等上来增加难度,但要确定用户/attacker 可以转储内存、使用调试器等查看数据。首先考虑您要保护的威胁,然后决定行动方案。

如果您只希望您的应用能够下载数据,则需要使用某种身份验证 + SSL。如果您在应用程序中硬编码密钥或密码,则很容易将其提取出来,因此不会给您带来太多收益。如果您让用户每次使用该应用程序时都输入密码,他们会很快感到沮丧并留下一堆 1 星评级。中间立场是使用某种基于令牌的身份验证,例如 OAuth(或 ClientLogin,如果你真的需要,但它已被弃用)并让用户使用他们现有的帐户进行身份验证,这样他们就不会必须注册并记住另一个密码。大多数 Android 设备已经设置了 Google 帐户,因此您可以使用它,但这需要额外的权限和用户同意(确认对话框)。

【讨论】:

    【解决方案2】:

    一些混淆器比其他混淆器要好得多,但它可以保护代码不被逆向工程,而不是数据不被看到,它可以保护您免受无动机的黑客攻击,但仅此而已。

    如果您试图保护数据免受成功反编译/重新编译您的代码的人的影响,那么除非用户使用未存储在设备上并用于加密的密码授权数据,否则数据永远不应该是明文的/解密动态数据。

    我认为最简单的方法是使用密码保护的 HTTPS 会话进行数据传输,然后使用相同的永不存储密码即时加密/解密,或使用相同的永不存储密码存储 encrypted in SQL密码。

    这可能会变得非常复杂,具体取决于您真正想要做的事情、它真正需要的安全性以及您在服务器端拥有多少控制权等等。网络上有很多更详细的东西,@987654322 @

    如果您确实想要自定义,那么 Android 几乎具有安全密钥交换协议、私钥/公钥支持以及许多通用加密支持,所以这一切都是可行的,但我不确定我是否会尝试自己推出,除非您对所有协议和正确使用都非常满意。

    人们通常并不像他们认为的那样需要安全性,但如果您愿意投入基础设施并花时间对其进行审查,那么您可以获得非常安全的保障。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多