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

时间:2014-01-29 06:05:03

标签: android security encryption apk

我不明白黑客可以看到什么,当他进入移动应用程序时看不到,例如android。他反编译.apk,然后看到一些.class files。例如,如果我加密文件中的键/值对,我仍然需要从代码中调用此密钥,如果黑客可以看到代码,无论密钥是否加密,他都会知道我是哪个密钥调用

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

不完全理解您的要求,但经验法则始终假设客户端不值得信任。 你必须确保

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

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

答案 2 :(得分:1)

一个非常坚定的人可以破解它,但破解加密字符串是一个很大的痛苦,并将阻止大多数黑客。特别是如果你用类似ProGuard的东西混淆你的代码。

Answer to a similar question for details on how to encrypt