2010-01-03 101 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