Mạng P2P ẩn vị trí nào?


13

Tôi đã làm việc trên một kiến ​​trúc P2P để chơi game an toàn và tôi đã chia vấn đề thành năm vấn đề phụ:

  • Sửa đổi bất hợp pháp trạng thái trò chơi đã gửi
  • Chính xác thả gian lận
  • Đồng ý về trạng thái trò chơi
  • Tránh gian lận "nhìn về phía trước"
  • Ẩn thông tin nhạy cảm từ đối thủ

Bốn cái đầu tiên tôi đã giải quyết được khá nhiều nhưng đó là cái cuối cùng mà tôi gặp rắc rối.

Trước khi đi vào chi tiết, tôi chỉ muốn hỏi liệu có bất cứ điều gì tôi đã bỏ lỡ trong danh sách tạo mạng p2p "bằng chứng gian lận" không. Tôi không quan tâm đến các mánh gian lận như sử dụng aimbots, tôi chỉ quan tâm đến việc làm cho mạng p2p an toàn như một máy chủ tập trung.

Vì vậy, trong nỗ lực của tôi cho đến nay về việc che giấu thông tin nhạy cảm, tôi đã tập trung vào vị trí của người chơi trong một trò chơi mà vị trí của đối thủ của bạn không phải lúc nào cũng được biết đến. Vấn đề sau đó trở thành làm thế nào để xác định xem bạn có nên gửi vị trí của bạn cho đối thủ mà không biết vị trí của đối thủ hay không.

Tôi đã loại trừ các phương pháp như đối thủ gửi nhiều vị trí sai để bạn so sánh với bạn vì đối thủ của bạn có thể dễ dàng lạm dụng hệ thống như vậy vì anh ta sẽ nhận được vị trí của bạn nếu một trong những vị trí sai xảy ra là "hiển thị" từ vị trí của bạn.

Phương pháp tôi đã tập trung vào một phương pháp mà bạn nhận được "trường thị giác" từ đối thủ của mình và từ đó có thể xác định xem bạn có nên gửi vị trí của mình hay không. Tuy nhiên, đây là một vấn đề trong các trò chơi như Liên minh huyền thoại nơi lĩnh vực hình ảnh của đối thủ của bạn cũng là thông tin rất nhạy cảm. Tôi đã cố gắng giải quyết điều này bằng cách chuyển đổi trường thị giác bằng ma trận số ít có nghĩa là bạn không thể chuyển từ phiên bản biến đổi của trường hình ảnh trở lại phiên bản gốc, nhưng vì nó là một phép biến đổi tuyến tính, bạn vẫn có thể biết liệu vị trí của mình có ở bên trong không lĩnh vực thị giác hay không.

Tuy nhiên, điều này không hoạt động hoàn hảo, trường hình ảnh chính xác không thể được khôi phục sau khi chuyển đổi, nhưng thông tin về "độ dốc" trong trường thị giác (trường thị giác được xây dựng bằng nhiều đường và có thể xác định độ dốc của từng đường) khôi phục và điều này có thể được sử dụng để tái cấu trúc tương đối rẻ tiền trường hình ảnh ban đầu.

Về bản chất, cái tôi cần là một hàm có thể xác định xem một vị trí có "hiển thị" hay không, và việc xây dựng lại chức năng / trường thị giác này phải được yêu cầu tính toán đến mức khi bạn hoàn thành việc tái tạo trường thị giác thì nó không còn phù hợp với trò chơi trong hành động. Có người siêu thông minh nào ngoài kia tình cờ biết phương pháp như vậy không?

Chỉnh sửa mọi người loại nhầm lẫn về toàn bộ "trường tầm nhìn" vì vậy tôi nhằm mục đích đưa ra một lời giải thích chi tiết hơn ở đây. Trường tầm nhìn bao gồm các nhóm của một tập hợp các dòng, bạn có thể dễ dàng kiểm tra xem một vị trí có nằm trong một trong các nhóm này hay không bằng cách kiểm tra xem bên nào của vị trí của bạn, nếu nó ở cùng một phía cho tất cả các dòng trong nhóm đó bạn biết nó ở trong nhóm đó và do đó bên trong trường tầm nhìn.

Tuy nhiên, thông tin được gửi không phải là dòng này, mà là một phép biến đổi của dòng và phép biến đổi (2 by 2 số ít một ma trận), bạn vẫn có thể kiểm tra phía nào của vị trí của bạn bằng cách chuyển đổi nó bằng cách sử dụng biến đổi bạn nhận được và so sánh giá trị đó với dòng biến đổi. Chìa khóa ở đây là sự biến đổi là số ít, có nghĩa là không thể tìm thấy một nghịch đảo để quay trở lại dòng ban đầu. Tuy nhiên, có thể xác định độ dốc của đường tạo lại đường thẳng bằng cách kiểm tra phía bên nào của đường biến đổi có rất nhiều điểm nằm cho đến khi bạn xác định được nguồn gốc của đường rẻ hơn rất nhiều so với khi bạn không biết độ dốc của đường.

Điều tôi đang tìm kiếm là một phương pháp để xác định xem một điểm có nằm trong một khu vực hay không, trong đó việc tái tạo lại khu vực từ phương thức đó là không thể (điều mà tôi nghi ngờ tồn tại vì bạn luôn có thể ép buộc nó) hoặc rất nặng tính toán.


1
Tôi đã dành khoảng 11 năm tập trung vào vấn đề chính xác này và 4 điều đầu tiên bạn liệt kê là tầm thường nhưng những điều bạn đã hỏi sẽ không phù hợp với câu trả lời SE. Cuối cùng tôi sẽ nhận được một whitepaper ra nó.
MickLH

Tôi nghĩ rằng điều này sẽ phụ thuộc rất nhiều vào cách tiếp cận của bạn đối với các vấn đề khác
Phoenix

@MickLH Phương pháp tốt nhất bạn nghĩ ra để giải quyết vấn đề này là gì? :) Và bạn nghĩ gì về việc sử dụng các trường tương tác / hình ảnh được chuyển đổi? Đây có phải là một cái gì đó bạn đã xem xét?
Elon

Tôi đã điều tra các lĩnh vực được chuyển đổi và chỉ ra rằng nó hoàn toàn không an toàn. Một người chơi sẽ luôn có thể suy luận vị trí của người chơi khác, bất kể bạn che giấu sự biến đổi như thế nào, vì không người chơi nào có thể học bất cứ điều gì cho đến khi một trong số họ có tất cả thông tin bắt buộc, tại đó họ tìm hiểu vị trí của người chơi khác và tại đó có thể chấm dứt giao thức mà không báo cho người chơi khác.
MickLH

Đối với phương pháp "tốt nhất" ... Tôi đã nghiêm túc ở trên, ngay cả phương pháp đơn giản nhất cũng là một chủ đề phức tạp thực sự cần toàn bộ whitepaper để giải thích.
MickLH

Câu trả lời:


1

Tôi nghĩ rằng ngay cả khi bạn có thuật toán không thể đảo ngược cho trường nhìn, mọi người vẫn có thể đạt được lợi thế bằng cách tính toán nếu các điểm gần đó sẽ dẫn đến giao điểm của vị trí đó và trường thị giác của đối thủ sẽ giao nhau. Trong trường hợp xấu (của trường nhìn đủ lớn để tỷ lệ bản đồ), bạn có thể tính toán bằng quá trình loại bỏ điểm chính xác của kẻ thù.

Tôi nghĩ thay vào đó có lẽ tất cả các đồng nghiệp được kết nối nên thông báo phần nào của bản đồ, để xác định xem họ có thể nhìn thấy nhau hay không. Đầu tiên, chia bản đồ thành 2x2 hoặc 2x2x2 nếu kích thước thứ 3 là quan trọng. Sau đó, mọi người nói với nhau nếu họ ở trong 1,0 1,1 0,1 hoặc 0,0. Nếu họ không ở cùng góc phần tư, cuộc trò chuyện của họ sẽ kết thúc cho đến lần kiểm tra tiếp theo. Điều này bảo vệ vị trí chính xác của họ. Nếu chúng tồn tại trong cùng một góc phần tư, chúng sẽ chia không gian này thành 4 góc mới và tiếp tục cho đến khi chúng xác định rằng chúng đủ gần để có thể nhìn thấy nhau.

Tất nhiên có vấn đề với đường viền của các góc phần tư, nhưng nó có thể được giải quyết bằng các truy vấn bổ sung cho các góc phần tư lân cận.


-1

Đừng coi đây là một câu trả lời dứt khoát, chủ đề rất rộng (Tôi sẽ không ngạc nhiên nếu ai đó đánh dấu câu hỏi của bạn nguyên vẹn).

Bạn có thể giải quyết nó bằng cách sử dụng một số người chơi làm máy chủ và khi người chơi được sử dụng làm máy chủ, họ không thể tham gia vào trò chơi của những người chơi thực sự đang chơi máy chủ đó .

Nếu trò chơi của bạn không quá đòi hỏi, bạn cũng có thể chạy nhiều máy chủ từ cùng một máy người chơi (tất nhiên điều đó sẽ hữu ích, vì không phải tất cả người chơi có thể chạy như máy chủ do sự cố NAT, cảm ơn IPv6 !!).

Vấn đề chính ở đây là do một người chơi ngẫu nhiên sẽ được sử dụng làm máy chủ, nên có khả năng đó sẽ là một người chơi "bị xâm nhập" hoặc nó sẽ chuyển mô phỏng cho người chơi "bị xâm nhập", cho phép thông tin nhạy cảm được truyền vào ( tốt, trong thực tế tại thời điểm đó, máy chủ có thể gửi dữ liệu tùy ý và buộc chiến thắng bằng mọi giá).

Nếu bạn sử dụng máy chủ trung tâm để kiểm tra ủy quyền và đăng nhập thì bạn có thể cho phép tổ chức trò chơi tốt hơn và cấm người chơi dễ dàng (tuy nhiên đó sẽ không còn là mạng P2P thuần túy).

Bạn cũng có thể chia thế giới thành các lát và tính toán hàm băm của các lát có thể nhìn thấy, nhưng điều này có thể dễ dàng bị lừa, các lát có thể nhìn thấy phổ biến nhất sẽ cho phép tạo một bảng băm khá nhanh.

Đối với tôi câu hỏi của bạn giống như cố gắng tìm kiếm một chức năng mã hóa. Bài kiểm tra nên nhanh chóng, nhưng lực lượng vũ phu nên chậm ..

Điều đơn giản nhất xuất hiện trong đầu tôi (cũng liên quan đến công việc của tôi) là sử dụng một số thuật toán nhận dạng tầm nhìn nhanh (giống như thực tế Augmented).

Nếu bạn quản lý để thực hiện một "ảnh chụp nhanh" về vị trí của mình (tương tự như các lát), chỉ có thể được nhận ra khi được đặt xung quanh một cái gì đó có thể nhìn thấy thì bạn sẽ có nó. Đặc biệt là nếu có các yếu tố thời gian trong bản đồ cho phép tạo ra các mẫu nhận dạng nhanh chóng.

Tuy nhiên, ngay cả khi các thuật toán như vậy trở nên khá nhanh ngay cả trên thiết bị di động, tôi không nghĩ chúng sẽ đủ nhanh cho một game bắn súng First Person.

Ngoài ra nếu bạn làm cho chúng quá nhanh, bạn sẽ có dương tính giả! Và người chơi dù sao cũng có thể tạo ra một trò chơi thử một số "Hình ảnh thông thường" để một trong những hình ảnh đó khớp với thuật toán phát hiện tính năng.

Tôi sẽ không ngạc nhiên khi giải pháp khả thi duy nhất cho vấn đề của bạn là có thể có trong Điện toán lượng tử, và trong vài năm, ai đó đã xuất bản một bài báo đưa ra giới hạn nội tại trong mạng P2P.


Vâng tôi cho rằng. Ngay cả với 4GB dữ liệu, bạn có thể lưu trữ đủ số băm để gian lận dễ dàng. Tôi đã đọc về một lĩnh vực toán học về chuyển đổi dữ liệu được mã hóa (như tính tổng giá trị thành giá trị được mã hóa để nó được tăng lên mà không tiết lộ giá trị thực), có thể bạn có thể tìm thấy thứ gì đó trong lĩnh vực đó, nhưng thật lòng tôi không hiểu lĩnh vực đó ^^
Nhà phát triển GameD

Có lẽ tôi nên rõ ràng hơn về "trường nhìn", nó bao gồm một loạt các đường để bạn có thể tính được điểm nào của đường này, các nhóm đường đó tạo thành các vùng lồi và các nhóm của các vùng đó tạo thành tổng thể "Trường nhìn". Phép biến đổi biến mỗi dòng thành một điểm và sau đó tất cả các điểm nằm ở một phía của dòng đó được chuyển sang một bên của điểm này để bạn vẫn có thể tính được bên nào của dòng ban đầu, thậm chí bạn không thể tính được dòng gốc.
Elon

"Và khi một người chơi được sử dụng làm máy chủ, nó không thể tham gia vào trò chơi của những người chơi thực sự đang chơi máy chủ đó" Vậy bạn có muốn bỏ P2P không?
Hobbamok

-3

Khi bạn nói 'Ẩn thông tin nhạy cảm từ đối thủ', bạn có nghĩa là bạn muốn tránh những người có trình thám thính gói nghe lưu lượng truy cập của bạn và nhận thông tin về trò chơi của bạn?

Nếu vậy, có một câu trả lời dễ dàng cho điều này; hầu hết các trò chơi AAA (và chắc chắn là các trò chơi trên console) đều sử dụng mã hóa. Trong thực tế, nó phổ biến đến mức nhiều phần mềm trung gian mạng được sử dụng trong các trò chơi đã được tích hợp mã hóa gói.

Thông thường nó hoạt động như thế này: Khi bạn mở một kết nối đến một máy khác, trước khi ổ cắm hoạt động, trao đổi khóa sẽ xảy ra. Tôi biết rằng trên XBox, nó từng là trao đổi khóa Diffie-Hellman; Tôi không biết nếu họ vẫn sử dụng nó bây giờ. Sau đó, khi bạn có khóa của mình, tất cả dữ liệu được gửi sẽ được mã hóa bằng các khóa và không được mã hóa khi nhận. Nếu ai đó sử dụng trình thám thính để đọc các gói của bạn, chúng sẽ trông giống như vô nghĩa và không có khả năng họ có thể giải mã chúng vì chúng không có khóa. (Các tin tặc nâng cao có thể có được chúng bằng cách truy cập vào bộ nhớ tiến trình của trò chơi đang chạy, nhưng điều đó rất hiếm và khó xảy ra.)

Ngoại lệ duy nhất cho quy tắc mã hóa là dữ liệu VoiceChat; theo luật tại Hoa Kỳ, trò chuyện bằng giọng nói phải được gửi đi rõ ràng để CIA có thể lắng nghe nếu họ muốn. Bảng điều khiển thường cung cấp một cách để gắn thẻ dữ liệu giọng nói để nó không được mã hóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.