2012-01-09 87 views
5

在應用內結算概述Security Controls部指示在遠程服務器上而不是在應用程序(在Android設備上本地運行的)執行一個「簽名驗證」:爲什麼遠程服務器上的簽名驗證比設備上的簽名驗證更安全?

通過執行簽名驗證可以幫助檢測已被篡改或被欺騙的響應 。您可以在您的應用程序中執行此簽名驗證步驟,即 ;然而, 如果你的應用程序連接到一個安全的遠程服務器然後我們 建議您該 服務器上進行簽名驗證。

但是,如果我在遠程服務器上執行簽名驗證,預計只有yes/notrue/false答案,是不是這其實更容易被攻擊者截獲並修改?

如果從遠程服務器的答案是另一個簽名,那麼設備如何比這樣做第一(市場)的簽名更安全的本地驗證第二簽名?

我錯過了什麼?

更新: @alf正確地指出,如果該服務器還負責提供購買的內容和簽名驗證的服務器上執行,那麼即使攻擊者妥協的應用程序,服務器將無法實現購買的內容通過應用內結算。這是微不足道的,而且很好理解。

我沒有原來提的是,我實際上指的是其中服務器不提供任何內容而只是驗證簽名,從而使應用程序可以決定是否解鎖某些功能的情景。在這種情況下,遠程服務器簽名驗證在應用程序內的優點是什麼?

+0

我也想知道,如果在實現應用內付費時真正需要服務器簽名檢查才能解鎖功能。你的發現是什麼? – 2014-09-15 19:09:13

回答

3

這是不是更容易被攻擊者攔截和修改?

如果您使用SSL與服務器進行通信,它們將無法攔截並更改回復。 SSL還會驗證服務器的身份,因此您確定您正在與自己的服務器通話,而不是攻擊者的通話。

至於爲什麼在服務器上執行簽名驗證,原文檔註釋的想法是,如果你這樣做的客戶端,你需要存儲在應用程序中的公共密鑰。攻擊者可能會將密鑰與自己交換,攻擊者生成的簽名將驗證OK。您可以通過在服務器上進行驗證來避免這種情況。但是,真實生成的破解工具(如AntiLVL)只會查找返回true/false的字節碼,並將其修改爲始終返回true

+0

而這個所謂的[「聰明的SSL證書欺騙」](http://techcrunch.com/2011/11/14/siri-cracked-open-theoretically-opening-it-up-to-other-devices-or -even-android /)似乎沒有任何形式的驗證,甚至沒有通過SSL的服務器... – 2012-03-05 05:04:48

+0

沒有什麼特別的 - 這只是DNS欺騙。這可以在受控的實驗室環境中輕鬆完成,但在真實的互聯網上並不重要。尤其適用於各大網站。 – 2012-03-05 05:11:26

2

因爲您可以控制服務器上的驗證碼。設備端的代碼可能已被泄露。

+3

但是在設備上檢查「true/false」的代碼也可能被破壞......我錯過了什麼? – 2012-01-09 21:38:36

2

如果您沒有在服務器上執行簽名驗證,攻擊者將不會打擾您的設備。或者,如果他願意,他可以下載你的應用,反編譯它,然後刪除驗證。你會對更改的應用程序做什麼?

+0

即使我在服務器上執行簽名驗證,攻擊者也可以反編譯應用程序,只是刪除與服務器通信的部分以獲取驗證結果。我會對此做什麼? – 2012-01-09 21:43:41

+2

在這種情況下,攻擊者不會獲得服務器負責提供的寶貴內容。假定Android Market服務器是可信的(ha!),您的服務器是可信的,但您無法控制應用程序。 – alf 2012-01-09 21:54:50

+0

在這種情況下,你是對的,當然。我忘了提及我在談論使用應用內結算來解鎖功能,而不是提供內容。你可以參考這種情況嗎? +2現在。 – 2012-01-09 22:04:37