首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏流量加密AES CTR + HMAC

游戏流量加密AES CTR + HMAC
EN

Cryptography用户
提问于 2013-12-15 05:02:11
回答 2查看 911关注 0票数 1

我被要求在游戏服务器和客户端之间实现流量加密。目前,通信是不加密的任何方式,这让玩家使用欺骗来监听流量,以获得有关的信息的对手的位置。

流量数据包很小(50-70字节),开发人员还没有准备好进行大开销的加密。

会话启动后,客户端通过https与服务器进行通信;此时,我们可以发送一个秘密密钥。我们认为玩家将无法通过从内存中提取这个密钥,或者以某种方式获得这个密钥。

在CTR模式下的AES将用于流量加密。带有密钥的快速散列函数将用于身份验证。标记将使用4-6字节(而不是16字节)。

这种实现有多安全?哪个哈希函数更适合使用?对于哈希函数和AES,我们可以使用相同的密钥吗?

EN

回答 2

Cryptography用户

发布于 2013-12-15 08:03:08

我们认为玩家将无法通过从内存中提取这个密钥,或者以某种方式获得这个密钥。

原谅我,但我很怀疑。如果你真的想出了办法来做到这一点--而且很多资金充足的,聪明的人已经尝试过,但失败了--我建议你给它打个专利,并从许可费中赚取数百万美元。

这种实现有多安全?

不管你最后做了什么,关键可能是薄弱环节。或者,攻击者可能会尝试从内存中读取解密数据包,而不是从密钥中读取。

我假设当您说“带有密钥的快速散列函数将用于身份验证”时,您的意思是您将使用HMAC进行身份验证。如果你有别的意思,请澄清。

使用HMAC和CTR是一种很好的方法。只需确保认证密文(“加密-然后-MAC”),而不是明文( "MAC -然后-加密“或”MAC和加密“)。

然而,真正的魔鬼在于细节。您已经对您的方法进行了全面的概述,而不是一个特定的算法/协议,也没有一个实现。这两种过渡都有出错的可能。例如,您的协议会防止重放攻击吗?您的实现会安全地生成CTR非CTR吗?

标记将使用4-6字节(而不是16字节)。

我不会用这么短的标签来保护金融数据,但对于一个游戏来说,这可能是好的。

哪个哈希函数更适合使用?

这取决于你对“更好”的定义。沙-2可能是最安全的。沙一可能已经足够安全了。HMAC-MD5还没有损坏,但是通常不推荐使用它,因为MD5已经坏了。另一方面,如果“更好”的定义包括性能,而不是使用MD5可能值得承担安全风险(考虑到您所保护的信息相对较低的风险)。

对于哈希函数和AES,我们可以使用相同的密钥吗?

别这么做。这可能不会直接导致任何明显的攻击,但是密钥重用通常会激怒密码神,因为它违反了密码家在设计这些算法时所做的关键假设(heh)。这相当于对缓冲区不做任何边界检查。(如果您稍后转而使用类似CBC之类的方法进行身份验证,那么密钥恢复将是一个明显的问题。)

如果由于任何原因传送两个键是有问题的,您可以通过这样的操作从主键中安全地派生密钥:

代码语言:javascript
复制
encryption_key = HMAC-SHA1(master_key, "Encryption key")
authentication_key = HMAC-SHA1(master_key, "Authentication key")

几个建议.

  1. 这不是您问题的一部分,但我建议使用专门的经过身份验证的加密方案,如GCM (galois计数器模式),而不是单独的MAC和加密算法(如HMAC-SHA1和CTR)。这样做将防止一些常见的实现错误,同时很可能提高性能。
  2. 不管您是使用HMAC还是GCM,都要考虑使用“关联数据”(有时称为“附加身份验证数据”)。这里的想法是,如果有不需要加密的数据(即,对玩家保密),但仍然需要进行身份验证(也就是说,不应该允许玩家篡改它),那么就没有必要吃掉加密的性能成本。提供GCM的密码库可能会使用一个包含一系列关联数据的可选参数。
票数 2
EN

Cryptography用户

发布于 2013-12-15 11:14:10

SipHash很适合低数据量和小标签的使用。

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/12325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档