【问题标题】:encrypt file or string secure android加密文件或字符串安全的android
【发布时间】:2013-02-28 18:30:06
【问题描述】:

我目前在我的应用程序中遇到了安全问题。 我的应用程序每 10 分钟记录一次用户的 GPS 位置,并在 12 小时后将数据发送到服务器。 我目前正在将用户的位置保存在内部存储器的 *.txt 文件中。 现在,我需要保护这个文件,以便它只能在我的应用程序中进行编辑,这样用户就无法破解它并更改记录的 gps 位置。

我已阅读有关加密字符串或文件本身的信息,但这是我的问题。 即使在代码混淆的情况下,stackoverflow 上的人们也不建议对密码进行硬编码。 我还能如何保护此文件上的数据?我自己使用 ProGuard + 代码混淆(位移、数学运算等)不足以将密码保存在我的代码中? 感谢任何 cmets,我需要这样做是安全的,因为数据必须保持不变。 谢谢!!

【问题讨论】:

  • 如果用户只是告诉 GPS 给你的应用一个虚假的位置会发生什么?问题是您试图信任您无法控制的设备。

标签: java android security encryption aes


【解决方案1】:

如果密码在内存中,即使未加密/混淆,只要用户知道他们在做什么,它就可以被恢复和/或滥用。

要解决此问题,您应该让应用从服务器请求密钥以用于加密。密钥本身应该使用 SSL 加密/签名,这样您就可以保证您的服务器发送了密钥,并且在此过程中密钥不会被截获。立即从内存中清除密钥,使其不再保留在设备上。

这个解决方案仍然不是万无一失的。用户可以对应用程序进行逆向工程并告诉它使用任何旧密钥。只要您将坐标存储在设备上,它们就会以某种方式受到攻击。使用我刚才描述的技术,攻击者仍然可以欺骗 GPS 源,或者使用重放攻击。为防止这种情况,您需要为每次保存使用不同的密钥,并在服务器上跟踪应用密钥的顺序。

更安全的方法是根本不在设备上存储位置。一旦它们可用,就立即上传它们,使用加密/签名 SSL 方法来防止篡改。在服务器上对其进行健全性检查,以排除不良的欺骗工作。当信任来自设备的数据(例如 GPS 坐标)时,您就有被聪明的攻击者操纵的风险。

【讨论】:

  • 谢谢,但是否可以从服务器获取密钥,即使逆向工程师也无法从下载密钥的位置获取 URL 地址?我想我正在尝试涵盖所有变量,但这是不可能的。
  • 是的,攻击者可以使用 URL 获取密钥,除非您在每次请求时都更改它。您可以通过要求证书来获取密钥来使其更难,但攻击者也可以找到它并将其用于请求。归根结底,唯一完全安全的做法是不信任手机中的数据。最终,一个坚定的攻击者可以用他想要的任何东西填充日志(最容易通过欺骗 GPS 源本身,它必须始终是明文)。您在这里所做的只是使其更具挑战性,抵御技术较差和/或懒惰的攻击者
猜你喜欢
  • 2020-12-11
  • 2023-03-10
  • 1970-01-01
  • 2012-01-07
  • 2011-04-07
  • 2012-04-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多