2014-06-24 37 views
4

我無法確定以下場景的最佳方法。針對iOS應用的安全設計

  • 我的應用程序發佈到我的web服務。
  • POST URL包括幾個參數,包括設備信息+共享的祕密
  • 將存儲在我的數據庫設備IF共享的祕密是正確

目前,這個共享祕密在應用程序中進行硬編碼,並通過SSL連接到我的Web服務。

這顯然限制了人們發現共享密鑰和濫用我的網絡服務。

但是這種方法並不像我想的那樣安全,因爲解碼我的應用程序等等的可能性和獲得祕密。

有沒有更好的方法來做到這一點,而不是共享祕密方法?

+1

當你允許人們下載你的應用程序並執行它時,你給他們的是目標代碼。因此,任何解決方案都不會完全安全,因爲您必須以某種方式將「祕密」放入程序中,否則程序將無法運行。 –

回答

1

對於本地密鑰,幾乎所有的安全方法都可能被某人以某種方式泄漏。這當然是而不是意味着我們根本不需要付出任何努力。 如果有人下載你的應用程序中可以可能進一步調查由reengineering and or refactoring

但是代碼,如果沒有其他的辦法不是把密鑰您的應用程序中的二進制,你留下了一個()替代方案通常稱爲security through obscurity

有很多方法可以做到這一點,你也許可以找到關於這個話題在互聯網上有很多的討論,所以這裏只是一些想法:

  • 分割的關鍵,多類和整個代碼
  • 僞裝你的字符串鍵,這將可能是一個正常的方式您的應用程序內的關鍵
  • 使用使用
  • 在啓動哈希一些數據或代碼段,並將其包含上述所有一起命名爲
  • 方法

甚至有一些框架像UAObfuscatedString這可能會幫助你實現你的邏輯。

請記住,最好的方法總是到not hardcode a secret key within your apps binary,但不知何故「加載」你的服務器的祕密,例如,計算密鑰...

+0

謝謝亞歷山大。關於你的最後一條評論 - 如果我沒有將密鑰存儲在應用程序二進制文件中,我還能知道訪問我的API的人是安裝了我的應用程序的合法設備....或者使用某些東西的欺騙者像CURL ..?如果可以從服務器檢索祕密,那麼任何設備/ pc /用戶都可以獲得API密鑰... – mmmbaileys

+2

您可以使用用戶註冊,並在用戶成功管理後,與他分享一個祕密(應用程序)。應用程序將密鑰存儲在鑰匙串中。當調用您的「安全API」時,應用程序可能會把密鑰鏈中的祕密密鑰放在授權頭中,該頭將包含設備標識符和一些其他屬性 - 查看使用hmac1_sha的amazon webservice概念:http://docs.aws.amazon.com/AmazonS3/latest/開發/ RESTAuthentication.html – Alexander