2

我正在構建客戶端/服務器iPhone遊戲,我想讓第三方客戶端訪問服務器。這有兩個原因:第一,我的收入模式是出售客戶並放棄服務,第二,我想避免促進作弊的客戶激增。限制訪問服務器到iPhone應用程序

我寫在上的服務器的第一個版本,但我考慮轉移到二郎在一些點。

我正在考慮兩種方法:

  1. 生成一個「用戶名」(比如,一個GUID),並隨應用一個祕密散列它(SHA256或MD5),並將結果作爲密碼」。當客戶端連接到服務器時,兩者都通過https通過HTTP基本身份驗證發送。服務器使用相同的密碼散列用戶名,並確保它們匹配。

  2. 船舶與iPhone應用程序客戶端證書。服務器被配置爲要求客戶端證書存在。

第一種方法的優點是簡單,開銷低,並且可能更容易混淆應用程序中的祕密。

第二種方法以及測試和驗證,但可能是更高的開銷。然而,我對客戶證書的瞭解在「在達美航空機上雜誌」層面上閱讀。這會帶來多少帶寬和處理開銷?每個請求傳輸的實際數據大約爲千字節。

回答

0

有遊戲的用戶通過OAuth與他們的帳戶進行身份驗證,授權他們讓你的服務器上的遊戲狀態的變化。

如果你不能管理對用戶進行認證,你需要以某種方式驗證您的遊戲應用實例。將認證證書嵌入二進制文件中是一個壞主意,因爲應用程序盜版流行,並且會使您的方法非常不安全。我對how to limit Apple iPhone application piracy的SO問題可能對其他方面有用。

+0

我試圖消除「帳戶」的概念儘可能用戶擔心。他們只會通過我的應用訪問遊戲,所以我不想讓他們挑選可能已經被使用的用戶名和密碼可能很弱。 – 2009-12-17 00:48:56

+0

該鏈接贏得您的「回答」的信用。 – 2009-12-17 02:58:14

2

你的對手是誰?這兩種方法都無法阻止應用程序的破解副本連接到服務器。我認爲這是iPhone遊戲(或一般)開發付費應用程序最常見的問題。

然而,這可以保護其他非iPhone客戶端的服務器,因爲它阻礙了程序員逆向工程iPhone和服務器之間的網絡數據包的接口。

+0

好點:查看修改後的問題。在任何情況下,破解的副本將永遠是一個問題 - 希望運行該服務是足夠便宜的,服務於一批不會購買應用程序的人不會真的影響我的底線。 – 2009-12-16 23:45:39

+0

謝謝,我想你已經把我的思想調整得更接近現實:)。 – 2009-12-17 02:58:50

3

沒有辦法是完美的 - 但挑戰/迴應勝於關鍵。

證書應該使用質詢/響應。您發送一個隨機字符串,它使用證書的私鑰對其進行加密,然後將其取回並用公鑰解密。

根據的東西是如何很好地支持在iPhone上,實現東西會是微不足道和挑戰之間。

一個很好的中間道路我用的是異。它比密碼更安全,實施起來微不足道,並且至少需要一兩個小時才能進行破解。

  1. 您的應用程序隨附一個內置的數字(關鍵字)。
  2. 當一個應用程序連接到你,你產生一個隨機數(與密鑰相同的位數),並將其發送到手機
  3. 該應用程序獲取數字,異或與密鑰併發送結果背部。
  4. 在服務器上,您應用導致您的原始隨機數的密鑰返回結果。

這只是輕微的黑客抵抗,但您可以使用其他技術,如每次更新軟件時更改密鑰,隱藏隨機數和其他一些隨機數等等。的技巧來隱藏這一點,但最終黑客會發現它。每次更新更改方法可能會有所幫助。

總之,XOR是一個黑客,但它工作的情況下發送密碼是隻要稍微容易被破解。

XOR和公鑰之間的區別是,XOR是隻監控一個成功的談話很容易恢復,公鑰是(理論上)沒有顯著的資源和時間可逆的。

+1

問題和評論:令牌和祕密級聯的SHA256或MD5不會比XOR更好,而不會更難實現?另外我想使用一個已經被HTTP(s)烘焙的訪問控制系統,這樣我就不需要做任何額外的往返行程(即GET一個令牌,然後做第二個GET來獲取遊戲狀態)。 – 2009-12-17 00:07:57

+0

這會更好,但我不確定它比sendToServer(encryptedValue^key)更容易嗎?我想我使用異或的原因是我不必擁有一個圖書館 - 它只是在我的大腦中,但它不是「好」:) – 2009-12-17 00:57:23

相關問題