簡體   English   中英

驗證該消息來自特定的應用程序/端點

[英]Verifying that message came from a specific app/end point

我正在嘗試構建一個安全的系統,用於將數據從客戶端Android應用程序傳輸到運行PHP的Web服務器。

我想要做的是確保系統在加密方面是安全的,這樣來自應用程序的消息可以被驗證為實際來自應用程序本身,而不是來自可能編寫自定義腳本的狡猾用戶或者使用cURL來游戲系統。

這種驗證有很多用例,例如: -

  • 如果某個應用包含您從中收集指標的廣告,您可能需要驗證是否從應用發送了點擊數據,而不是來自已經發現您的API並發送虛擬數據的惡意用戶。

  • 該應用可能會進行多項選擇調查,您可能希望確保從應用中收集調查結果。

  • 該應用程序正在收集GPS跟蹤,您希望確保從應用程序本身發送數據。

在每種情況下,您都希望確保消息的來源是應用程序本身,而不僅僅是運行簡單腳本來偽造數據的用戶。

我考慮過的一些想法: -

  • SSL - 適用於保護通道和防止篡改(滿足某些要求),但仍無法確保數據源的完整性。

  • 公鑰加密 - 客戶端應用程序可以使用私鑰加密數據,然后將其傳輸到可以解碼的服務器。 問題是私鑰需要在應用程序內進行硬編碼 - 應用程序可以被反編譯並提取私鑰然后用於發送虛假數據。

  • 自制算法 - 這里有一個非常類似的問題, 這里的解決方案只有在“有人找出你的算法”之后才能工作 - 即不是一個好的解決方案!

  • 哈希鏈 - 這似乎是一種非常有趣的方式,使用一次性密鑰來驗證從客戶端到服務器的每個數據負載,但同樣依賴於應用程序本身沒有被反編譯,因為密碼仍然需要由應用程序存儲。

我對密碼學的了解有限,這讓我覺得理論上建立一個完全可以用這種方式驗證的系統實際上是不可能的 ,因為如果我們不能信任最終客戶或渠道,那么沒有什么可以作為任何信任的基礎。但是也許我忽略了一些東西!

這並不難,你只需要驗證應用程序。 您可以使用簡單的用戶和密碼(通過SSL)或使用客戶端身份驗證來執行此操作。 在這兩種情況下,憑據都需要在應用程序中,攻擊者可以提取它們並模擬應用程序。 你必須離開它,並可能實施一些方法來緩解它。

您還可以通過使用非對稱密鑰(RSA等)或對稱密鑰(HMAC等)對消息進行簽名來對消息進行身份驗證。 隨機數有助於重放,有人捕獲有效簽名的郵件並一次又一次地將其發送到您的服務器。 根據您的協議,使用一個協議的開銷可能太大。

為了保護憑證,您可以讓客戶端生成憑證並將其保存在系統KeyStore ,盡管公共API不太支持它,請參閱此處了解一些詳細信息。 當然,這需要一個額外的步驟,您需要將生成的憑據(例如,公鑰)安全地發送到您的服務器,這可能很難正確實施。

無論你做什么,都不要試圖發明自己的加密算法或協議,使用既定的加密算法或協議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM