2014-01-29 15 views
4

在我們的應用程序中,我們有幾個API密鑰(又名共享或私人密鑰)。那些是需要運行時除了我/我的組織之外,這些字符串永遠不會落入任何其他人的手中,這一點至關重要。編寫/提交iOS應用程序,字符串/文本應該永遠達不到黑客

嘗試1 - 什麼也不做

NSString *privateKey = @"a6dedb6096973e4576e1dfc9d048075d; 

如果任何人得到這個應用程序的手,並得到通過簽訂-東西,他們可以運行二進制strings,容易retreive所有字符串。 (FAIL)

嘗試2 - 做一些聰明

這是你的StackOverflow,你們是最棒的。給我看一些魔法!

+0

拆分/混淆密鑰 – Volker

+1

這是一個棘手的問題,沒有簡單的解決方案。我過去使用的一種解決方案是建立一個單獨的,專用的內部Web服務器,其唯一目的是(a)存儲私鑰,並且(b)提供內部Web服務(在PHP中使用簡單的CURL調用)用私鑰執行任何必要的功能。只有允許訪問私鑰的用戶才允許訪問* this *服務器上的源代碼。 –

+1

如果鑰匙從不落入其他人的手中至關重要,那麼沒有安全的方式來分配他們,你應該找出一種不同的方式來實現你的目標。通過默默無聞的安全(正如Volker所建議的)根本就沒有安全保障。 如果問題的關鍵是通過Internet訪問服務,那麼根本無法保護它。任何人都可以從您的應用程序中嗅探網絡流量,以確定使用的密鑰。 對於您希望保護的密鑰的使用情況,您尚未提供足夠的信息,以便更詳細地解答您的困境。 –

回答

0

我們爲Crystal Shuffle的私人Facebook訪問密鑰做了什麼,我們將密鑰隱藏在Web服務上。 iOS應用程序將打到該服務以獲得服務可以獲得的答案,因爲它擁有密鑰。

據我所知,沒有安全的方法將密鑰包含在應用程序本身中。

1

爲什麼每個應用程序副本都使用相同的私鑰?

發送數據: 如果您的應用程序需要將信息發送到您的服務器,它只需要您的公鑰來加密數據。

接收數據(這是棘手的地方): 當應用程序安裝在用戶的設備上時,它應該生成它自己的私鑰/公鑰對。然後它將公鑰發送到您的服務器。 (往上看)。然後,無論何時服務器需要將數據發送回設備,它都會使用設備的公鑰來加密所述數據。因此只有該設備才能解密數據。

問題是,如果你在應用程序中輸入一個知道的私鑰有什麼意義。

相關問題