2012-03-04 63 views
0

我正在使用權威服務器進行遊戲,其中服務器和客戶端之間的所有通信均通過HTTP進行。我試圖弄清楚我提出的處理用戶註冊,身份驗證和會話的方式是否安全。用戶註冊,認證和會話管理的建議是否安全?

服務器的公鑰是硬編碼在客戶端上。要註冊,用戶輸入用戶名和密碼。消息被髮送到服務器,明文用戶ID和密碼用服務器的公鑰加密。服務器用其私鑰解密密碼,並且如果用戶不在數據庫中,則存儲用戶ID和密碼的單向散列。

進行身份驗證,客戶端產生一個密鑰,並將所述服務器的消息中的明文的用戶ID和與該服務器的公共密鑰加密的密鑰和密碼。服務器通過使用其私鑰解密密碼和密鑰並將密碼的單向散列與該用戶的存儲散列進行比較來驗證用戶。如果兩個哈希匹配,則服務器將建立一個「會話」,在該會話中,客戶端的進一步通信將通過共享密鑰進行驗證。

要認證之後發送消息,客戶端發送的用戶ID,與該共享密鑰加密的有效載荷,並將該數據的校驗和。服務器嘗試使用共享密鑰解密數據,如果結果數據與校驗和匹配,則處理該消息。

+0

我可以問你爲什麼不只是使用SSL?法律原因? – 2012-03-04 00:08:45

+0

我至少會在存儲在服務器上的密碼散列中添加salt以防止出現彩虹表。 – 2012-03-04 00:15:51

回答

1

這似乎是重新發明輪子。爲什麼不使用SSL?

提供一些答案,原來question-在很大程度上取決於你的「安全」的定義。如果服務器可能被盜用,並且私鑰被盜,則不安全。如果您使用的公鑰/私鑰算法不夠強大,則不安全。如果用於會話數據的共享密鑰可以猜到或以其他方式損害,它是不安全的,等等

+0

我正在使用Unity3D作爲客戶端,這是一種專有遊戲引擎,它只提供不受支持HTTPS的有限HTTP GET/POST界面。 – 2012-03-04 00:56:00

+0

@davidwayes,SSL隧道如何? – 2012-03-07 07:38:34