เครือข่าย P2P ซ่อนตำแหน่ง?


13

ฉันทำงานกับสถาปัตยกรรม P2P เพื่อการเล่นเกมที่ปลอดภัยและฉันได้แบ่งปัญหาออกเป็นห้าปัญหาย่อย:

  • การดัดแปลงสถานะของเกมที่ส่งมาอย่างผิดกฎหมาย
  • วางขี้โกงอย่างแม่นยำ
  • ยอมรับสถานะเกม
  • หลีกเลี่ยงการโกง "มองไปข้างหน้า"
  • ซ่อนข้อมูลที่ละเอียดอ่อนจากฝ่ายตรงข้าม

สี่คนแรกที่ฉันได้รับการแก้ไขทั้งหมดสวยมาก แต่มันเป็นคนสุดท้ายที่ฉันมีปัญหากับ

ก่อนที่ฉันจะลงรายละเอียดฉันแค่อยากถามว่ามีอะไรที่ฉันไม่ได้ทำในรายการทำเครือข่าย p2p "cheat proof" หรือไม่ ฉันไม่สนใจกลโกงเช่นการใช้ aimbots ฉันแค่สนใจที่จะทำให้เครือข่าย p2p ปลอดภัยเหมือนเซิร์ฟเวอร์ส่วนกลาง

ดังนั้นในความพยายามของฉันจนถึงการซ่อนข้อมูลที่ละเอียดอ่อนฉันได้มุ่งเน้นไปที่ตำแหน่งของผู้เล่นในเกมที่ไม่ทราบตำแหน่งของฝ่ายตรงข้ามเสมอ ปัญหาก็จะกลายเป็นวิธีการตรวจสอบว่าคุณควรส่งตำแหน่งให้คู่ต่อสู้ของคุณโดยไม่ทราบตำแหน่งของฝ่ายตรงข้าม

ฉันได้ตัดวิธีการเช่นฝ่ายตรงข้ามที่ส่งตำแหน่งเท็จหลายตำแหน่งเพื่อเปรียบเทียบคุณเช่นกันเนื่องจากฝ่ายตรงข้ามของคุณสามารถใช้ระบบดังกล่าวได้อย่างง่ายดายเนื่องจากเขาจะได้ตำแหน่งของคุณหากตำแหน่งเท็จปรากฏขึ้นจากตำแหน่งของคุณ

วิธีที่ฉันมุ่งเน้นไปที่สิ่งที่คุณได้รับ "สนามภาพ" จากฝ่ายตรงข้ามของคุณและสามารถกำหนดได้ว่าคุณควรส่งตำแหน่งของคุณหรือไม่ อย่างไรก็ตามนี่เป็นปัญหาในเกมเช่น League of Legends ซึ่งข้อมูลการมองเห็นของฝ่ายตรงข้ามเป็นข้อมูลที่มีความอ่อนไหวสูง ฉันได้พยายามแก้ปัญหานี้โดยเปลี่ยนฟิลด์ภาพโดยใช้เมทริกซ์เอกพจน์หมายความว่าคุณไม่สามารถเปลี่ยนจาก Visual Field ที่แปลงแล้วกลับไปเป็นเวอร์ชันดั้งเดิมได้ แต่เนื่องจากเป็นการแปลงเชิงเส้นคุณจึงสามารถทราบได้ว่าตำแหน่งของคุณอยู่ภายในหรือไม่ เขตข้อมูลภาพหรือไม่

อย่างไรก็ตามนี่ไม่ได้ผลอย่างสมบูรณ์สนามภาพที่แน่นอนไม่สามารถเรียกคืนได้หลังจากการเปลี่ยนแปลง แต่ข้อมูลเกี่ยวกับ "ความลาด" ในเขตข้อมูลภาพ (เขตข้อมูลภาพถูกสร้างขึ้นโดยหลายบรรทัดและสามารถกำหนดความลาดชันของแต่ละบรรทัด) คืนค่าและสิ่งนี้สามารถใช้เพื่อสร้างฟิลด์ภาพต้นฉบับที่ค่อนข้างใหม่

ในสาระสำคัญสิ่งที่ฉันต้องการก็คือฟังก์ชั่นที่สามารถตัดสินได้ว่าตำแหน่งนั้นเป็น "ที่มองเห็นได้" หรือไม่และการสร้างฟังก์ชั่น / ฟิลด์ภาพขึ้นมาใหม่นั้นจำเป็นต้องมีการคำนวณแบบเรียกร้อง เกมในการดำเนินการ มีบุคคลที่ฉลาดสุด ๆ คนหนึ่งที่รู้วิธีนี้หรือไม่?

แก้ไข ผู้คนกำลังสับสนเกี่ยวกับ "เขตข้อมูลการมองเห็น" ทั้งหมดดังนั้นฉันจึงตั้งใจจะให้คำอธิบายโดยละเอียดเพิ่มเติมที่นี่ เขตข้อมูลการมองเห็นประกอบด้วยกลุ่มของชุดของเส้นคุณสามารถตรวจสอบได้อย่างง่ายดายว่าตำแหน่งอยู่ในกลุ่มใดกลุ่มหนึ่งโดยเพียงแค่ตรวจสอบว่าตำแหน่งของคุณอยู่ที่ด้านใดของเส้นถ้ามันอยู่ในด้านเดียวกันสำหรับทุกสายในกลุ่มนั้น มันอยู่ในกลุ่มนั้นและภายในเขตการมองเห็น

ข้อมูลที่ส่งไม่ใช่บรรทัดนี้ แต่เป็นการแปลงของเส้นและการแปลง (เมทริกซ์เอกพจน์ 2 คูณ 2) คุณยังสามารถตรวจสอบว่าตำแหน่งของคุณอยู่ที่ตำแหน่งใดโดยการแปลงเป็นครั้งแรกโดยใช้การแปลงที่คุณได้รับ และเปรียบเทียบค่านั้นกับสายที่แปลงแล้ว กุญแจสำคัญในที่นี้คือการแปลงเป็นเอกพจน์หมายความว่ามันเป็นไปไม่ได้ที่จะหาผกผันกลับไปที่บรรทัดเดิม อย่างไรก็ตามมันเป็นไปได้ที่จะกำหนดความชันของเส้นที่ทำให้สร้างเส้นขึ้นใหม่โดยเพียงแค่ตรวจสอบว่าจุดใดที่อยู่ด้านข้างของบรรทัดที่ถูกเปลี่ยนเป็นจุดจำนวนมากจนกระทั่งคุณได้ระบุจุดกำเนิดของเส้นที่คำนวณได้ถูกกว่าถ้าคุณไม่รู้ ความชันของเส้น

สิ่งที่ฉันกำลังมองหาคือวิธีการในการพิจารณาว่าจุดหนึ่งอยู่ภายในพื้นที่ใดซึ่งการสร้างพื้นที่จากวิธีดังกล่าวเป็นไปไม่ได้ (ซึ่งฉันสงสัยว่ามีอยู่เพราะคุณสามารถบังคับมันได้) หรือหนักมาก


1
ฉันใช้เวลาประมาณ 11 ปีที่มุ่งเน้นไปที่ปัญหาที่แน่นอนนี้และสิ่งที่คุณระบุไว้ 4 รายการแรกนั้นเล็กน้อย แต่สิ่งที่คุณถามมานั้นไม่เหมาะกับคำตอบ SE ในที่สุดฉันจะเอากระดาษขาวออกมา
MickLH

ฉันคิดว่าสิ่งนี้จะขึ้นอยู่กับแนวทางของคุณในการแก้ไขปัญหาอื่น ๆ
Phoenix

@MickLH คุณมีวิธีที่ดีที่สุดในการแก้ไขปัญหานี้อย่างไร :) และคุณคิดอย่างไรเกี่ยวกับการใช้ฟิลด์ภาพ / การโต้ตอบเปลี่ยนรูป? นี่คือบางสิ่งที่คุณมองเข้าไปใช่ไหม
Elon

ฉันตรวจสอบฟิลด์ที่แปลงแล้วและแสดงว่ามันไม่ปลอดภัยอย่างเต็มที่ ผู้เล่นคนหนึ่งจะสามารถอนุมานตำแหน่งของผู้เล่นคนอื่น ๆ ได้เสมอไม่ว่าคุณจะซ่อนการเปลี่ยนแปลงอย่างไรเนื่องจากผู้เล่นทั้งสองไม่สามารถเรียนรู้อะไรได้จนกว่าผู้เล่นคนใดคนหนึ่งจะมีข้อมูลที่จำเป็นทั้งหมด สามารถยุติโปรโตคอลโดยไม่บอกผู้เล่นคนอื่น
MickLH

สำหรับวิธีที่ "ดีที่สุด" ... ฉันจริงจังมากแม้แต่วิธีที่ง่ายที่สุดก็คือหัวข้อที่สลับซับซ้อนซึ่งต้องใช้กระดาษขาวทั้งหมดเพื่ออธิบาย
MickLH

คำตอบ:


1

ฉันคิดว่าแม้ว่าคุณจะมีอัลกอริทึมกลับไม่ได้สำหรับเขตการมองเห็นผู้คนยังสามารถได้รับประโยชน์โดยการคำนวณว่าจุดที่อยู่ใกล้เคียงกับพวกเขาจะส่งผลให้จุดตัดของตำแหน่งนั้นและเขตข้อมูลของฝ่ายตรงข้ามจะตัดกัน ในกรณีที่ไม่ดี (ของสนามสายตาที่มีขนาดใหญ่พอที่จะอัตราส่วนแผนที่) คุณสามารถคำนวณโดยการกำจัดจุดที่แน่นอนของศัตรูของคุณ

ฉันคิดว่าบางทีเพื่อนทั้งหมดที่เชื่อมต่อกันควรประกาศว่าเป็นส่วนหนึ่งของแผนที่เพื่อพิจารณาว่าเป็นไปได้หรือไม่หากพวกเขาเห็นกันหรือไม่ ก่อนอื่นให้แบ่งแผนที่เป็น 2x2 หรือ 2x2x2 หากส่วนข้อมูลที่ 3 มีความสำคัญ จากนั้นทุกคนบอกซึ่งกันและกันว่าพวกเขาอยู่ใน 1,0 1,1 0,1 หรือ 0,0 หากพวกเขาไม่อยู่ในควอดเรนเดียวกันการสนทนาของพวกเขาจะสิ้นสุดลงจนกว่าจะมีการตรวจสอบครั้งต่อไป สิ่งนี้จะป้องกันตำแหน่งที่แน่นอน หากพวกเขามีอยู่ในจตุภาคเดียวกันพวกเขาจะแบ่งพื้นที่นี้ออกเป็นสี่ล่ามใหม่และดำเนินการต่อไปจนกว่าพวกเขาจะพบว่าพวกเขาอยู่ใกล้พอที่จะเห็นกันและกัน

แน่นอนว่ามีปัญหาเกี่ยวกับเส้นขอบของจตุภาค แต่มันควรจะแก้ไขได้โดยการสอบถามเพิ่มเติมเพื่อ Quadrants ใกล้เคียง


-1

อย่าใช้สิ่งนี้เป็นคำตอบที่ชัดเจนหัวข้อนั้นกว้างมาก (ฉันจะไม่แปลกใจถ้ามีคนทำเครื่องหมายคำถามของคุณ)

คุณสามารถแก้ไขได้โดยใช้ผู้เล่นบางคนเป็นเซิร์ฟเวอร์และเมื่อผู้เล่นใช้เป็นเซิร์ฟเวอร์จะไม่สามารถมีส่วนร่วมในเกมของผู้เล่นที่เล่นเซิร์ฟเวอร์นั้นจริง

หากเกมของคุณไม่ต้องการมากเกินไปคุณสามารถใช้เซิร์ฟเวอร์หลายเครื่องจากเครื่องเล่นเดียวกัน (แน่นอนว่าจะมีประโยชน์เนื่องจากผู้เล่นบางคนไม่สามารถทำงานเป็นเซิร์ฟเวอร์เนื่องจากปัญหา NAT ขอบคุณ IPv6 !!)

ปัญหาหลักคือที่นี่เนื่องจากผู้เล่นแบบสุ่มจะถูกใช้เป็นเซิร์ฟเวอร์มีโอกาสเล็กน้อยที่จะเป็นผู้เล่น "ที่ถูกบุกรุก" หรือจะผ่านการจำลองไปยังผู้เล่นที่ "ถูกบุกรุก" ซึ่งอนุญาตให้ส่งข้อมูลที่ละเอียดอ่อนไปได้ ( ในความเป็นจริง ณ จุดนั้นเซิร์ฟเวอร์สามารถส่งข้อมูลโดยพลการและบังคับให้ชนะต่อไป)

หากคุณใช้เซิร์ฟเวอร์กลางเพื่อตรวจสอบการอนุญาตและการเข้าสู่ระบบคุณสามารถอนุญาตให้จัดระเบียบเกมได้ดีขึ้นและห้ามผู้เล่นได้อย่างง่ายดาย (แต่นั่นจะไม่ใช่เครือข่าย P2P บริสุทธิ์อีกต่อไป)

คุณสามารถแบ่งโลกออกเป็นชิ้น ๆ และคำนวณแฮชของชิ้นที่มองเห็นได้ แต่สิ่งนี้อาจถูกหลอกได้ง่ายชิ้นที่มองเห็นได้ทั่วไปส่วนใหญ่จะอนุญาตให้สร้างตารางของแฮชได้อย่างรวดเร็ว

สำหรับฉันคำถามของคุณเหมือนพยายามค้นหาฟังก์ชันการเข้ารหัสลับ การทดสอบควรรวดเร็ว แต่แรงเดรัจฉานควรจะช้า ..

สิ่งที่ง่ายที่สุดที่อยู่ในใจของฉัน (เกี่ยวข้องกับงานของฉัน) คือการใช้อัลกอริทึมการรู้จำภาพบางส่วน (เพิ่มความเป็นจริงเหมือน)

หากคุณจัดการเพื่อให้ "ภาพรวม" อย่างรวดเร็วของสถานที่ของคุณ (คล้ายกับชิ้น) กว่าจะได้รับการยอมรับเฉพาะเมื่อวางไว้รอบ ๆ สิ่งที่มองเห็นได้แล้วคุณจะต้องมีมัน โดยเฉพาะอย่างยิ่งหากมีองค์ประกอบที่มีเวลาในแผนที่ที่อนุญาตให้สร้างรูปแบบการรู้จำที่รวดเร็ว

อย่างไรก็ตามแม้ว่าอัลกอริทึมดังกล่าวจะค่อนข้างเร็วแม้บนมือถือฉันไม่คิดว่ามันจะเร็วพอสำหรับนักกีฬาคนแรก

นอกจากนี้ถ้าคุณทำให้มันเร็วเกินไปคุณจะได้ผลบวกปลอม! และผู้เล่นสามารถสร้างเกมที่ลองใช้ "ภาพทั่วไป" เพื่อให้หนึ่งในภาพนั้นตรงกับอัลกอริทึมการตรวจจับคุณลักษณะ

ฉันจะไม่แปลกใจที่ทางออกที่เป็นไปได้เพียงอย่างเดียวสำหรับปัญหาของคุณคือความเป็นไปได้ในการคำนวณควอนตัมและภายในไม่กี่ปีที่มีคนตีพิมพ์บทความที่ตีพิมพ์ในข้อ จำกัด ที่แท้จริงภายในเครือข่าย P2P


ใช่ฉันคิดว่า แม้จะมีข้อมูลขนาด 4GB คุณก็สามารถเก็บแฮชได้มากพอที่จะโกงได้อย่างง่ายดาย ฉันอ่านเกี่ยวกับเขตข้อมูลคณิตศาสตร์ที่เกี่ยวกับการแปลงข้อมูลที่เข้ารหัส (เช่นการรวมค่าเป็นค่าเข้ารหัสเพื่อให้เพิ่มขึ้นโดยไม่เปิดเผยมูลค่าจริง) บางทีคุณอาจพบบางสิ่งในเขตข้อมูลนั้น แต่โดยสุจริตฉันไม่เข้าใจ ฟิลด์นั้น ^^
CoffeDeveloper

บางทีฉันควรจะชัดเจนกว่าใน "สนามการมองเห็น" ซึ่งประกอบด้วยเส้นจำนวนหนึ่งเพื่อให้คุณสามารถคำนวณว่าจุดใดของเส้นนี้คือจุดใดกลุ่มของเส้นเหล่านี้ประกอบขึ้นเป็นพื้นที่นูนและกลุ่มของพื้นที่ดังกล่าวประกอบขึ้นทั้งหมด "สนามมองเห็น" การแปลงจะแปลงแต่ละบรรทัดให้เป็นจุดหนึ่งและจากนั้นจุดทั้งหมดที่อยู่ด้านหนึ่งของบรรทัดนั้นจะถูกแปลงเป็นด้านหนึ่งของจุดนี้เพื่อให้คุณยังคงสามารถคำนวณได้ว่าด้านใดของเส้นนั้นในตอนแรกแม้ว่าคุณจะไม่สามารถคำนวณ บรรทัดเดิม
Elon

"และเมื่อผู้เล่นใช้เป็นเซิร์ฟเวอร์มันไม่สามารถเข้าร่วมในเกมของผู้เล่นที่เล่นเซิร์ฟเวอร์นั้นจริง ๆ " ดังนั้นคุณหมายถึงปล่อย P2P หรือเปล่า?
Hobbamok

-3

เมื่อคุณพูดว่า 'ซ่อนข้อมูลที่ละเอียดอ่อนจากฝ่ายตรงข้าม' คุณหมายถึงคุณต้องการหลีกเลี่ยงคนที่มีกลุ่มสูดดมแพ็คเก็ตจากการฟังปริมาณข้อมูลและรับข้อมูลเกี่ยวกับเกมของคุณหรือไม่

ถ้าเป็นเช่นนั้นมีคำตอบที่ง่ายสำหรับเรื่องนี้; เกม AAA ส่วนใหญ่ (และเกมคอนโซล) ใช้การเข้ารหัส ในความเป็นจริงมันเป็นเรื่องธรรมดามากที่มิดเดิลแวร์เครือข่ายจำนวนมากที่ใช้ในเกมนั้นมีการเข้ารหัสแพ็คเก็ตในตัว

โดยปกติแล้วจะทำงานดังนี้: เมื่อคุณเปิดการเชื่อมต่อกับเครื่องอื่นก่อนที่ซ็อกเก็ตจะเปิดใช้งานการแลกเปลี่ยนคีย์จะเกิดขึ้น ฉันรู้ว่าใน XBox มันเคยเป็นการแลกเปลี่ยนคีย์ Diffie-Hellman ฉันไม่รู้ว่าพวกเขายังใช้อยู่หรือไม่ จากนั้นเมื่อคุณมีกุญแจของคุณข้อมูลที่ส่งทั้งหมดจะถูกเข้ารหัสโดยใช้กุญแจและไม่ได้รับการเข้ารหัสเมื่อได้รับ หากใครบางคนใช้ดมกลิ่นเพื่ออ่านแพ็คเก็ตของคุณพวกเขาจะดูเหมือนพูดไม่ชัดและไม่น่าเป็นไปได้ที่พวกเขาสามารถถอดรหัสได้เนื่องจากพวกเขาไม่มีกุญแจ (แฮ็กเกอร์ขั้นสูงอาจสามารถรับได้โดยการเข้าถึงหน่วยความจำกระบวนการของเกมที่รันอยู่ แต่มันหายากและไม่น่าเป็นไปได้)

ข้อยกเว้นสำหรับกฎการเข้ารหัสเท่านั้นคือข้อมูล VoiceChat ตามกฎหมายในสหรัฐอเมริกาจะต้องส่งการแชทด้วยเสียงแบบชัดแจ้งเพื่อให้ CIA สามารถฟังได้หากพวกเขาต้องการ คอนโซลมักจะให้วิธีการแท็กข้อมูลเสียงเพื่อที่จะไม่เข้ารหัส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.