我正在开发一个客户端<>服务器多人游戏。身份验证在与所有游戏逻辑等相同的服务器上完成。这意味着我的身份验证密码加密算法不会花费太多的计算时间,因为它会延迟所有其他所需的操作。如果许多人同时登录,那么在使用非常强大的加密算法时会导致明显的延迟,这需要花费大量时间来处理。
这就是我寻找平衡的原因:加密算法仍然可靠且不易破解但速度足以在同一台服务器上执行。你推荐什么?
答案 0 :(得分:7)
首先,要执行身份验证,您不需要“加密”密码;存储加密密码会使您的用户面临风险,我强烈反对。由于用户无知,他们可能会为自己的银行帐户和游戏使用相同的密码。通过妥善保管密码帮助他们保持安全。
相反,存储密码的不可逆“哈希”和随机“盐”。关于如何在StackOverflow上执行此操作有很多问题,他们的几个答案几乎是正确的。
您问题的一个独特之处在于您特别关注身份验证过程的性能。这是一个有趣的问题,因为一个好的密码保护方案实际上设计得有点慢。这是为了打败一个试图在“离线”攻击中猜测密码的攻击者,他可以在那里测试数十亿个密码。算法越慢,他的尝试次数就越少。
我建议用于保护密码的算法实际上是一种称为PBKDF2的密钥派生算法(PBKDF1也可以使用),这在PKCS#5中有描述。这些算法的调整参数之一是多次迭代。您可以在服务器上分析算法,并调整迭代次数,直到找到满足性能要求的数字。即便我的笔记本电脑也可以每秒执行数千次迭代,所以我可能从大约2000年开始,然后在那里工作。
如果您实际上在谈论加密客户端和服务器之间的所有流量,请使用AES。它被选中是因为它的速度,即使竞争中的其他一些密码可能更安全。具体而言,在SSL连接中使用AES密码套件。
安全连接的费用是在建立会话时发生的密钥协议(或密钥传输)。正在进行的加密(和消息完整性计算)增加了很少的开销。
答案 1 :(得分:1)
实际上,正确使用的任何AES强度都可能适合您的需求。 You can also purchase a hardward card to radically accelerate AES.