【问题标题】:Android secure persitent storage (app uninstall) with standard APIs使用标准 API 的 Android 安全持久存储(应用程序卸载)
【发布时间】:2014-10-12 09:00:17
【问题描述】:

我已经做了一些研究,如何在没有外部网络服务器的情况下实际实施 X 天试用版以进行日期检查。但仍然没有找到明确的解决方案。

要求:

  • 小数据量的安全存储(例如安装数据)
  • 安全,因为它只能由该应用程序读取/写入。甚至更好地防止设备擦除、生根?
  • 在应用卸载后持续
  • 重新安装应用时可以重新获得数据
  • 在 Android 4.0.3+ 上工作
  • 使用标准 API,没有可能会随着时间而破坏的黑客行为。 [1]

我知道这些要求很高。有什么办法吗?谢谢。

[1]http://nelenkov.blogspot.de/2012/05/storing-application-secrets-in-androids.html

【问题讨论】:

    标签: android security storage keychain trial


    【解决方案1】:

    如果您查看 android 中可用的Storage Options,我们可以缩小可以使用的方法。

    你不能选择Network Connection,因为你不想要外部网络服务器

    您不能使用SQLite DatabasesInternal StorageShared Preferences,因为它们不是在应用卸载后持续存在”。

    所以唯一的方法是External Storage

    但是,要使其“安全,因为它只能由该应用程序读取/写入”,您必须加密数据文件这样只有您的应用程序可以读取它。但是您不能使其不受用户自己触发的设备擦除或删除的影响。

    【讨论】:

    • 谢谢,到目前为止,我已经实现了一种使用共享首选项和外部存储的方法,以在应用程序卸载后保留值(值 AES 加密,密钥存储在应用程序中)。但是如果两个存储都被删除,这个解决方案仍然有缺点。
    • @Matthias 你确实发布了“存储在应用程序中的密钥”有什么安全漏洞吗?充其量是一种混淆。任何花时间对您的应用进行逆向工程的人都会找到关键。
    • @Nikolay Elenkov 我认为最终使用服务器确实是最好的。 APK 中的 AES 密钥存储非常不安全,是的。
    • @Matthias 没有办法在没有服务器的情况下使其安全。但是,实际上不需要加密任何东西,您只需对数据进行签名并将 public 密钥嵌入到您的应用程序中即可。没有您的私钥,用户无法伪造签名,但问题仍然存在:当他们删除您的许可证 blob 时该怎么办?
    • 应用需要网络连接。因此,我将通过服务器进行日期检查。在每个应用程序启动时,都会与服务器进行日期检查。因此,应用程序中没有存储许可证 blob。此建议的第三个选项。还是要谢谢你的帮助。 stackoverflow.com/questions/995719/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2017-03-30
    • 2019-12-25
    相关资源
    最近更新 更多