Saya telah mengerjakan arsitektur P2P untuk permainan aman dan saya telah membagi masalahnya menjadi lima sub-masalah:
- Modifikasi yang tidak sah dari status permainan yang dikirim
- Curang curang secara akurat
- Menyetujui kondisi permainan
- Menghindari cheat "lihat ke depan"
- Menyembunyikan informasi sensitif dari lawan
Empat yang pertama saya sudah hampir semua dipecahkan tetapi ini adalah yang terakhir yang saya mengalami kesulitan.
Sebelum saya masuk ke detail saya hanya ingin bertanya apakah ada sesuatu yang saya lewatkan dalam daftar saya membuat jaringan P2P "cheat proof". Saya tidak tertarik dengan cheat seperti menggunakan aimbots, saya hanya tertarik untuk membuat jaringan p2p seaman server terpusat.
Jadi dalam upaya saya sejauh ini untuk menyembunyikan informasi sensitif saya telah fokus pada posisi pemain dalam permainan di mana posisi lawan Anda tidak selalu diketahui. Masalahnya kemudian menjadi bagaimana menentukan apakah Anda harus mengirim posisi Anda ke lawan tanpa mengetahui posisi lawan Anda.
Saya telah mengesampingkan metode seperti lawan yang mengirim beberapa posisi palsu agar Anda dapat membandingkan posisi Anda juga karena lawan Anda dapat dengan mudah menyalahgunakan sistem seperti itu karena ia akan mendapatkan posisi Anda jika salah satu posisi palsu itu "terlihat" dari posisi Anda.
Metode yang saya telah fokus pada satu di mana Anda menerima "bidang visual" dari lawan Anda dan dengan demikian dapat menentukan apakah Anda harus mengirim posisi Anda atau tidak. Namun ini adalah masalah dalam permainan seperti League of Legends di mana bidang visual lawan Anda juga informasi yang sangat sensitif. Saya telah mencoba untuk menyelesaikan ini dengan mengubah bidang visual menggunakan matriks singular yang berarti Anda tidak dapat pergi dari versi yang ditransformasikan dari bidang visual kembali ke versi aslinya, tetapi karena ini adalah transformasi linear, Anda masih dapat mencari tahu apakah posisi Anda ada di dalam bidang visual atau tidak.
Namun ini tidak bekerja dengan sempurna, bidang visual yang tepat tidak dapat dipulihkan setelah transformasi, tetapi informasi tentang "lereng" di bidang visual (bidang visual dibangun oleh beberapa garis, dan kemiringan setiap garis dapat ditentukan) dapat dipulihkan dan ini dapat digunakan untuk merekonstruksi bidang visual asli yang relatif murah.
Pada dasarnya, yang saya butuhkan adalah fungsi yang dapat menentukan apakah suatu posisi "terlihat" atau tidak, dan merekonstruksi fungsi / bidang visual ini harus sangat menuntut komputasi sehingga setelah Anda selesai merekonstruksi bidang visual, tidak lagi relevan untuk game beraksi. Apakah ada orang super pintar di luar sana yang kebetulan mengetahui metode seperti itu?
Sunting Orang-orang agak bingung tentang keseluruhan "bidang visi" jadi saya bertujuan untuk memberikan penjelasan yang lebih rinci di sini. Bidang penglihatan terdiri dari sekelompok kumpulan garis, Anda dapat dengan mudah memeriksa apakah suatu posisi ada di dalam salah satu kelompok ini dengan hanya memeriksa sisi mana dari garis posisi Anda, jika berada di sisi yang sama untuk semua garis dalam grup yang Anda kenal itu di dalam kelompok itu dan dengan demikian di dalam bidang visi.
Namun informasi yang dikirim bukan garis ini, tetapi transformasi garis dan transformasi (2 dengan 2 singular a matrix), Anda masih dapat memeriksa sisi mana dari posisi Anda berada dengan terlebih dahulu mengubahnya menggunakan transformasi yang Anda terima dan membandingkan nilai itu dengan garis yang diubah. Kuncinya di sini adalah bahwa transformasi itu singular, artinya tidak mungkin menemukan invers untuk kembali ke garis asli. Namun dimungkinkan untuk menentukan kemiringan garis yang membuat merekonstruksi garis dengan hanya memeriksa sisi mana dari garis yang ditransformasi itu banyak titik terletak sampai Anda telah menentukan dengan tepat asal muasal garis yang jauh lebih murah secara komputasi daripada jika Anda tidak tahu kemiringan garis.
Apa yang saya cari adalah metode untuk menentukan apakah suatu titik berada di dalam suatu area, di mana merekonstruksi area dari metode tersebut adalah tidak mungkin (yang saya ragu ada karena Anda selalu dapat dengan kasar memaksakannya) atau sangat komputasional.