不可能的认证情况?提示所需的算法

orl*_*rlp 5 authentication algorithm

情况就是这样:

服务器客户端都可以信任(都在用户的PC上运行).受信任的用户在其计算机上以及客户端上都有一个密钥.该算法的目标是在服务器上将受信任的用户认证为受信任的用户,而不将密钥暴露给服务器.

技术难点:

我们使用的语言(游戏制作者)不是那么快也不精确.我们已经准备好了MD5哈希的实现,但是我和团队都没有能力/有时间实现难以置信的硬加密算法.

Ste*_*sop 3

您也许可以仅使用 MD5 为每台服务器生成一个机密。我不确定这是否正确,所以不要相信我的话。

每个服务器都有一个唯一的ID,该ID可以是公开的,也可以是相同MD5(trusted secret + unique ID)或相似的本地秘密。您必须通过某些外部安全通道将本地机密获取到服务器上,但例如,如果它是通过 HTTPS 与服务器代码一起从单个公司站点下载的,并且如果您确保永远不会将本地机密发送出去一个给定的唯一 ID 多次,那么我认为这是可以的。

然后,服务器可以将其 ID 连同服务器 ID 一起发送给客户端。受信任的客户端可以MD5(trusted secret + unique ID)为自己生成,但不受信任的客户端无法生成。这为服务器和受信任的客户端提供了一个共享密钥,可用于使用(例如)HMAC-MD5 进行身份验证。

如果本地秘密泄露,那么它只会让不受信任的客户端能够愚弄该泄露的服务器,而不是其他服务器。

显然,这有弱点 - 例如,服务器和受信任客户端之间的 MITM 可以对服务器发出的任何挑战提供正确的响应,而无需知道任何秘密。但它不会将客户端的秘密暴露给服务器,也不会将服务器的秘密暴露给客户端,因此总比没有好。

它也有加密方面的弱点——MD5 有点被破坏。如果我是服务器并且我可以找到x这样的MD5(x + my_id) == my_secret,那么很可能x就是密钥。我不知道找到x给定的一个或多个本地秘密在计算上是否可行:这取决于 MD5 当前的损坏程度。

我认为考虑到你的限制,MITM 绝对是不可避免的,尽管我可能是错的。受信任的客户端无法区分一台服务器和另一台服务器,特别是服务器是否正在使用其正确的唯一 ID,因此始终会对 MITM 传递的任何质询给出正确的响应。但是,如果消息包含攻击者无法控制的某些值,例如服务器生成的随机数或日期,那么简单的窃听不会导致重放攻击。我不知道在不使用非对称加密和 PKI 的情况下防止 MITM 的方法,也就是说,您没有时间/能力用您的语言实现不同的基本加密构建块。

可以使系统提供某种类型的密钥撤销。如果您将公司权限设置为按需分发对(random server ID, local secret),那么服务器可以不时更新其本地机密(并同时更改其 ID)。然后,您可以更改可信密钥,服务器将停止对使用旧密钥的客户端进行身份验证,并在下次获得 ID 时立即开始对使用新密钥的客户端进行身份验证。如前所述,这是一个相当痛苦的移交,如果您正在构建这样的计划,您可能希望稍微软化它。