P2P网络隐藏位置?


13

我一直在致力于安全游戏的P2P架构,并且已将问题分为五个子问题:

  • 非法修改发送的游戏状态
  • 准确掉落作弊者
  • 同意游戏状态
  • 避免“前瞻”作弊
  • 隐藏对手的敏感信息

我几乎解决了前四个问题,但我遇到的是最后一个问题。

在详细介绍之前,我只想问一下在建立“防欺诈” p2p网络列表中是否缺少任何内容。我对诸如使用aimbots之类的作弊方式不感兴趣,仅对使p2p网络像集中式服务器一样安全不感兴趣。

因此,到目前为止,在隐藏敏感信息方面,我一直专注于游戏中玩家的位置,在这种情况下,对手的位置并不总是应该知道的。然后,问题就变成了如何确定是否应该在不知道对手位置的情况下将位置发送给对手。

我已经排除了诸如对手发送多个错误位置供您比较您的错误位置之类的方法,因为您的对手很容易滥用这样的系统,因为如果其中一个错误位置碰巧从您的位置“可见”,他就会获得您的位置。

我一直专注于一种方法,在这种方法中,您会收到对手的“视野”,从而可以确定您是否应该发送职位。但是,这在英雄联盟之类的游戏中是个问题,在该游戏中,对手的视野也是高度敏感的信息。我试图通过使用奇异矩阵变换视野来解决此问题,这意味着您不能从视野的变换版本返回原始版本,但是由于它是线性变换,因此您仍然可以弄清楚您的位置是否在内部视界与否。

但是,这并不完美,转换后无法恢复确切的视场,但是可以获取有关视场中“坡度”的信息(视场由多条线构成,并且可以确定每条线的斜率)修复后,可以用于相对便宜地重建原始视野。

从本质上讲,我需要的是一个可以确定某个位置是否“可见”的函数,并且重建此函数/视野必须在计算上如此严格,以至于一旦完成重建视野,它就不再与游戏进行中。有没有超级聪明的人碰巧知道这种方法?

Edit People对整个“视觉领域”感到有些困惑,因此我打算在这里给出更详细的解释。视野由一组线组组成,您只需检查您的位置在线的哪一侧,即可轻松检查某个位置是否在这些组中,如果您知道该组中所有线的位置在同一侧它在那个小组内部,因此在视野之内。

但是,发送的信息不是此行,而是行的变换和变换(矩阵乘以2 x 2),您仍然可以通过使用接收到的变换首先对其进行变换,以检查位置在行的哪一侧并将该值与转换后的行进行比较。这里的关键是变换是奇异的,这意味着不可能找到逆向返回到原始行。但是,可以通过仅检查变换后的线的哪一侧位于许多点上,直到精确地确定了直线的原点,比不知道的计算便宜得多,从而确定使直线重构的直线的斜率线的斜率。

我正在寻找一种确定点是否在区域内的方法,根据该方法无法重建该区域(我怀疑这种方法存在,因为您总是可以对其进行暴力破解),或者计算量很大。


1
我已经花了大约11年的时间专注于这个确切的问题,您列出的前4件事是微不足道的,但是您所提出的问题并不能满足SE的要求。我最终会得到一份白皮书。
MickLH

我认为,这将是非常依赖于你的方式到其他问题
凤凰城

@MickLH解决此问题的最佳方法是什么?:)您如何看待转换后的视觉/互动场?这是您研究的内容吗?
Elon'3

我已经研究了转换后的字段,并证明它是完全不安全的。不管您如何隐藏转换,一个玩家始终可以推断出另一位玩家的位置,因为在一个玩家拥有所有必需的信息之前,两个玩家都无法学到任何东西,这时他们便可以了解另一位玩家的位置,并且可以在不告知其他玩家的情况下终止协议。
MickLH

至于“最佳”方法……我在上面很认真,即使是最简单的方法也是一个复杂的话题,实际上需要整个白皮书来解释。
MickLH

Answers:


1

我认为,即使您对视野有一个不可逆的算法,人们仍然可以通过计算附近的点是否会导致该位置相交而对手的视野相交而获得优势。在较差的情况下(视场与地图的比例足够大),您可以通过消除敌人的精确点的过程来进行计算。

我认为,相反,也许所有连接的对等方都应该宣布他们在地图的哪个部分,以确定他们是否可以看到彼此。如果第3维很重要,请先将地图分成2x2或2x2x2。然后每个人都告诉对方他们是1,0 1,1 0,1还是0,0。如果他们不在同一象限中,则他们的对话将结束,直到下一次检查。这样可以保护他们的确切位置。如果它们存在于同一象限中,则它们会将这个空间分成4个新的象限,并继续进行直到确定它们足够接近以致彼此可以看到为止。

当然,象限的边界存在问题,但是应该可以通过对邻近象限的附加查询来解决。


-1

不要将其作为一个明确的答案,这个话题确实很广泛(如果有人举报您的问题,我将不会感到惊讶)。

您可以通过使用一些玩家作为服务器来解决它,并且当玩家用作服务器时,它不能参与实际上正在玩该服务器的玩家的游戏

如果您的游戏要求不是很高,那么您最好在同一台播放器上运行多台服务器(这很有用,因为由于NAT问题,并不是所有播放器都可以作为服务器运行,谢谢IPv6!)。

这里的主要问题是,由于将随机播放器用作服务器,因此极有可能它将成为“受损”播放器,或者将模拟传递给“受损”播放器,从而允许敏感信息继续传递(好吧,实际上,此时服务器可以发送任意数据并以强制方式赢得胜利。

如果您使用中央服务器来检查授权和登录,则可以允许更好地组织游戏并轻松禁止玩家(但是,这将不再是纯粹的P2P网络)。

您也可以将世界划分为多个切片,然后计算可见切片的哈希值,但这很容易被欺骗,最常见的可见切片将允许您快速构建哈希表。

对我来说,您的问题就像是尝试搜索加密函数。测试应该很快,但是蛮力应该很慢。

我想到的最简单的事情(也与我的工作有关)是使用一些快速视觉识别算法(类似于增强现实)。

如果您设法对位置进行快速“快照”(类似于切片),则只有当放置在可见的物体周围时才能被识别出来,那么您将拥有它。尤其是在地图中存在定时元素的情况下,这些元素可以生成快速抛出的识别模式。

但是,即使这样的算法甚至在移动设备上变得非常快,我也认为对于第一人称射击游戏来说,这些算法还不够快。

另外,如果您将它们设置得太快,您将有假阳性!而且,玩家可以通过任何尝试创建“常见视觉效果”的游戏来创建游戏,以便其中一个视觉效果与特征检测算法正面匹配。

对于您的问题,唯一可行的解​​决方案是在Quantum Computing中,我将不会感到惊讶,并且几年后有人发表了一篇论文,证明了P2P网络中的固有限制。


是的,我认为是。即使拥有4GB的数据,您也可以存储足够的哈希值以轻松作弊。我读了一个有关加密数据转换的数学字段(例如,将一个值累加为一个加密值,以便在不泄露实际值的情况下增加它的值),也许您可​​以在该字段中找到一些东西,但是说实话,我不明白该字段^^
CoffeDeveloper

也许我应该在“视觉场”上更清楚一些,它由一串线组成,因此您可以计算出点在该线的哪一侧,这些线组组成凸面区域,而这些区域组组成整体“视觉领域”。转换将每条线转换为一个点,然后将该线的一侧上的所有点都转换为该点的一侧,因此即使您无法计算出该点,您仍然可以计算出该线的原边。原始行。
Elon

“当玩家用作服务器时,它无法参与实际在该服务器上玩的玩家的游戏”。
Hobbamok

-3

当您说“隐藏来自对手的敏感信息”时,您的意思是要避免那些监听数据包的人听您的流量并获取有关您的游戏的信息?

如果是这样,有一个简单的答案。大多数AAA游戏(当然还有主机游戏)都使用加密。实际上,它是如此普遍,以至于游戏中使用的许多网络中间件已经内置了分组加密功能。

通常,它的工作方式如下:当打开与另一台计算机的连接时,在套接字变为活动状态之前,会发生密钥交换。我知道在XBox上它曾经是Diffie-Hellman密钥交换。我不知道他们是否仍在使用它。然后,一旦有了密钥,所有发送的数据都将使用密钥进行加密,而在收到时将不进行加密。如果有人使用嗅探器读取您的数据包,则它们看起来像胡言乱语,因为他们没有密钥,因此不太可能解密它们。(高级黑客可能能够通过访问正在运行的游戏的进程内存来获取它们,但这很少见,而且不太可能。)

加密规则的唯一例外是VoiceChat数据。根据美国法律,语音聊天必须以清晰的方式发送,以便CIA可以收听。控制台通常提供一种标记语音数据的方式,以便不对其进行加密。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.