SRP会话密钥的示例用法

时间:2014-11-06 06:58:35

标签: session encryption srp-protocol

我正在为游戏编写我的第一个登录系统。决定使用SRP并成功实现了这种交互。客户端和服务器现在具有相同的会话密钥。我该如何使用它们?

有关它的所有信息都表明它可以用于加密通信,但我还没有找到一个说明如何的信息。

  

SRP在身份验证过程中交换会话密钥。此密钥可用于加密用户的登录会话...

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

  

建立的会话密钥“S”可用于加密客户端和服务器之间的进一步通信。

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

这里有什么选择,有什么好的选择? AES?

谢谢!

1 个答案:

答案 0 :(得分:1)

建议您使用SRP登录,然后使用共享SRP会话密钥自行执行数据传输加密。使用开箱即用的库和记录良好的配置(例如自签名证书)来使用常规TSL会更安全,更容易。然后在该加密连接的顶部登录用户使用SRP作为密码证明,您就完成了。

如果您真的想要按照您的建议行事,那么您选择的对称加密算法将基于性能开销与算法的已知优势/劣势。 AES非常强大但非常昂贵。如果您要加密磁盘上的文件,您希望保持安全,那么您希望使用非常强大的密码。很少需要保护游戏流量免受扩展的离线攻击;典型地,游戏的结果是公开的,并且在游戏结束后几小时解密的游戏的痕迹没有价值。在这种情况下,您可以使用非常便宜的stream cypher来保护流量。

举例来说,你可以考虑ISAAC,这是如此之快和便宜,它也被用作随机数发生器。这意味着您可以在几乎所有语言include browser javascript中找到实现。您将使用SRP共享密钥在客户端和服务器上播种Isaac生成器的初始状态。然后,对于要传输的每32位数据,您将获取下一个Isaac 32位伪随机数并对数据进行异或并发送。在另一端,您使用下一个Isaac 32位伪随机异或来恢复原始数据。任何窥探数据包的人都没有来自SRP共享密钥的Isaac种子,因此他们无法解码加扰数据。 Isaac需要256 x 32位字作为其初始状态,而SRP密钥只需要8 x 32位字(如果您使用SHA256作为SRP散列算法)。这意味着您需要拉伸SRP键,否则重复32次以制作Isaac种子。可以应用诸如PBKDF2的密钥拉伸算法来扩展SRP密钥以填充初始Isaac表。那应该是#34;足够好"保护游戏免受"实时"窥探。 (编辑:将密钥递归散列32次以生成isaac种子是另一个想法。)

我再也不建议采用上述方法;我建议使用标准TLS / HTTPS加密连接,然后使用SRP作为密码证明,仅对用户进行身份验证,并通过初始加密连接发送所有流量。

编辑在加密课程简介中有一项作业,可以使用出现在足够大的加密文本中的每个字母的概率来打破上面的Vigenère cipher {{3}}。所以你应该在加密之前压缩你发送的数据。然而,这真的告诉我们的是#34;永远不要写自己的加密"因为你可能错过了可能的攻击只使用专业的同行评审代码,如TSL。 )