Posisi menyembunyikan jaringan P2P?

13

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.

Elon
sumber
1
Saya telah menghabiskan sekitar 11 tahun berfokus pada masalah yang tepat ini, dan 4 hal pertama yang Anda daftarkan itu sepele tetapi yang Anda tanyakan tidak akan cocok dengan jawaban SE. Saya akhirnya akan mendapatkan whitepaper di atasnya.
MickLH
Saya akan berpikir bahwa ini akan sangat tergantung pada pendekatan Anda terhadap masalah lain
Phoenix
@MickLH Apa metode terbaik yang Anda miliki untuk menyelesaikan masalah ini? :) Dan apa pendapat Anda tentang menggunakan bidang visual / interaksi yang diubah? Apakah ini sesuatu yang telah Anda teliti?
Elon
Saya telah menyelidiki bidang yang diubah dan menunjukkan bahwa itu sama sekali tidak aman. Satu pemain akan selalu dapat menyimpulkan posisi pemain lain, tidak peduli bagaimana Anda menyembunyikan transformasi, karena tidak ada pemain yang dapat mempelajari apa pun sampai salah satu dari mereka memiliki semua informasi yang diperlukan, di mana mereka mempelajari posisi pemain lain dan dapat mengakhiri protokol tanpa memberi tahu pemain lain.
MickLH
Adapun metode "terbaik" ... Saya serius di atas, bahkan metode paling sederhana adalah topik rumit yang benar-benar membutuhkan seluruh whitepaper untuk menjelaskan.
MickLH

Jawaban:

1

Saya pikir bahwa bahkan jika Anda memiliki algoritma yang tidak dapat diubah untuk bidang visi, orang masih bisa mendapatkan keuntungan dengan menghitung jika titik terdekat mereka akan menghasilkan persimpangan dari lokasi itu dan bidang visual lawan akan berpotongan. Dalam kasus yang buruk (dari bidang visi yang cukup besar untuk memetakan rasio) Anda dapat menghitung dengan proses menghilangkan titik yang tepat dari musuh Anda.

Saya pikir sebagai gantinya mungkin semua rekan yang terhubung harus mengumumkan di bagian peta mana mereka berada, untuk menentukan apakah mungkin jika mereka dapat melihat satu sama lain atau tidak. Pertama-tama pisahkan peta menjadi 2x2 atau 2x2x2 jika dimensi ke-3 penting. Kemudian semua orang saling memberi tahu jika mereka berada di 1,0 1,1 0,1 atau 0,0. Jika mereka tidak berada di kuadran yang sama, percakapan mereka selesai sampai pemeriksaan selanjutnya. Ini melindungi lokasi mereka. Jika mereka ada di kuadran yang sama, mereka akan membagi ruang ini menjadi 4 paha depan baru, dan melanjutkan sampai mereka menentukan bahwa mereka cukup dekat untuk dilihat oleh satu sama lain.

Tentu saja ada masalah dengan batas kuadran, tetapi harus dipecahkan dengan pertanyaan tambahan ke kuadran tetangga.

pengguna115137
sumber
-1

Jangan menganggap ini sebagai jawaban yang pasti, topiknya sangat luas (saya tidak akan terkejut jika seseorang menandai pertanyaan Anda yang benar).

Anda dapat menyelesaikannya dengan menggunakan beberapa pemain sebagai server, dan ketika pemain digunakan sebagai server, ia tidak dapat berpartisipasi dalam permainan pemain yang benar-benar memainkan server itu .

Jika permainan Anda tidak terlalu menuntut, Anda bisa juga menjalankan beberapa server dari mesin pemain yang sama (tentu saja itu akan berguna, karena tidak semua pemain dapat berjalan sebagai server karena masalah NAT, terima kasih Anda IPv6 !!).

Masalah utama di sini adalah bahwa karena pemain acak akan digunakan sebagai server, ada sedikit kemungkinan ia akan menjadi pemain "dikompromikan" atau bahwa ia akan meneruskan simulasi ke pemain "dikompromikan", yang memungkinkan informasi sensitif diteruskan ( baik, pada kenyataannya pada saat itu server dapat mengirim data sewenang-wenang dan memaksa menang pula).

Jika Anda menggunakan server pusat untuk memeriksa otorisasi dan login maka Anda dapat mengizinkan untuk mengatur permainan dengan lebih baik dan untuk melarang pemain dengan mudah (namun itu tidak lagi menjadi jaringan P2P murni).

Anda juga bisa membagi dunia menjadi irisan dan menghitung hash dari irisan yang terlihat, tetapi ini bisa dengan mudah diakali, irisan yang terlihat paling umum akan memungkinkan untuk membangun tabel hash dengan cukup cepat.

Bagi saya pertanyaan Anda seperti mencoba mencari fungsi kriptografi. Tes harus cepat, tetapi brute force harus lambat ..

Hal paling sederhana yang muncul di pikiran saya (juga terkait dengan pekerjaan saya) adalah menggunakan beberapa algoritma pengenalan visi cepat (Augmented reality-like).

Jika Anda berhasil membuat "snapshot" cepat dari lokasi Anda (mirip dengan irisan), daripada dapat dikenali hanya ketika ditempatkan di sekitar sesuatu yang terlihat maka Anda akan memilikinya. Terutama jika ada elemen waktunya di peta yang memungkinkan untuk menghasilkan pola pengenalan membuang cepat.

Namun, bahkan jika algoritma tersebut menjadi sangat cepat bahkan di ponsel, saya tidak berpikir itu akan cukup cepat untuk penembak Orang Pertama.

Juga jika Anda membuatnya terlalu cepat, Anda akan memiliki positif palsu! Dan seorang pemain tetap dapat membuat game yang mencoba beberapa "Visual yang umum" sehingga salah satu visualnya cocok dengan algoritma pendeteksian fitur.

Saya tidak akan terkejut bahwa satu-satunya solusi yang mungkin untuk masalah Anda akan mungkin dalam Quantum Computing, dan dalam beberapa tahun seseorang menerbitkan makalah yang memberikan batas intrinsik dalam jaringan P2P.

GameDeveloper
sumber
Ya saya kira begitu. Bahkan dengan data 4GB Anda dapat menyimpan hash yang cukup untuk menipu dengan mudah. Saya membaca tentang bidang matematika yang tentang transformasi pada data terenkripsi (seperti menjumlahkan nilai ke nilai terenkripsi sehingga bertambah tanpa mengungkapkan nilai sebenarnya), mungkin Anda dapat menemukan sesuatu di bidang itu, tapi jujur ​​saya tidak mengerti bidang itu ^^
GameDeveloper
Mungkin saya seharusnya lebih jelas pada "bidang visi", itu terdiri dari banyak garis sehingga Anda dapat menghitung sisi mana dari garis ini,, kelompok garis seperti itu membentuk daerah cembung dan kelompok daerah seperti itu membentuk keseluruhan "bidang visi". Transformasi mengubah setiap garis menjadi satu titik dan kemudian semua titik yang berada di satu sisi garis itu ditransformasikan ke satu sisi dari titik ini sehingga Anda masih dapat menghitung sisi mana dari garis itu semula, bahkan jika Anda tidak dapat menghitung garis asli.
Elon
"dan ketika seorang pemain digunakan sebagai server, ia tidak dapat berpartisipasi dalam permainan para pemain yang benar-benar memainkan server itu" Jadi maksud Anda seperti menjatuhkan P2P?
Hobbamok
-3

Ketika Anda mengatakan 'Menyembunyikan informasi sensitif dari lawan', Anda berarti Anda ingin menghindari orang-orang dengan paket sniffer dari mendengarkan lalu lintas Anda dan mendapatkan info tentang permainan Anda?

Jika demikian, ada jawaban mudah untuk ini; kebanyakan game AAA (dan tentunya game konsol) menggunakan enkripsi. Bahkan, ini sangat umum sehingga banyak middlewares jaringan yang digunakan dalam gim sudah memiliki enkripsi paket bawaan.

Biasanya berfungsi seperti ini: Ketika Anda membuka koneksi ke komputer lain, sebelum soket menjadi aktif, pertukaran kunci terjadi. Saya tahu bahwa di XBox dulu pertukaran kunci Diffie-Hellman; Saya tidak tahu apakah mereka masih menggunakannya sekarang. Kemudian setelah Anda memiliki kunci, semua data yang dikirim dienkripsi menggunakan kunci dan tidak dienkripsi pada tanda terima. Jika seseorang menggunakan sniffer untuk membaca paket Anda, mereka akan terlihat seperti omong kosong dan tidak mungkin mereka dapat mendekripsi mereka karena mereka tidak memiliki kunci. (Peretas tingkat lanjut mungkin bisa mendapatkannya dengan mengakses memori proses dari permainan yang sedang berjalan, tetapi itu jarang dan tidak mungkin.)

Satu-satunya pengecualian pada aturan enkripsi adalah data VoiceChat; menurut undang-undang di AS, obrolan suara harus dikirim secara tidak jelas sehingga CIA dapat mendengarkan jika mereka mau. Konsol biasanya menyediakan cara untuk menandai data suara sehingga tidak dienkripsi.

JanSolo
sumber