【问题标题】:Store a key or password securely locally on android在 android 本地安全地存储密钥或密码
【发布时间】:2015-07-21 11:13:20
【问题描述】:

我正在制作一个 android 应用程序,目前,我将服务器用户名和密码写成我的代码中的常量(这不是很安全)。我在网上进行了研究,但我真的找不到可以完全保护用户密码或至少防止黑客攻击的东西。谁能帮我解决如何在android本地安全地存储密码?谢谢!

【问题讨论】:

标签: java android security keystore password-encryption


【解决方案1】:

看来您的问题实际上是“我可以只限制服务器访问我的应用程序吗?”。这不可能。一旦客户端(例如用户设备)上存在应用程序或文件,无论是否经过您的授权,都无法阻止该客户端访问该应用程序或文件中的任何内容。

如果设备可以读取它,那么设备可以读取它 - 无论它实际上是您的应用程序在读取,还是其他东西假装成为应用程序.

您最多可以尝试混淆凭据,但这不太可能有用 - 那些可能有兴趣从您的应用程序中提取凭据的人也可能是那些有技能绕过此类混淆的人。

如果不了解您的用例,我真的无法给您更具体的建议。对于远程 API,通常使用 API 密钥——但这需要用户创建一个帐户。对于无帐户应用程序,您想要的根本不可能。

我还应该指出,“防止黑客”并不是一个有意义的目标——这可能意味着很多东西。您需要了解威胁建模的工作原理,并准确确定您的“攻击者”是谁、他们的目标是什么以及他们的能力是什么。只有这样,您才能尝试找到针对它的解决方案。

编辑:只是想添加一个额外的警告词:任何告诉您混淆对于此类场景“有效”的人,都试图向您推销一些东西。不幸的是,他们在这种尝试中通常相当成功。混淆模型不能工作。

【讨论】:

  • 非常感谢!我实际上在我的应用程序中使用用户,但我的服务器上有一些不包含用户信息的信息,所以我试图用我的服务器用户名和密码下载它。现在,我只需将用户提供的用户名和密码用于 servlet,然后它将处理信息并给我想要的响应。
  • @Pranav 是的,这听起来像是正确的解决方案 :) 确保使用 TLS (HTTPS) 进行连接,这样登录就不会被恶意访问点拦截!如果您将 TLS 证书或证书颁发机构硬编码到您的应用程序中,那就更好了。您可以在 Google 上搜索“MITM 攻击”,了解有关可防止的攻击类型的更多信息。
  • @Pranav 除了 Sven 的建议,您还可以使用具有字符串加密功能的商业混淆器。即使您使用 SSL pining 技术,篡改应用程序和更改证书也不是问题。因此,良好的做法是保护您的应用程序的完整性(完整性控制/防篡改),并对其有价值的数据进行加密。我会推荐我们的产品 DexProtector 来做到这一点。注:我隶属于 Licel(DexProtector 的开发者)
  • @IvanKinash 混淆器是蛇油。它们不能也不能工作。
  • @SvenSlootweg 对不起,我不能同意你的看法。
猜你喜欢
  • 2015-11-24
  • 2017-03-23
  • 2013-06-02
  • 2018-03-16
  • 1970-01-01
  • 2014-10-18
  • 2015-07-04
  • 1970-01-01
相关资源
最近更新 更多