(半)在Flash/PHP遊戲中獲得高分的建議




actionscript-3 actionscript (5)

...我已經在這裡讀了一些討論過各種方法的線程,只是想找一些我們提出的解決方案的反饋意見。 在其中的一個線程發表評論,推荐一個公共/私人密鑰聽起來很棒,這就是我們正在想的...

客戶端 - 1.密鑰存儲在使用第三方工具加密的Flash swf中。 2.高分與高分值散列(EX:md5('ourSecretKey'+ 200))3.該值通過AMF發送到服務器上的PHP腳本以及高分(200)

服務器端 - 1.服務器接收數據並散列傳遞的高分(200)密鑰(存儲在服務器上的'ourSecretKey'以及Flash),並檢查傳遞的哈希值是否匹配,允許高分進入,否則失敗。

我知道這不是一個萬無一失的解決方案,但這是可以接受的嗎? 我的意思是這將是一個簡單的在線Flash遊戲高分的形式足夠的安全性? 思考?

先謝謝你!


對於一個可笑的短值(即:值<64個字符),由於彩虹表攻擊,MD5作為散列變得無效,並且由於您發送的值將通過線路共享,所以他們所要做的就是蠻力共享的秘密(他們有一個已知的產品可以使用)

因此,那不是公鑰私鑰。 它親密的共享秘密。

另外,請記住,這個共享的秘密將在您發送給用戶的閃存文件中,這些日子被輕易地拆解,然後你的“秘密”就不再是秘密了。

你需要一個適當的加密簽名的更多的挑戰 - 響應機制,從服務器為每個遊戲分配一個新的簽名密鑰,並且多個分數不能用同一個簽名密鑰提交。 (為了得到額外的保護;))

  1. 用戶開始遊戲。 簽名密鑰被請求。 (標誌密鑰是由他們不能訪問的另一個密鑰產生的)。
  2. 分數用符號鍵簽名,然後發送
  3. 您使用您發送的密鑰驗證標誌的價值。
  4. 您放棄您發送給他們的標誌密鑰。

但是,您仍然無法防止實際打分系統被篡改。 有人足夠聰明,可以逆向工程你的SWF對象,並註入新的代碼,只是將分數設置為他們選擇的值。


Blockquote最後,我只是對你選擇的散列算法發表評論:對於那些仍然生活在九十年代的人來說,MD5是一個很好的散列算法。 對於我們其他人,我推薦SHA-2或至少SHA-1。

巴我知道我應該提到SHA而不是:)

如果我使用類似於swf加密應用程序來加密swf代碼,那麼至少使存儲在Flash中的密鑰變得難上加難呢? 我想如果沒有這個密鑰(或者至少不容易),找出正在被用於生成發送到服務器的散列的東西將是一個巨大的痛苦。

像這樣的東西是我想到的: SWF加密

再次感謝大家的答复,這非常有幫助。 哦,這只是一個客戶發給客戶的簡單的Flash遊戲,有趣的是在假期工作的時間。


肯特提到,我沒有看到使用這個解決方案的好處。 作為客戶端,我可以請求服務器端創建密鑰。 好吧,我不能多次使用它,但我不必...每次我需要一個我只是要求它。

  1. 所以我要求鑰匙
  2. 做我自己的高分
  3. 使用密鑰哈希高分。
  4. 發送高分到服務器
  5. 服務器使用提交的密鑰來獲得高分。

相當困難的解決方案8)。

我曾經這樣實現過這個系統。 雖然它沒有為每場比賽的工作...

你應該在服務器上重放遊戲。 當用戶玩 - 你存儲“狀態改變”,然後簡單地餵給你游戲在某種“重放”模式。


你的問題的答案是,這取決於。 這主要取決於遊戲的估計受歡迎程度。

從安全角度來看,您的解決方案與以明文方式發送高分一樣安全。 你在這裡所做的就是默默無聞的安全,根據你所聽到的人,在某些情況下可能會有好處。 在這種情況下,可能Joe的普通用戶不可能自己破解它。 對於任何一個擁有一些技巧的人來說,你都可以用明文形式發送它。 如果你想要阻止Joe,那麼這可能就足夠了,至少在有人為Joe創建一個假的客戶端的時候(這取決於你的遊戲的流行度,可能需要幾天時間才能完成)或者更快哇))。

更好的解決方案是@Kent Fredric給出的解決方案。 然而,正如它所說,它不能解決有人創造假客戶的問題。 解決方案可能是這樣的:

  1. 給予玩家每一個動作都可以執行的動作。
  2. 存儲玩家在ID列表中執行的每一個動作。
  3. 當遊戲結束時,將得分和動作列表進行散列,並使用從服務器接收到的公鑰對其進行加密。 (詳情請見Kent Fredric的文章)
  4. 將加密的散列(通常稱為數字簽名)與評分執行的操作列表一起發送到服務器。
  5. 讓服務器根據列表中的動作“玩”遊戲。
  6. 確認達到了相同的分數。
  7. 驗證數字簽名是否正確。
  8. 更新服務器高分列表。

這將保證兩件事情:

  1. 得分來自正確的客戶。
  2. 關於比賽的比分是正確的。

但是這個方案還有一個嚴重的缺陷。 沒有辦法知道這個遊戲實際上是在玩。 如果客戶受到威脅,這個列表可能只是一個發送給服務器的“完美遊戲”的預設。 直接篡改評分系統是不可能的,但只要有足夠的努力,人們很可能會創建一個包含“完美遊戲”的行為列表。

然而,它比肯特弗雷德里克的職位使用解決方案提供了更強的保證。 解決整個問題意味著你必須以某種方式驗證客戶端。 這是非常困難的,因為這樣做的大多數方式很容易規避。

最後,我只是對你選擇的哈希算法發表評論:對於那些仍然生活在九十年代的人來說,MD5是一個很好的哈希算法。 對於我們其他人,我推薦SHA-2或至少SHA-1。





actionscript