P2P ağ gizleme pozisyonları?


13

Güvenli oyun oynamak için bir P2P mimarisi üzerinde çalışıyorum ve sorunu beş alt soruna ayırdım:

  • Gönderilen oyun durumunun yasa dışı bir şekilde değiştirilmesi
  • Doğru dolandırıcı dolandırıcı
  • Bir oyun durumunu kabul etme
  • "Geleceğe bakış" hilesinden kaçınmak
  • Hassas bilgileri rakiplerden gizleme

İlk dördü çözdüm ama sorun yaşadığım son soru.

Ayrıntılara girmeden önce, bir "hile kanıtı" p2p ağı oluşturma listemde kaçırdığım bir şey olup olmadığını sormak istiyorum. Ben aimbots kullanmak gibi hilelerle ilgilenmiyorum, sadece p2p ağını merkezi bir sunucu kadar güvenli hale getirmekle ilgileniyorum.

Bu nedenle, hassas bilgileri gizleme konusundaki çabalarımda, bir oyunda oyuncuların rakibinizin pozisyonunun her zaman bilinmemesi gerektiği konumuna odaklandım. Sorun daha sonra rakibinizin pozisyonunu bilmeden rakibinize pozisyonunuzu göndermeniz gerekip gerekmediğini nasıl belirleyeceğinize dönüşür.

Rakibin sizinkini karşılaştırmanız için birden fazla yanlış pozisyon gönderen gibi yöntemler çıkardım, çünkü rakibiniz böyle bir sistemi kolayca kötüye kullanabilir çünkü yanlış pozisyonlardan biri pozisyonunuzdan "görünür" olursa pozisyonunuzu alacaktır.

Yönettiğim yöntem, rakibinizden bir "görsel alan" aldığınız ve böylece konumunuzu göndermeniz gerekip gerekmediğini belirleyebilir. Ancak bu, rakibinizin görsel alanının da çok hassas bilgiler olduğu League of Legends gibi oyunlarda bir sorundur. Görsel alanı dönüştürülmüş versiyondan orijinal versiyona geri dönemeyeceğiniz anlamına gelen tekil bir matris kullanarak görsel alanı dönüştürerek bunu çözmeye çalıştım, ancak doğrusal bir dönüşüm olduğu için konumunuzun içinde olup olmadığını hala anlayabilirsiniz görme alanı ya da değil.

Bununla birlikte, bu mükemmel bir şekilde çalışmaz, dönüşümden sonra tam görsel alan geri yüklenemez, ancak görsel alandaki "eğimler" hakkında bilgi (görsel alan birkaç çizgi tarafından oluşturulur ve her çizginin eğimi belirlenebilir) orijinal görme alanını nispeten ucuz bir şekilde yeniden yapılandırmak için kullanılabilir.

Özünde, ihtiyacım olan şey, bir pozisyonun "görünür" olup olmadığını belirleyebilen bir işlevdir ve bu işlevi / görsel alanı yeniden yapılandırmak, görsel alanı yeniden yapılandırmayı tamamladıktan sonra artık bununla ilgili olmayacak kadar hesaplama gerektirir. oyun eylem. Dışarıda böyle bir yöntemi bilen süper zeki biri var mı?

Düzenle İnsanlar "vizyon alanı" hakkında bir tür karışıklık dikiş bu yüzden burada daha ayrıntılı bir açıklama vermeyi amaçlıyorum. Vizyon alanı bir dizi çizgiden oluşur, bildiğiniz gruptaki tüm çizgiler için aynı tarafta olup olmadığını, sadece çizginizin hangi tarafında olduğunu kontrol ederek bir pozisyonun bu gruplardan birinin içinde olup olmadığını kolayca kontrol edebilirsiniz. o grubun içinde ve dolayısıyla görme alanının içinde.

Ancak gönderilen bilgi bu satır değil, çizginin dönüşümü ve dönüşüm (2 x 2 tekil bir matris), yine de, aldığınız dönüşümü kullanarak ilk önce çizginizin hangi tarafında bulunduğunu kontrol edebilirsiniz. ve bu değerin dönüştürülmüş çizgiyle karşılaştırılması. Buradaki anahtar, dönüşümün tekil olmasıdır, yani orijinal hatta geri dönmek için bir ters bulmak imkansızdır. Bununla birlikte, çizginin kökenini, bilmediğinizden çok daha ucuza tespit edene kadar, dönüştürülmüş çizginin hangi tarafında çok fazla nokta olduğunu kontrol ederek çizginin yeniden yapılandırılmasını sağlayan çizginin eğimini belirlemek mümkündür. çizginin eğimi.

Aradığım şey, bir noktanın alanın yöntemden yeniden yapılandırılmasının imkansız (her zaman kaba kuvvet uygulayabileceğinizden şüphelendiğim) veya çok hesapsal olarak ağır olduğu bir alanın içinde olup olmadığını belirlemek için bir yöntemdir.


1
Yaklaşık 11 yıl boyunca bu soruna odaklandım ve listelediğiniz ilk 4 şey önemsiz, ancak sorduğunuz soru SE yanıtına uymayacaktı. Sonunda üzerinde bir teknik inceleme yayınlayacağım.
17'de MickLH

Bunun diğer sorunlara yaklaşımlarınıza çok bağlı olacağını düşünürüm
Phoenix

@MickLH Bu sorunu çözmek için bulduğunuz en iyi yöntem nedir? :) Ve dönüştürülmüş görsel / etkileşim alanlarını kullanma hakkında ne düşünüyorsunuz? Bu baktığın bir şey mi?
Elon

Dönüştürülmüş alanları araştırdım ve tamamen güvensiz olduğunu gösterdim. Bir oyuncu, dönüşümü nasıl gizlediğinize bakılmaksızın, her zaman diğer oyuncunun konumunu çıkarabilir, çünkü her iki oyuncudan biri gerekli tüm bilgilere sahip olana kadar herhangi bir şey öğrenemez, bu noktada diğer oyuncunun pozisyonunu öğrenir ve diğer oyuncuya haber vermeden protokolü sonlandırabilir.
17'de MickLH

"En iyi" yöntem gelince ... Yukarıda ciddi, en basit yöntem bile gerçekten açıklamak için tüm bir beyaz kağıda ihtiyaç karmaşık bir konudur.
17'de MickLH

Yanıtlar:


1

Bir görüş alanı için geri döndürülemez bir algoritmanız olsa bile, insanların kendilerine yakın noktaların o yerin kesişmesine neden olup olmayacağını ve rakiplerin görsel alanının kesişeceğini hesaplayarak yine de avantaj elde edebileceğini düşünüyorum. Kötü bir durumda (yeterince geniş bir görüş alanının haritaya oranı), düşmanın kesin noktasını eleme süreciyle hesaplayabilirsiniz.

Bunun yerine, belki de tüm bağlı akranlar, birbirlerinin görüp göremediklerini belirlemek için haritanın hangi kısmında olduklarını açıklamalıdır. 3. boyut önemliyse, önce haritayı 2x2 veya 2x2x2 boyutuna bölün. Sonra herkes birbirlerine 1,0 1,1 0,1 veya 0,0 olup olmadığını söyler. Aynı kadranda değilse, görüşmeleri bir sonraki kontrole kadar biter. Bu, konumlarını tam olarak korur. Aynı çeyrekte mevcutlarsa, bu alanı 4 yeni çeyreğe bölerler ve birbirleri tarafından görülebilecek kadar yakın olduklarını belirleyene kadar devam ederler.

Tabii ki kadranların sınırları ile ilgili problemler var, ancak komşu kadranlara ek sorgular ile çözülebilir olmalıdır.


-1

Bunu kesin bir cevap olarak almayın, konu gerçekten geniş (Birisi sorunuzun bulaşmasını işaretlerse şaşırmayacağım).

Bazı oyuncuları sunucu olarak kullanarak çözebilirsiniz ve bir oyuncu sunucu olarak kullanıldığında, o sunucuyu oynayan oyuncular oyununa katılamaz .

Oyununuz çok zorlu değilse, aynı oyuncu makinesinden birden fazla sunucu çalıştırabilirsiniz (elbette bu yararlı olacaktır, çünkü tüm oyuncular NAT sorunları nedeniyle sunucu olarak çalışamaz, teşekkürler IPv6 !!).

Buradaki asıl sorun, rastgele bir oyuncu sunucu olarak kullanılacağından, "güvenliği ihlal edilmiş" bir oyuncu olma şansının düşük olması veya simülasyonu hassas bilgilerin aktarılmasına izin veren "güvenliği ihlal edilmiş" bir oyuncuya aktarması ( aslında, bu noktada sunucu rastgele veri gönderebilir ve yine de kazanmayı zorlayabilir).

Yetkileri ve girişleri kontrol etmek için merkezi bir sunucu kullanırsanız, oyunları daha iyi organize etmenize ve oyuncuları kolayca yasaklamanıza izin verebilirsiniz (ancak bu artık saf bir P2P ağı olmayacaktır).

Ayrıca dünyayı dilimlere bölebilir ve görünür dilimlerin bir karmasını hesaplayabilirsiniz, ancak bu kolayca kandırılabilir, en yaygın görünen dilimler oldukça hızlı bir şekilde bir karma tablo oluşturmaya izin verecektir.

Bana göre sorunuz bir şifreleme işlevi aramaya çalışmak gibi. Test hızlı olmalı, ancak kaba kuvvet yavaş olmalıdır.

Aklıma gelen en basit şey (işimle de ilgili) bazı hızlı görme tanıma algoritması (Artırılmış gerçeklik benzeri) kullanmaktır.

Konumunuzun hızlı bir "anlık görüntüsünü" yapmayı başarırsanız (dilimlere benzer), yalnızca görünür bir şeyin etrafına yerleştirildiğinde fark edilebilir, sonra buna sahip olursunuz. Özellikle haritada hızlı atma tanıma desenleri oluşturmaya izin veren zamanlanmış öğeler varsa.

Ancak, bu tür algoritmalar mobil cihazlarda bile oldukça hızlı olsa bile, bunların bir First Person shooter için yeterince hızlı olacağını düşünmüyorum.

Ayrıca onları çok hızlı yaparsanız, sahte pozitifleriniz olacak! Ve oyuncu yine de bazı "Ortak görseller" deneyen bir oyun oluşturabilir, böylece görsellerden biri özellik algılama algoritmasıyla pozitif olarak eşleşir.

Quantum Computing'de probleminize mümkün olan tek çözümün şaşıramayacağım ve birkaç yıl içinde birileri P2P ağlarında bu içsel limiti kanıtlayan bir makale yayınlayacak.


Evet, sanırım. 4 GB veri ile bile kolayca hile yapmak için yeterli karmaları saklayabilirsiniz. Şifrelenmiş verilerdeki dönüşümleri (gerçek değeri ifşa etmeden arttırılması için şifrelenmiş bir değere bir değer toplamak gibi) bir matematik alanını okudum, belki o alanda bir şeyler bulabilirsin, ama dürüstçe anlamıyorum bu alan ^^
CoffeDeveloper

Belki de "görüş alanı" konusunda daha net olmalıydım, bu bir çizginin hangi tarafının olduğunu hesaplayabilmeniz için bir dizi çizgiden oluşur, bu çizgilerin grupları dışbükey alanları oluşturur ve bu alanların grupları bütünü oluşturur "görüş alanı". Dönüşüm her çizgiyi bir noktaya dönüştürür ve sonra o çizginin bir tarafındaki tüm noktalar bu noktanın bir tarafına dönüştürülür, böylece çizginin hangi tarafının orijinal olarak hesaplanabileceğini, hatta orijinal çizgi.
Elon

"ve bir oyuncu sunucu olarak kullanıldığında, o sunucuyu oynayan oyuncuların oyuna katılamaz" Yani P2P'i mi düşürmek istiyorsun?
Hobbamok

-3

'Rakiplerden hassas bilgileri gizleme' derken, paket koklayıcıları olan kişilerin trafiğinizi dinlemelerini ve oyununuz hakkında bilgi almasını önlemek mi istiyorsunuz?

Eğer öyleyse, bunun kolay bir cevabı var; çoğu AAA oyunu (ve kesinlikle konsol oyunları) şifreleme kullanır. Aslında, o kadar yaygındır ki, oyunlarda kullanılan ağ orta yollarının çoğunda zaten paket şifreleme yerleşiktir.

Genellikle şu şekilde çalışır: Başka bir makineye bağlantı açtığınızda, soket aktif hale gelmeden önce bir Anahtar değişimi gerçekleşir. XBox üzerinde Diffie-Hellman anahtar değişimi olduğunu biliyorum; Hala kullanıyorlar mı bilmiyorum. Daha sonra anahtarlarınızı aldıktan sonra, gönderilen tüm veriler anahtarlar kullanılarak şifrelenir ve alındığında şifrelenmez. Birisi paketlerinizi okumak için bir dinleyici kullanırsa, anlamsız görünecek ve anahtarları olmadığı için şifreleri çözmesi olası değildir. (Gelişmiş bilgisayar korsanları, çalışan oyunun işlem belleğine erişerek bunları alabilirler, ancak bu nadir ve olası değildir.)

Şifreleme kuralının tek istisnası VoiceChat verileridir; ABD'de yasa gereği, CIA'nin isterse dinleyebilmesi için sesli sohbet açık bir şekilde gönderilmelidir. Konsollar genellikle ses verilerini şifrelenmemesi için etiketlemek için bir yol sağlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.