【问题标题】:Secure way to store sensitive information in Android在 Android 中存储敏感信息的安全方式
【发布时间】:2013-06-14 12:23:52
【问题描述】:

有谁知道在应用程序中存储敏感信息的最安全方法是什么?因为如果想要该信息的人拥有一部已植根的手机,那么使用内部存储和共享首选项很容易受到攻击。

情况是我有某种激活码需要存储在手机内的某个位置(而不是服务器上),以便与服务器端进行进一步的通信和身份验证,该代码需要保护,其他应用程序和用户无法使用,即使在有根电话上。此外,用户无需额外验证(他在进入应用程序时输入 PIN 码并将该码发送到服务器端进行身份验证)。

归根结底,是否有一种安全的方式来存储某些内容并确保其保持隐藏状态,即使在已root 的手机上也是如此?

【问题讨论】:

  • 我最近遇到了同样的问题,我想出的答案是,没有办法以 100% 的可靠性保证数据的完全安全。最好保护您的应用服务器端。话虽如此,有this thread 谈到了几个解决方案。 AccountManager 看起来也很有趣。
  • 最好的办法是存储序列化对象并加密它...这是我找到的最佳解决方案。
  • @ChristopheCVB:这充其量只是一个减速带。任何涉及加密的事情,其中​​密钥和算法都是应用程序的一部分,都可以很容易地进行逆向工程。
  • @CommonsWare:是的,当然……但是可以从云端下载解密密钥。但无论如何,它仍然是一个减速带。你知道更好的解决方案吗,因为我很感兴趣 :D
  • @ChristopheCVB:如果您想保护用户的数据免受攻击者的攻击,那么加密就可以派上用场了。 OP 要求的是 DRM,并且有两种基本类型的 DRM:一种已被破解,另一种没有人试图破解。

标签: android security encryption drm


【解决方案1】:

很遗憾,评论者是正确的。无法 100% 保证激活码不会被黑客入侵。微软在这方面花费了数百万美元,而且仍然存在盗版 Windows,因为归根结底,您无法控制客户端上的代码。如果您赋予客户端解密或以其他方式访问此存储的身份验证代码的能力(无需访问服务器),那么有人可以对应用程序进行逆向工程以撤消您的保护。即使您从服务器检索解密密钥也是如此。

执行此操作的最佳方法取决于您的用例,但这里有一些想法:

  1. 让客户端将“激活码”提交到服务器,如果您认为它被盗,您可以将其列入黑名单。这就是 Windows 的工作方式。如果您想使用激活码而不打扰用户,这是您唯一的选择。

  2. 让用户注册一个帐户,并让应用在每次运行时重新提交用户的凭据。这样一来,如果您怀疑盗版,您就有了一个可以停用的用户帐户。

  3. 让服务器提供解密密钥。这并不能保证激活码的安全,但它确实提高了潜在逆向工程师的门槛。

  4. 完全放弃整个 DRM 理念,将注意力集中在制作好的产品上。音乐公司的研究表明,放弃 DRM 对购买您产品的人数没有影响。

【讨论】:

    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 2022-01-17
    • 2017-06-01
    • 2012-12-26
    • 2018-11-28
    • 2017-05-20
    • 1970-01-01
    • 2023-01-27
    相关资源
    最近更新 更多