Я працюю над архітектурою P2P для безпечних ігор, і поділив проблему на п’ять підпроблем:
- Незаконне змінення стану надісланої гри
- Акуратно скиньте шахраїв
- Погоджуючись на ігровий стан
- Уникаючи чіт "наперед"
- Приховування конфіденційної інформації від опонентів
Перші чотири я майже все вирішив, але це останній, з яким я маю проблеми.
Перш ніж розібратися в деталях, я просто хочу запитати, чи є щось, що я пропустив у своєму списку, щоб зробити мережу p2p "підтвердженням обману". Мене не цікавлять чіти, такі як використання targetbots, мені цікаво лише зробити мережу p2p настільки безпечною, як централізований сервер.
Тому в своїх зусиллях щодо приховування конфіденційної інформації я зосередився на позиції гравців у грі, де позиція вашого опонента не завжди повинна бути відомою. Тоді проблема стає в тому, як визначити, чи слід надсилати вам позицію опоненту, не знаючи позиції опонента.
Я виключав такі методи, як опонент, який надсилає вам кілька помилкових позицій для порівняння ваших, оскільки ваш опонент може легко зловживати такою системою, оскільки він отримає вашу позицію, якщо одна з помилкових позицій трапилася "видно" з вашої позиції.
Метод, який я зосереджував на тому, в якому ви отримуєте "зорове поле" від опонента, і таким чином можу визначити, чи слід надсилати свою позицію чи ні. Однак це проблема в таких іграх, як League of Legends, де поле зору вашого опонента також є дуже чутливою інформацією. Я намагався вирішити це шляхом перетворення поля зору за допомогою сингулярної матриці, що означає, що ви не можете перейти від трансформованої версії зорового поля до початкової версії, але оскільки це лінійне перетворення, ви все ще можете з'ясувати, чи ваше положення знаходиться всередині зорове поле чи ні.
Однак це не працює ідеально, точне зорове поле не може бути відновлено після перетворення, але інформація про "схили" у полі зору (поле зору побудовано кількома лініями, і нахил кожної лінії може бути визначений) може бути відновлено, і це можна використати для відновної недорогої реконструкції вихідного зорового поля.
По суті, мені потрібна функція, яка може визначити, чи є позиція "видимою" чи ні, і реконструкція цієї функції / зорового поля повинна бути настільки обчислювально вимогою, що після того, як ви закінчите реконструкцію поля зору, це вже не має значення для гра в дії. Чи є там супер розумна людина, яка випадково знає такий метод?
Редагувати Люди швом заплутано у всьому "полі зору", тому я маю на меті дати тут більш детальне пояснення. Поле зору складається з груп набору ліній, ви можете легко перевірити, чи є позиція всередині однієї з цих груп, просто перевіривши, на якій стороні лінії знаходиться ваше положення, якщо воно є на одній стороні для всіх рядків цієї групи, яких ви знаєте це всередині цієї групи, а значить, всередині поля зору.
Інформація, що надсилається, це не ця лінія, а перетворення рядка та перетворення (2 на 2 сингулярна матриця), ви все одно можете перевірити, на якій стороні лінії знаходиться ваша позиція, попередньо перетворивши її, використовуючи отримане перетворення. і порівняння цього значення з перетвореною лінією. Ключовим тут є те, що перетворення є сингулярним, тобто неможливо знайти зворотну сторону, щоб повернутися до початкової лінії. Однак можна визначити нахил лінії, яка робить реконструкцію лінії, просто перевіривши, на якій стороні перетвореної лінії лежить багато точок, поки ви не визначили походження лінії набагато обчислювально дешевше, ніж якщо б ви не знали нахил лінії.
Що я шукаю, це метод визначення того, чи знаходиться точка всередині області, де реконструкція області за методом або неможлива (що, я сумніваюся, існує, оскільки ви завжди можете її змусити), або дуже обчислювально важка.