P2P 네트워크 숨기기 위치?


13

안전한 게임을 위해 P2P 아키텍처를 연구하고 있으며 문제를 5 가지 하위 문제로 나누었습니다.

  • 전송 된 게임 상태의 불법 수정
  • 사기꾼을 정확하게 떨어 뜨립니다.
  • 게임 상태에 동의
  • "미리보기"치트 피하기
  • 상대방의 민감한 정보 숨기기

처음 4 개는 거의 모든 것이 해결되었지만 문제가있는 마지막 항목입니다.

세부 사항을 살펴보기 전에 "속임수"p2p 네트워크를 만드는 목록에서 놓친 것이 있는지 묻고 싶습니다. 나는 aimbots를 사용하는 것과 같은 치트에 관심이 없으며, 중앙 서버처럼 p2p 네트워크를 안전하게 만드는 데 관심이 있습니다.

그래서 지금까지 민감한 정보를 숨기려는 노력으로 상대방의 위치를 ​​항상 알 수없는 게임에서 플레이어의 위치에 중점을 두었습니다. 그러면 문제는 상대방의 위치를 ​​모르고 상대방에게 위치를 보내야하는지 결정하는 방법이됩니다.

상대가 허위 포지션 중 하나가 귀하의 포지션에서 "보이는"경우 상대방이 귀하의 포지션을 쉽게 얻을 수 있기 때문에 상대방이 귀하를 비교하기 위해 여러 허위 포지션을 보내는 등의 방법을 배제했습니다.

내가 당신에게 상대로부터 "시각 필드"를 받고 당신이 당신의 위치를 ​​보낼지 여부를 결정할 수있는 방법에 초점을 맞추고있다. 그러나 리그 오브 레전드와 같은 게임에서는 상대방의 시야가 매우 민감한 정보 인 경우 문제가됩니다. 나는 단일 행렬을 사용하여 시야를 변환 하여이 문제를 해결하려고 시도했습니다. 즉, 변환 된 시야 버전에서 원래 버전으로 돌아갈 수는 없지만 선형 변환이므로 위치가 내부에 있는지 여전히 알 수 있습니다 시야 또는 아닙니다.

그러나 완벽하게 작동하지는 않지만 변환 후 정확한 시야를 복원 할 수는 없지만 시야의 "기울기"에 대한 정보 (시야는 여러 선으로 구성되며 각 선의 경사를 결정할 수 있음)는 다음과 같습니다. 이것은 원래의 시야를 비교적 저렴하게 재구성하는데 사용될 수있다.

본질적으로, 내가 필요한 것은 위치가 "가시적"인지 아닌지를 판단 할 수있는 함수이며,이 함수 / 시야를 재구성하는 것은 계산이 완료되면 시야를 재구성 한 후에는 더 이상 관련이 없어야한다는 계산 계산이 필요하다 실제 게임. 그런 방법을 알고있는 영리한 사람이 있습니까?

편집 사람들은 전체 "비전 필드"에 대해 혼란스러워서 여기에 더 자세한 설명을하고자합니다. 비전 필드는 일련의 선 그룹으로 구성되며, 해당 그룹의 모든 선에 대해 같은쪽에 있으면 위치의 선이 어느 쪽인지 확인하여 이러한 그룹 중 하나에 위치가 있는지 쉽게 확인할 수 있습니다. 그것은 그 그룹 안에 있고 따라서 비전 필드 안에 있습니다.

그러나 전송되는 정보는이 선이 아니라 선 변환 및 변환 (2 x 2 특이 행렬)이므로 수신 한 변환을 사용하여 선을 변환하여 선의 어느 쪽을 계속 확인할 수 있습니다. 그리고 그 값을 변환 된 라인과 비교하는 것. 여기서 핵심은 변환이 단수라는 것입니다. 즉, 원래 줄로 되돌아가는 역을 찾는 것은 불가능합니다. 그러나 변환 된 선의 어느 쪽에서 많은 점이 놓여 있는지 알면 계산보다 저렴하게 선의 원점을 계산할 때까지 선을 재구성하는 선의 기울기를 결정할 수 있습니다. 선의 기울기

내가 찾고있는 것은 포인트가 영역 내부에 있는지 여부를 결정하는 방법입니다. 메서드에서 영역을 재구성하는 것이 불가능하거나 (항상 무차별 강제 할 수 있기 때문에 의심됩니다) 매우 계산적으로 무겁습니다.


1
나는이 정확한 문제에 초점을 맞추고 약 11 년을 보냈으며, 처음 네 가지 사항은 사소한 것이지만 귀하가 요청한 것은 SE 답변에 맞지 않을 것입니다. 결국 백서가 나옵니다.
MickLH

나는 이것이 다른 문제들에 대한 당신의 접근에 크게 의존 할 것이라고 생각합니다
Phoenix

@MickLH이 문제를 해결하기 위해 가장 좋은 방법은 무엇입니까? :) 그리고 변형 된 시각적 / 상호 작용 필드 사용에 대해 어떻게 생각하십니까? 이것이 당신이 조사한 것입니까?
Elon

변형 된 필드를 조사한 결과 완전히 안전하지 않은 것으로 나타났습니다. 한 명의 플레이어는 변환을 숨기는 방법에 관계없이 항상 다른 플레이어의 위치를 ​​유추 할 수 있습니다. 어느 누구도 필요한 정보를 모두 얻을 때까지 어느 누구도 다른 플레이어의 위치를 ​​배울 수 없기 때문에 어느 누구도 배울 수 없기 때문입니다. 상대방에게 알리지 않고 프로토콜을 종료 할 수 있습니다.
MickLH

"최상의"방법에 관해서는 ... 나는 위에 심각했습니다. 심지어 가장 간단한 방법조차도 설명하기 위해 전체 백서를 필요로하는 복잡한 주제입니다.
MickLH

답변:


1

나는 시야에 돌이킬 수없는 알고리즘을 가지고 있다고하더라도 사람들은 근처 지점이 그 위치의 교차점을 만들고 상대 시야가 교차하는지 계산하여 이점을 얻을 수 있다고 생각합니다. 나쁜 경우 (지도에 대한 비전 필드가 충분히 큰 경우) 적의 정확한 지점을 제거하는 과정으로 계산할 수 있습니다.

그 대신 연결된 모든 동료가 서로 볼 수 있는지 여부를 결정하기 위해지도의 어느 부분을 발표해야한다고 생각합니다. 3 차원이 중요한 경우 먼저지도를 2x2 또는 2x2x2로 분할합니다. 그런 다음 모두 1,0 1,1 0,1 또는 0,0에 있으면 서로에게 말합니다. 동일한 사분면에 있지 않으면 다음에 확인하기 전까지 대화가 끝납니다. 이것은 그들의 정확한 위치를 보호합니다. 만약 같은 사분면에 존재한다면, 그들은이 공간을 4 개의 새로운 사분면으로 나누고, 그들이 서로 볼 수있을 정도로 가까워 질 때까지 계속합니다.

물론 사분면 경계에 문제가 있지만 이웃 사분면에 대한 추가 쿼리로 해결할 수 있어야합니다.


-1

이것을 결정적인 대답으로 보지 마십시오. 주제가 실제로 광범위합니다 (누군가가 귀하의 질문에 사실을 표시하면 놀라지 않을 것입니다).

일부 플레이어를 서버로 사용하여 문제를 해결할 수 있으며 플레이어를 서버 로 사용하면 실제로 해당 서버를 재생하는 플레이어의 게임에 참여할 수 없습니다 .

게임이 너무 까다 롭지 않은 경우 동일한 플레이어 시스템에서 여러 서버를 실행할 수도 있습니다 (물론 NAT 문제로 인해 모든 플레이어가 서버로 실행될 수는 없으므로 IPv6 덕분입니다!).

여기서 중요한 문제는 무작위 플레이어가 서버로 사용되기 때문에 "손상된"플레이어이거나 시뮬레이션을 "손상된"플레이어에게 전달하여 중요한 정보를 전달할 수있는 가능성이 약간 있다는 것입니다 ( 실제로, 그 시점에서 서버는 임의의 데이터를 보내고 어쨌든 승리를 강제 할 수 있습니다).

중앙 서버를 사용하여 권한 부여 및 로그인을 확인하면 게임을 더 잘 구성하고 플레이어를 쉽게 금지 할 수 있습니다 (그러나 더 이상 순수한 P2P 네트워크는 아님).

월드를 슬라이스로 나누고 보이는 슬라이스의 해시를 계산할 수도 있지만,이 방법은 쉽게 속일 수 있습니다. 가장 일반적인 가시적 인 슬라이스는 해시 테이블을 매우 빠르게 만들 수 있습니다.

나에게 당신의 질문은 암호화 기능을 검색하는 것과 같습니다. 시험은 신속해야하지만 무차별 대입 속도는 느려 야합니다.

내 생각에 오는 가장 간단한 것 (또한 내 작업과 관련이 있음)은 빠른 시력 인식 알고리즘 (증강 현실과 유사)을 사용하는 것입니다.

당신이 당신의 위치의 빠른 "스냅 샷"(슬라이스와 비슷한)을 만들 수 있다면, 보이는 것 주위에 놓일 때만 인식 될 수 있습니다. 특히 맵에 빠르게 던져 인식 패턴을 생성 할 수있는 시간이 지정된 요소가있는 경우.

그러나 이러한 알고리즘이 모바일에서도 꽤 빠르더라도 1 인칭 슈팅 게임에 대해서는 충분히 빠를 것이라고 생각하지 않습니다.

또한 너무 빨리 만들면 가짜 긍정이 있습니다! 플레이어는 어쨌든 "공통 비주얼"을 사용해 게임 중 하나를 만들 수 있으므로 비주얼 중 하나가 기능 감지 알고리즘과 일치하도록 할 수 있습니다.

Quantum Computing에서 귀하의 문제에 대한 유일한 해결책이 가능하다는 사실에 놀라지 않을 것입니다. 몇 년 안에 누군가가 P2P 네트워크에서 본질적인 한계를 입증하는 논문을 발표했습니다.


그래 4GB의 데이터로도 쉽게 속일 수 있도록 충분한 해시를 저장할 수 있습니다. 암호화 된 데이터의 변환에 관한 수학 필드에 대해 읽었습니다 (실제 값을 공개하지 않고 증가하도록 값을 암호화 된 값으로 합산하는 것과 같이), 아마도 해당 필드에서 무언가를 찾을 수는 있지만 솔직히 이해하지 못합니다 that ^^
GameDeveloper 2016 년

어쩌면 나는 "비전 필드"에서 좀 더 명확 해졌을 것입니다. 여러 개의 선으로 구성되어있어서이 선의 어느 쪽이 어떤 점인지 계산할 수 있습니다. 그러한 선의 그룹은 볼록한 영역을 구성하고 그러한 영역의 그룹은 전체를 구성합니다 "비전 필드". 변환은 각 선을 점으로 변환 한 다음 해당 선의 한쪽에 있던 모든 점이이 점의 한쪽으로 변환되므로 원래 선의 어느 쪽을 계산할 수 없더라도 원래 줄.
Elon

"플레이어를 서버로 사용하는 경우 실제로 해당 서버를 재생하는 플레이어의 게임에 참여할 수 없습니다"P2P를 떨어 뜨리는 것과 같은 의미입니까?
Hobbamok

-3

'상대방의 민감한 정보 숨기기'라고 말하면 패킷 스니퍼가있는 사람들이 트래픽을 듣고 게임에 대한 정보를 얻지 못하게하려는 것입니까?

그렇다면 이에 대한 쉬운 대답이 있습니다. 대부분의 AAA 게임 (그리고 콘솔 게임)은 암호화를 사용합니다. 실제로 게임에 사용되는 많은 네트워킹 미들웨어에는 이미 패킷 암호화 기능이 내장되어 있습니다.

일반적으로 다음과 같이 작동합니다. 다른 시스템에 대한 연결을 열면 소켓이 활성화되기 전에 키 교환이 발생합니다. XBox에서는 Diffie-Hellman 키 교환이었던 것을 알고 있습니다. 그들이 아직도 그것을 사용하고 있는지 전혀 모른다. 그런 다음 키가 있으면 전송 된 모든 데이터가 키를 사용하여 암호화되고 수신시 암호화되지 않습니다. 누군가가 스니퍼를 사용하여 패킷을 읽는 경우, 횡설수설처럼 보일 것이며 키가 없기 때문에 해독 할 수 없을 것입니다. (고급 해커는 실행중인 게임의 프로세스 메모리에 액세스하여 해킹 할 수 있지만 드물게 발생합니다.)

암호화 규칙에 대한 유일한 예외는 VoiceChat 데이터입니다. 미국 법률에 따라 CIA가 원할 경우들을 수 있도록 음성 채팅을 명확하게 보내야합니다. 콘솔은 일반적으로 암호화되지 않도록 음성 데이터에 태그를 지정하는 방법을 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.