P2P мережа приховує позиції?


13

Я працюю над архітектурою P2P для безпечних ігор, і поділив проблему на п’ять підпроблем:

  • Незаконне змінення стану надісланої гри
  • Акуратно скиньте шахраїв
  • Погоджуючись на ігровий стан
  • Уникаючи чіт "наперед"
  • Приховування конфіденційної інформації від опонентів

Перші чотири я майже все вирішив, але це останній, з яким я маю проблеми.

Перш ніж розібратися в деталях, я просто хочу запитати, чи є щось, що я пропустив у своєму списку, щоб зробити мережу p2p "підтвердженням обману". Мене не цікавлять чіти, такі як використання targetbots, мені цікаво лише зробити мережу p2p настільки безпечною, як централізований сервер.

Тому в своїх зусиллях щодо приховування конфіденційної інформації я зосередився на позиції гравців у грі, де позиція вашого опонента не завжди повинна бути відомою. Тоді проблема стає в тому, як визначити, чи слід надсилати вам позицію опоненту, не знаючи позиції опонента.

Я виключав такі методи, як опонент, який надсилає вам кілька помилкових позицій для порівняння ваших, оскільки ваш опонент може легко зловживати такою системою, оскільки він отримає вашу позицію, якщо одна з помилкових позицій трапилася "видно" з вашої позиції.

Метод, який я зосереджував на тому, в якому ви отримуєте "зорове поле" від опонента, і таким чином можу визначити, чи слід надсилати свою позицію чи ні. Однак це проблема в таких іграх, як League of Legends, де поле зору вашого опонента також є дуже чутливою інформацією. Я намагався вирішити це шляхом перетворення поля зору за допомогою сингулярної матриці, що означає, що ви не можете перейти від трансформованої версії зорового поля до початкової версії, але оскільки це лінійне перетворення, ви все ще можете з'ясувати, чи ваше положення знаходиться всередині зорове поле чи ні.

Однак це не працює ідеально, точне зорове поле не може бути відновлено після перетворення, але інформація про "схили" у полі зору (поле зору побудовано кількома лініями, і нахил кожної лінії може бути визначений) може бути відновлено, і це можна використати для відновної недорогої реконструкції вихідного зорового поля.

По суті, мені потрібна функція, яка може визначити, чи є позиція "видимою" чи ні, і реконструкція цієї функції / зорового поля повинна бути настільки обчислювально вимогою, що після того, як ви закінчите реконструкцію поля зору, це вже не має значення для гра в дії. Чи є там супер розумна людина, яка випадково знає такий метод?

Редагувати Люди швом заплутано у всьому "полі зору", тому я маю на меті дати тут більш детальне пояснення. Поле зору складається з груп набору ліній, ви можете легко перевірити, чи є позиція всередині однієї з цих груп, просто перевіривши, на якій стороні лінії знаходиться ваше положення, якщо воно є на одній стороні для всіх рядків цієї групи, яких ви знаєте це всередині цієї групи, а значить, всередині поля зору.

Інформація, що надсилається, це не ця лінія, а перетворення рядка та перетворення (2 на 2 сингулярна матриця), ви все одно можете перевірити, на якій стороні лінії знаходиться ваша позиція, попередньо перетворивши її, використовуючи отримане перетворення. і порівняння цього значення з перетвореною лінією. Ключовим тут є те, що перетворення є сингулярним, тобто неможливо знайти зворотну сторону, щоб повернутися до початкової лінії. Однак можна визначити нахил лінії, яка робить реконструкцію лінії, просто перевіривши, на якій стороні перетвореної лінії лежить багато точок, поки ви не визначили походження лінії набагато обчислювально дешевше, ніж якщо б ви не знали нахил лінії.

Що я шукаю, це метод визначення того, чи знаходиться точка всередині області, де реконструкція області за методом або неможлива (що, я сумніваюся, існує, оскільки ви завжди можете її змусити), або дуже обчислювально важка.


1
Я провів близько 11 років, зосередившись на цій точній проблемі, і перші 4 речі, які ви перерахували, є тривіальними, але те, про що ви запитали, не вписується у відповідь SE. Я врешті-решт дістану на ньому довідку.
MickLH

Я думаю, що це буде дуже залежно від ваших підходів до інших проблем
Фенікс

@MickLH Який найкращий метод ви вирішили, щоб вирішити цю проблему? :) А що ви думаєте про використання трансформованих полів візуальної / взаємодії? Це щось, що ви подивилися?
Елон

Я досліджував трансформовані поля і показав, що це абсолютно небезпечно. Один гравець завжди зможе зробити висновок про позицію іншого гравця, незалежно від того, як ви приховуєте трансформацію, оскільки жоден гравець не може нічого навчитися, поки один з них не отримає всю необхідну інформацію, в цей момент він дізнається позицію іншого гравця і може розірвати протокол, не повідомивши іншого гравця.
MickLH

Що стосується "найкращого" методу ... я був серйозним вище, навіть найпростіший метод - це заплутана тема, яка справді потребує цілого документа для пояснення.
MickLH

Відповіді:


1

Я думаю, що навіть якби у вас був незворотний алгоритм для поля зору, люди все-таки могли б отримати перевагу, обчисливши, чи неподалік від них точок призведе до перетину цього місця розташування і поле зору супротивників перетинатиметься. У поганому випадку (з достатньо великим співвідношенням поля зору та карти) ви могли обчислити шляхом усунення точну точку свого ворога.

Я думаю, натомість, можливо, всі підключені однолітки повинні оголосити, в якій частині карти вони перебувають, щоб визначити, чи можливо, бачать вони один одного чи ні. Спочатку розділіть карту на 2х2 або 2х2х2, якщо важливий 3-й вимір. Тоді всі кажуть один одному, якщо вони в 1,0 1,1 0,1 або 0,0. Якщо вони не в одному квадраті, їхня розмова закінчується до наступної перевірки. Це захищає їх точне розташування. Якщо вони існують в одному квадраті, вони розділять цей простір на 4 нові квадри і продовжуватимуть, поки вони не встановлять, що вони досить близькі, щоб їх бачили один одного.

Звичайно, існують проблеми з межами квадрантів, але це має бути вирішене додатковими запитами до сусідніх квадрантів.


-1

Не сприймайте це як остаточну відповідь, тема справді широка (я не здивуюсь, якщо хтось позначить ваше питання в інфакті).

Ви можете вирішити це, використовуючи деякі гравці як сервер, і коли гравець використовується як сервер, він не може брати участь у грі гравців, які насправді грають на цьому сервері .

Якщо ваша гра не надто вимоглива, ви також можете запустити декілька серверів з однієї ігрової машини (звичайно, це було б корисно, оскільки не всі гравці можуть працювати на сервері через проблеми NAT, дякую IPv6 !!).

Основна проблема тут полягає в тому, що оскільки в якості сервера буде використовуватися випадковий гравець, є невелика ймовірність, що він стане «компрометованим» гравцем або передасть симуляцію «компрометованому» гравцеві, що дозволяє передавати конфіденційну інформацію ( добре, насправді в цей момент сервер міг надіслати довільні дані і примусити виграти все одно).

Якщо ви використовуєте центральний сервер для перевірки авторизації та входу, ви можете дозволити краще організовувати ігри та легко забороняти гравців (однак це вже не буде чистою мережею P2P).

Ви також можете розділити світ на фрагменти та обчислити хеш видимих ​​фрагментів, але це може бути легко обманути, найпоширеніші видимі фрагменти дозволять досить швидко створити таблицю хешей.

Для мене ваше питання схоже на спробу пошуку криптографічної функції. Тест повинен бути швидким, але груба сила має бути повільною.

Найпростіша річ, яка мені спадає на думку (також пов'язана з моєю роботою) - це використовувати якийсь алгоритм розпізнавання зору (розширена реальність).

Якщо вам вдасться зробити швидкий "знімок" свого місцезнаходження (подібний до скибочок), то його можна розпізнати, лише якщо розмістити навколо чогось видиме, то у вас це з’явиться. Особливо, якщо на карті є приурочені елементи, які дозволяють генерувати шаблони розпізнавання швидкого відкидання.

Однак, навіть якщо такі алгоритми стають досить швидкими навіть на мобільних пристроях, я не думаю, що вони будуть досить швидкими для шутера від першої особи.

Також якщо ви зробите їх занадто швидко, у вас з'являться підроблені позитиви! І гравець може в будь-якому випадку створити гру, яка спробує деякі "Загальні візуальні зображення", щоб одна із зображень відповідала позитивно алгоритму виявлення функцій.

Я не буду здивований, що єдине можливе рішення вашої проблеми було б можливим у «Квантових обчисленнях», і через декілька років хтось опублікує документ, що підтверджує цю внутрішню межу в мережах P2P.


Так, я вважав, що це. Навіть за допомогою 4 ГБ даних ви можете зберігати достатню кількість хешей, щоб легко обдурити. Я читав про математичне поле, яке стосувалося перетворень зашифрованих даних (наприклад, підсумовування значення до зашифрованого значення, щоб воно збільшувалося, не розкриваючи реальне значення), можливо, ви можете знайти щось у цьому полі, але, чесно кажучи, я не розумію те поле ^^
CoffeDeveloper

Можливо, я мав би бути зрозумілішим на "полі зору", він складається з купки ліній, тож ви можете обчислити, на якій стороні цієї лінії є точка, групи таких ліній складають опуклі ділянки, а групи таких областей складають ціле "поле зору". Перетворення перетворює кожну пряму в точку, і тоді всі точки, які були на одній стороні цієї лінії, перетворюються на одну сторону цієї точки, так що ви все ще можете обчислити, з якої сторони лінії вона була спочатку, навіть якщо ви не можете обчислити оригінальна лінія.
Елон

"і коли гравець використовується як сервер, він не може брати участь у грі гравців, які насправді грають на цьому сервері" Тож ви маєте на увазі, як кинути P2P?
Хоббамок

-3

Коли ви говорите «Сховати конфіденційну інформацію від опонентів», ви маєте на увазі, що хочете уникнути того, щоб люди з нюхами пакетів слухали ваш трафік та отримували інформацію про вашу гру?

Якщо так, на це є проста відповідь; більшість ігор AAA (і, звичайно, консольні ігри) використовують шифрування. Насправді вона настільки поширена, що у багатьох мережевих проміжних програм, які використовуються в іграх, вже є вбудований пакетний шифрування.

Зазвичай це працює так: Коли ви відкриваєте з'єднання з іншою машиною, перш ніж сокет активується, відбувається обмін ключами. Я знаю, що на XBox раніше був обмін ключами Diffie-Hellman; Я не маю уявлення, чи вони все ще використовують це зараз. Після того, як у вас є ваші ключі, всі надіслані дані шифруються за допомогою клавіш та незашифровані при отриманні. Якщо хтось використовує sniffer для читання ваших пакетів, вони виглядатимуть як химерність, і навряд чи вони можуть розшифрувати їх, оскільки у них немає ключів. (Просунуті хакери можуть отримати їх завдяки доступу до пам'яті процесів запущеної гри, але це рідко і малоймовірно.)

Єдиним винятком із правила шифрування є дані VoiceChat; Законодавством у США голосовий чат має бути надіслано чітко, щоб ЦРУ змогло слухати, якщо захоче. Зазвичай консолі забезпечують теги голосових даних, щоб вони не були зашифровані.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.