在哪里存储我的密钥以加密移动设备上的数据?

Posted

技术标签:

【中文标题】在哪里存储我的密钥以加密移动设备上的数据?【英文标题】:Where to store my keys to encrypt data on mobile? 【发布时间】:2014-02-20 19:10:01 【问题描述】:

我不明白黑客在进入移动应用程序(例如 android)时可以看到和看不到什么。他反编译了.apk,然后看到了一些.class files。比如我在一个文件中加密了一个key/value对,我仍然需要从代码中调用这个key,如果黑客可以看到代码,不管这个key是否被加密,他都会知道我是哪个key打电话?

我的目标是在我的应用程序中保留一些加密字符串,例如我的应用程序的 twitter 帐户 ID。 有些话题谈论“要读取的私钥,用公钥加密的内容”,但如果我使用它们,我仍然需要将它们存储在我的应用程序中的某个位置......

【问题讨论】:

【参考方案1】:

不完全理解您的要求,但经验法则始终假定客户不可信。 你必须确保

所有解密都应在您的服务器(您信任的服务器)中完成。 客户端永远不能访问解密的数据(除非您希望它访问)。因此,任何需要直接访问解密数据的代码部分都应该在服务器中。 客户端应该只有加密数据(如果它必须存储数据)。 客户端应该无法访问您用于加密数据的私钥。

如果在您的情况下您的客户必须能够直接访问关键数据,那么您唯一的办法就是使用混淆技术(基本上隐藏您的数据/代码,使其难以找到/理解)。当然,所有的混淆技术最终都会被一个坚定的黑客打败。您必须决定您的数据有多大价值,黑客尝试访问您的数据的可能性有多大。 举一个极端的例子:使用混淆存储您的 Twitter 帐户和密码是非常糟糕的。存储 twitter-url- 可能还不错。

【讨论】:

你说得对,对于像 twitter 一样需要访问互联网的东西,我可以将它交给服务器。但有一件事,我不明白:hiding your data/code:他可以读取 .class 文件并看到我们在保留一些特定数据之前调用了特定且相同的键吗?比如我需要取回level key,应该怎么做?比如把名字“level”加密,然后用加密的“level”名字调用密钥……难道他不能看到我加密了“level”,并在寻找level的加密密钥吗? 原则上是的。如果“级别”的值是在客户端中存储或创建的。诀窍是让价值不水平的情况变得不那么明显。您可以使用 Proguard 进行代码混淆。对于字符串,您可能必须尝试其他人建议的方法。此外,您可以查看developers.google.com/games/services/android/antipiracy 或developer.android.com/google/play/licensing/overview.html 以确保客户端未修改。【参考方案2】:

您可以在启动应用程序时从服务器获取您的密钥。也不要在 sharedPrefrence 或 Sqlite 中管理应用购买细节。因为在根设备中,用户可以从根浏览器或 sqlite 编辑器应用程序中看到该数据文件,因此用户可以更改值。

【讨论】:

对于应用内,您的意思是我们必须在数据库中添加每个用户及其应用内对象吗?我正在寻找创建一个可以离线使用的应用程序... 在每次启动应用程序时检查用户是否购买了任何商品,以便黑客从 sharedpref 更改您的数据。或 sqlite 比用户有原始数据没有改变一个。要检查购买的物品,请参阅此developer.android.com/google/play/billing/api.html 的第 3 点 @SanketKacghela 谢谢,他无法读取 .class 文件并根据需要进行更改?比如更改从服务器接收到的结果,或者访问指定不同应用内的public enum 等?【参考方案3】:

一个非常有决心的人可以破解它,但破解加密字符串是一个很大的痛苦,并且会阻止大多数黑客。尤其是当你用 ProGuard 之类的东西混淆你的代码时。

Answer to a similar question for details on how to encrypt

【讨论】:

谢谢,是的,实际上我可能更喜欢混淆而不是 100% 安全,因为我希望该应用程序可以离线使用,但可以在应用程序内使用......我不明白的一件事,你把秘钥写在代码里,不让黑客可以访问到,让他用秘钥、要解密的私钥、你用来加密的方法读取字符串?

以上是关于在哪里存储我的密钥以加密移动设备上的数据?的主要内容,如果未能解决你的问题,请参考以下文章

移动设备上的数据保护

如何在移动设备上安全地存储数据?

如何在我的移动设备上存储配置信息?

移动存储设备信息安全怎样防泄密?

Firebase 分析和性能日志在移动设备上的位置在哪里?

哪里可以为移动银行应用程序请求 beta 测试人员(美国)? [关闭]