2010-01-03 109 views
6

我使用了惊人的FPS,我必须将密钥存储在java代码中。不过,我担心有人会反编译我的apk并找到密钥。我自己反编译apk,找不到密钥,但我不是VM专家。任何帮助?Android存储密钥,反编译恐惧

+7

你不能“真正”防止有人反编译的程序。您的安全模型最好考虑到这一点。 :-) – 2010-01-03 04:40:51

+0

如果我从网络服务器(密钥)加载它,我如何确保请求不能被其他人制作(假设反编译) – 2010-01-03 04:48:08

+0

http://en.wikipedia.org/wiki/Public-key_cryptography可能对验证请求很有用。 – 2010-01-03 04:52:23

回答

8

你不能把你的加密密钥为您的应用程序,并期望它仍然是一个秘密。它只需要一名坚定的程序员反编译并找到密钥,并且可以与世界共享。

非对称/公钥密码学正是您想要的解决方案。创建一个公钥/私钥对,然后将公钥放在您的应用程序中并自己保留私钥。然后,你可以做两件事情:

  • 应用程序可以加密使用公共密钥,只能使用私钥解密的消息。
  • 或者,您可以签署使用私有密钥,可以使用在应用程序中的公共密钥进行验证的消息。
+0

是真的。但如果您将私钥或公钥放在应用程序中,他们也可以使用该密钥来解密密钥。 – 2011-03-09 00:17:12

+1

@Patrick Boos:这就是非对称加密的一点:你不能从公钥计算私钥。这种方式的工作原理是,使用私钥(您不与任何人共享,只在服务器上共享)在服务器上加密*,并且客户端上的应用程序具有* public *键可以解密;此外,客户端上的应用程序使用* public *键签名,服务器使用私钥进行验证。 *公共*密钥旨在自由分享。 – Piskvor 2011-04-26 11:23:35

+0

@Piskvor为了成为安全的公钥密码学,要求私钥保密。但是如果某人获得了存储在应用程序中的私钥(例如,通过反编译)呢?然后,他或她仍然可以读取使用公钥编码的所有秘密数据(与原始应用程序完全相同)。有没有办法来防止这种情况? – Piotr 2011-04-29 21:40:02

1

一个确定足够的个人将能够提取您的密钥,是不是真的有可以为此做些那么多。您可以尝试以某种方式混淆密钥(提高酒吧如何确定他们的需要),但是无法阻止他们获得密钥。

但是,根据为什么你需要存储的密钥,你可能能够使用Asymmetric Key Cryptography。您将能够存储可能仅限于加密(而非解密)或认证目的的公钥,同时能够保护私钥安全。

+1

公钥仅用于加密和签名验证。 – 2010-01-03 05:21:15