我一直在致力于安全游戏的P2P架构,并且已将问题分为五个子问题:
- 非法修改发送的游戏状态
- 准确掉落作弊者
- 同意游戏状态
- 避免“前瞻”作弊
- 隐藏对手的敏感信息
我几乎解决了前四个问题,但我遇到的是最后一个问题。
在详细介绍之前,我只想问一下在建立“防欺诈” p2p网络列表中是否缺少任何内容。我对诸如使用aimbots之类的作弊方式不感兴趣,仅对使p2p网络像集中式服务器一样安全不感兴趣。
因此,到目前为止,在隐藏敏感信息方面,我一直专注于游戏中玩家的位置,在这种情况下,对手的位置并不总是应该知道的。然后,问题就变成了如何确定是否应该在不知道对手位置的情况下将位置发送给对手。
我已经排除了诸如对手发送多个错误位置供您比较您的错误位置之类的方法,因为您的对手很容易滥用这样的系统,因为如果其中一个错误位置碰巧从您的位置“可见”,他就会获得您的位置。
我一直专注于一种方法,在这种方法中,您会收到对手的“视野”,从而可以确定您是否应该发送职位。但是,这在英雄联盟之类的游戏中是个问题,在该游戏中,对手的视野也是高度敏感的信息。我试图通过使用奇异矩阵变换视野来解决此问题,这意味着您不能从视野的变换版本返回原始版本,但是由于它是线性变换,因此您仍然可以弄清楚您的位置是否在内部视界与否。
但是,这并不完美,转换后无法恢复确切的视场,但是可以获取有关视场中“坡度”的信息(视场由多条线构成,并且可以确定每条线的斜率)修复后,可以用于相对便宜地重建原始视野。
从本质上讲,我需要的是一个可以确定某个位置是否“可见”的函数,并且重建此函数/视野必须在计算上如此严格,以至于一旦完成重建视野,它就不再与游戏进行中。有没有超级聪明的人碰巧知道这种方法?
Edit People对整个“视觉领域”感到有些困惑,因此我打算在这里给出更详细的解释。视野由一组线组组成,您只需检查您的位置在线的哪一侧,即可轻松检查某个位置是否在这些组中,如果您知道该组中所有线的位置在同一侧它在那个小组内部,因此在视野之内。
但是,发送的信息不是此行,而是行的变换和变换(矩阵乘以2 x 2),您仍然可以通过使用接收到的变换首先对其进行变换,以检查位置在行的哪一侧并将该值与转换后的行进行比较。这里的关键是变换是奇异的,这意味着不可能找到逆向返回到原始行。但是,可以通过仅检查变换后的线的哪一侧位于许多点上,直到精确地确定了直线的原点,比不知道的计算便宜得多,从而确定使直线重构的直线的斜率线的斜率。
我正在寻找一种确定点是否在区域内的方法,根据该方法无法重建该区域(我怀疑这种方法存在,因为您总是可以对其进行暴力破解),或者计算量很大。