2014-11-06 63 views
0

我在寫我的第一個遊戲登錄系統。決定SRP並已成功實施該交互。客戶端和服務器現在具有相同的會話密鑰。我如何使用它們?SRP會話密鑰的使用示例

關於它的所有信息都表示它可以用於加密通信,但我還沒有找到一個說明如何。

SRP在認證過程中交換會話密鑰。這個鍵可以用來將用戶的登錄會話進行加密...

http://srp.stanford.edu/advantages.html

所建立的會話密鑰「S」可以用於加密客戶端和服務器之間的進一步溝通。

http://connect2id.com/products/nimbus-srp

有什麼選擇這裏,什麼是好辦法嗎? AES?

謝謝!

+0

你的報價不適合你的鏈接提供。文本無處可查。請解決這個問題。也沒有特定的編程相關問題,這似乎更適合[Crypto.SE](http://crypto.stackexchange.com/)。 – 2014-11-06 08:36:20

+0

修正了斯坦福報價,其他人都沒問題。 – douggard 2014-11-06 14:04:08

回答

1

我會不是建議您使用SRP登錄,然後使用共享的SRP會話密鑰自己執行數據傳輸加密。使用開箱即用的庫和詳細記錄的配置(例如自簽名證書)可以更安全,更容易地使用常規TSL。然後,在加密連接的頂部用SRP作爲密碼證明登錄用戶,完成。

如果您確實想要按照您的建議進行操作,那麼您選擇的對稱加密算法將基於性能開銷和算法的已知優勢/弱點。 AES非常強大但非常昂貴。如果你在磁盤上加密文件,你想保持安全,你想使用一個非常強大的密碼。遊戲流量很少需要受到保護以防止延長的離線攻擊;通常遊戲的結果是公開的,遊戲結束後數小時內解密的遊戲沒有價值。在這種情況下,您可以使用非常便宜的stream cypher來保護流量。

作爲例子,你可以考慮ISAAC這是如此快速和便宜,它也被用作隨機數發生器。這意味着您可以在幾乎所有語言include browser javascript中查找實現。您將使用SRP共享密鑰在客戶端和服務器上對Isaac生成器的初始狀態進行播種。然後,對於要發送的每個32位數據,您將採用下一個Isaac 32位僞隨機數,並對數據進行XOR併發送該數據。在另一端,您與下一個Isaac 32位僞隨機進行異或運算以恢復原始數據。任何偵聽數據包的人都沒有來自SRP共享密鑰的Isaac種子,因此他們無法解碼加擾的數據。 Isaac需要256 x 32位字作爲其初始狀態,SRP密鑰只需8 x 32位字(如果您使用SHA256作爲SRP散列算法)。這意味着你需要拉伸你的SRP鍵,否則重複32次以製造艾薩克種子。可以應用密鑰擴展算法(如PBKDF2)擴展SRP密鑰以填充初始艾薩克表。這應該是「足夠好」,以保護遊戲免受「實時」窺探。 (編輯:遞歸散列鍵32倍以產生以撒種子另一個想法。)

再次我不會建議上述方法;我建議使用標準的TLS/HTTPS來加密連接,然後使用SRP作爲密碼驗證來驗證用戶身份,並通過初始加密連接發送所有流量。

編輯有上介紹的分配密碼學課程打破Vigenère cipher像上面使用的每個字母出現在加密的文本有足夠大的車身的概率的。所以,你應該壓縮數據你但是實際上這告訴我們「從不寫你自己的加密」,因爲你可能錯過了可能的攻擊,只能使用專業同行評審的代碼,如TSL。)