2010-08-09 32 views
6

我需要從我的iPhone應用程序發送數據到我的網絡服務器,然後返回。爲了安全地做到這一點,我使用了一種加密算法。它需要服務器和用戶都必須知道的密鑰,以便可以進行解密。我在考慮在我的應用程序和服務器上使用一個簡單的靜態字符串作爲鍵,但後來我記得編譯的代碼仍然可以反彙編和查看,但只能在一定程度上。可以發現已編譯的Obj-C應用程序中的「祕密」字符串嗎?

那麼,通過在我的應用程序的源代碼中放置加密方法和「祕密」字符串會有多安全?有沒有其他方法可以安全地完成應用程序和服務器之間的通信?

謝謝。

回答

6

是的,它可以很容易找到。在您的可執行文件上運行strings程序,您可能會找到它。此外,您的程序中的任何內容都可以「找到」,因爲它必須開放閱讀。

使用SSL進行安全連接。它使用非對稱加密,這意味着加密數據的密鑰與解密該密鑰所需的密鑰不同。這樣,即使攻擊者找到你的加密密鑰,他們仍然不能用它來解碼。所有主要的HTTP服務器和客戶端庫都支持HTTPS,這就是它所做的。

+0

感謝,SSL看起來像是最簡單的實現,但最安全的方式,看看如何不對稱算法工作... – pop850 2010-08-09 21:04:43

+0

是否有可能在應用程序運行時黑客轉儲interned字符串?如果是這樣,是否有辦法防止這樣做? – vinnybad 2016-02-23 21:50:59

+0

@vinnybad,通常可以轉儲程序的所有內存並對其進行掃描,並且無法以某種方式阻止它。 – zneak 2016-02-24 03:18:40

4

你認爲這是什麼「一定程度上」?應用程序包含的每條指令和每條數據都可以查看。此外,爲每個設備使用相同的密鑰是加密精神的終極目標。

只需使用HTTPS。 SSL/TLS是內置於每個主要HTTP服務器和每個主要HTTP客戶端庫的安全,成熟的技術。

2

您使用對稱算法。如果你需要高度的安全性,也許你應該考慮採用不對稱的方法。這樣,您甚至可以在每個會話中重新創建密鑰,並且只需要交換公鑰。

這裏是一些例子:

  • RSA
  • 的Diffie-Hellman
  • 的ElGamal
  • ECDSA
  • XTR
0

正如其他人說,你提出了什麼完全不安全。如果有人關心你的應用,他們會在發佈後10分鐘內在互聯網上發佈密鑰。你需要研究

事情是:

  1. 不對稱加密算法
  2. Diffie-Hellman密鑰交換

(注意 - 我不是說這些都是解決您的問題,但瞭解他們會教育你在涉及的問題,並更好地爲你準備選擇一個解決方案)

在一個額外的筆記,爲什麼你不能只使用一個HTTPS連接?

最後,如果這種加密方案正在保護關鍵數據,那麼你很可能會聘請一位顧問來幫助你,因爲作爲這個主題的新手,你一定會犯下基本的錯誤。

1

iOS擁有Keychain Services,用於安全地(相對)輕鬆地存儲加密密鑰等內容。檢出Keychain Services Programming

您可能需要的所有加密API也可用於libSystem中包含的CommonCrypto庫。簡而言之,當涉及到保護你的iOS應用程序時,沒有必要採取捷徑。

相關問題