โดยเฉพาะเกี่ยวกับคำถามสุดท้ายของคุณ: ไม่มันไม่เคยลืมที่จะมีระบบรับรองความถูกต้องที่ไม่ปลอดภัย ผู้ใช้มักจะตรัสรู้ไม่ได้เมื่อพูดถึงเรื่องความปลอดภัยของคอมพิวเตอร์ ผู้ใช้ใช้รหัสผ่านเดียวกันสำหรับเกมเล็ก ๆ ของคุณเช่นเดียวกับบัญชี Google บัญชี Facebook บัญชีธนาคารและอื่น ๆ แม้ว่าคุณจะสามารถอ้างได้ว่ามันเป็นความผิดของพวกเขาสำหรับการใช้นิสัยความปลอดภัยบนอินเทอร์เน็ตที่ไม่ดี แต่คุณเป็นผู้รับผิดชอบหากเกมของคุณถูกใช้เป็นเวกเตอร์โจมตีเพื่อขโมยข้อมูลการล็อกอินของผู้ใช้ ในฐานะนักพัฒนาที่รู้ดีกว่าตัวเลือกทางจริยธรรมเพียงอย่างเดียวคือการรักษาความปลอดภัยของกระบวนการรับรองความถูกต้องของคุณหรือเพื่อไม่ให้มีเลย
ตามคำแนะนำที่ไม่พึงประสงค์ แต่เกี่ยวข้องกันผู้ใช้ไม่ต้องการให้ลงชื่อสมัครใช้เกมของคุณ พวกเขาอาจทำเช่นนั้นหากพวกเขาต้องการเล่นเกมของคุณไม่ดีพอ แต่การมีการลงชื่อเข้าใช้ Yet Another Freaking เพื่อสมัครใช้งานจะทำให้ผู้เล่นที่มีศักยภาพจำนวนมากหนีไป ผู้ใช้ป่วยจนเสียชีวิตในการสร้างบัญชีใหม่สำหรับทุกเว็บไซต์บริการและเกมโดยเฉพาะหากพวกเขาต้องการการตรวจสอบอีเมลหรือสิ่งใดก็ตาม หากคุณสามารถหลีกเลี่ยงการลงชื่อเข้าใช้หรือใช้บริการการตรวจสอบบุคคลที่สามที่มีอยู่ซึ่งผู้ใช้มีบัญชีอยู่แล้ว คุณจะมีผู้เล่นมากกว่านั้น สิ่งนี้จะเพิ่มเป็นสามเท่าหากคุณวางแผนที่จะซื้อสินค้าในแอพ
เว็บเกม
ตัวเลือกที่ได้รับความนิยมโดยเฉพาะอย่างยิ่งสำหรับเกมบนเว็บแม้ว่ามันจะใช้งานได้กับเกมแบบดั้งเดิมก็คือการใช้บริการตรวจสอบความถูกต้องโดยบุคคลที่สามบนเว็บ Facebook และ Google ทั้งคู่มี API ที่มีเอกสารที่ดี (ทั้งคู่ใช้ API มาตรฐาน iirc) สำหรับการตรวจสอบสิทธิ์ พวกเขาต้องการความสามารถในการเปิดหน้าต่างเบราว์เซอร์และนำผู้ใช้ไปยังบริการของพวกเขา แต่มันค่อนข้างง่ายที่จะทำบนแพลตฟอร์มที่ไม่ใช่คอนโซลส่วนใหญ่และแน่นอนว่าเป็นเรื่องง่ายสำหรับเกมบนเว็บ
บริการเหล่านั้นจะคอยดูแลรายละเอียดที่ยุ่งเหยิงของการเข้ารหัสทราฟฟิกการล็อกอินผ่านสายการจัดเก็บข้อมูลการล็อกอินอย่างปลอดภัยและการตรวจสอบการเข้าสู่ระบบของผู้ใช้ เซิร์ฟเวอร์เกมของคุณต้องการใช้งานเฉพาะส่วนของโปรโตคอลที่ได้รับคุกกี้จากผู้ใช้และถามบริการการตรวจสอบว่าคุกกี้นั้นถูกต้องหรือไม่ซึ่งสามารถทำได้ด้วย HTTP แบบธรรมดาในกรณีส่วนใหญ่
ฉันจะไม่อ้างสิทธิ์เกมที่มีผู้เล่นหลายคนโดยส่วนใหญ่ทำเช่นนี้เพราะพวกเขาไม่ได้ทำ แต่ฉันจะอ้างว่าเกมออนไลน์ทางออนไลน์ส่วนใหญ่ทำเช่นนี้
สำหรับเกมดั้งเดิม (ที่ไม่ใช่เว็บ) การอำนวยความสะดวกขั้นตอนการเข้าสู่ระบบนี้เป็นไปได้โดยการฝังเบราว์เซอร์ (Awesomium, Chromium Embedded Framework หรือ Webkit เป็นตัวเลือกยอดนิยม) หรือเรียกออกจากเบราว์เซอร์ภายนอก เอาคุกกี้ auth ออกจากและไม่ได้ง่ายกว่าการฝังหนึ่งในห้องสมุดดังกล่าว)
ตัวอย่างทั่วไปของวิธีนี้คือเกม Facebook ทุกเกม
เกมดั้งเดิมที่ใช้ HTTPS
การมีบริการ HTTPS อย่างง่ายสำหรับการเข้าสู่ระบบเป็นเรื่องปกติมากขึ้น เกมส่วนใหญ่ใช้โปรโตคอลที่กำหนดเอง แต่เกมเหล่านี้ส่วนใหญ่ไม่สมบูรณ์ (มีการเข้าสู่ระบบที่ปลอดภัย แต่ไม่มีวิธีที่ปลอดภัยในการสร้าง / อัปเดตบัญชีดังนั้นพวกเขาจึงต้องการบริการ HTTPS อยู่แล้ว) หรือไม่ปลอดภัยอย่างน่ากลัว
คุณไม่จำเป็นต้องไปขอใบรับรอง SSL ที่กำหนดเองด้วยซ้ำ มีผู้ให้บริการโฮสต์แอปออนไลน์ที่ให้โดเมนย่อยแก่คุณและใช้ไวด์การ์ด SSL Cert คุณสามารถใส่บริการตรวจสอบสิทธิ์ของคุณได้ที่ mygame.someservice.com ซึ่งครอบคลุมโดย * .someservice.com สัญลักษณ์ตัวแทนที่บริการบางอย่างเก็บรักษาไว้และคุณก็พร้อมที่จะไป
แนวคิดในที่นี้คือผู้ใช้เข้าสู่บริการของคุณซึ่งสร้างคุกกี้เซสชันที่ไม่ซ้ำกันซึ่งผู้ใช้สามารถส่งผ่านไปยังเซิร์ฟเวอร์เกมหลักของคุณ เซิร์ฟเวอร์จะถามระบบการเข้าสู่ระบบว่าคุกกี้นั้นถูกต้องสำหรับผู้ใช้ที่ร้องขอหรือไม่ โดยปกติจะมีเป็นมากหมดเวลาสั้น ๆ เกี่ยวกับคุกกี้โดยคำสั่งของวินาที (15-30, ตัวอย่าง) และมันก็ไม่ถูกต้องโดยทั่วไปใช้ครั้งเดียวทำให้การโจมตี replay เป็นไปไม่ได้
โปรดทราบว่า HTTPS เป็นตัวเลือกที่แนะนำที่สุดของฉันหากคุณวางแผนที่จะส่งข้อมูลการชำระเงินผ่านการโอนเงินจากภายในลูกค้าเอง อย่างไรก็ตามการใช้บุคคลที่สามเป็นสิ่งที่ดีกว่า หากคุณคิดว่าการรักษาความปลอดภัยอย่างง่าย ๆ เพียงแค่ใช้รหัสผ่านนั้นเป็นสิ่งที่ทำงานมากเกินไปคุณไม่ต้องการแม้แต่จะพยายามทำตามกฎขั้นต่ำ (และค่อนข้างไม่เพียงพอ) ตามกฎ PCI สำหรับการจัดเก็บและประมวลผลหมายเลขบัตรเครดิต คุณจะมียอดขายที่ดีขึ้นหากคุณมีผู้ใช้ใช้บริการการชำระเงินบุคคลที่สามที่เชื่อถือได้ซึ่งพวกเขากำลังบันทึกไว้
ข้อดีอย่างหนึ่งของการแยกบริการเข้าสู่ระบบของคุณจากเซิร์ฟเวอร์เกมหลักคือมันช่วยให้การทำงานภายนอกที่จะเชื่อมโยงกับบัญชีผู้ใช้เป็นอิสระจากเกม คุณอาจมีคุณสมบัติบัญชีบางอย่าง (ดูรูปแทนตัวหรือ) บนเว็บไซต์ของคุณหรือคุณอาจอนุญาตให้เชื่อมโยงบัญชี Facebook เข้ากับบัญชีของคุณหรือคุณอาจมีหลายเกมที่แชร์แพลตฟอร์มบัญชีพื้นฐานเดียว (เช่นคุณสมบัติ Galaxy at War ของ Mass Effect 3)
เกมตัวอย่างที่ได้รับความนิยมโดยใช้ HTTPS สำหรับการพิสูจน์ตัวตนคือ Minecraft
การรับรองความถูกต้องของเว็บของบุคคลที่สามพร้อม Native Client Games
เป็นไปได้ที่จะใช้บริการของบุคคลที่สามเช่น Facebook Connect หรือ Google กับลูกค้าพื้นเมือง ตัวอย่างเช่น Facebook มี SDK ท้องถิ่นสำหรับ iOS และ Android เช่นเดียวกับ Google บริการบางอย่างก็มี SDK ดั้งเดิมสำหรับไคลเอ็นต์พีซีแบบดั้งเดิม
หากบริการเป้าหมายไม่มี SDK แบบเนทีฟและต้องการใช้เว็บเบราว์เซอร์คุณสามารถฝังเบราว์เซอร์ในเกมของคุณได้ อย่างไรก็ตามผู้ใช้บางคนอาจไม่มั่นใจในการใช้เบราว์เซอร์ในตัวเพื่อป้อนข้อมูลการเข้าสู่ระบบ
คุณยังสามารถใช้เบราว์เซอร์ภายนอก มีสองสามวิธีในการดึงสิ่งนี้ออก บางคนต้องการการบูรณาการระบบปฏิบัติการมากกว่าคนอื่นเล็กน้อย บางคนต้องการให้คุณใช้บริการเว็บภายนอกควบคู่ไปกับ (หรืออย่างน้อยก็เข้าถึงได้) เซิร์ฟเวอร์เกมหลักของคุณ โปรดทราบว่าเนื่องจากโดยทั่วไป Facebook และ Google ต้องการ URL ที่รับรองความถูกต้องคุณจะต้องมีหน้า Landing Page ของเว็บไซต์สาธารณะเพื่อใช้โปรโตคอลเหล่านี้ใน (เกือบ) ทุกกรณี
สิ่งที่พิสูจน์ได้และน่าเชื่อถือที่สุดหากไม่ใช่วิธีที่ง่ายที่สุดคือการตีกลับคำขอเข้าสู่ระบบจากลูกค้าของคุณผ่านเว็บไซต์หลักของคุณ ลูกค้าของคุณเชื่อมต่อกับเซิร์ฟเวอร์เกมหลักในฐานะผู้ใช้เกสต์รับรองความถูกต้องและได้รับโทเค็นเซสชันที่ไม่ซ้ำกัน เซิร์ฟเวอร์เกมไม่อนุญาตให้ลูกค้าทำอะไรได้มากในขณะที่อยู่ในสถานะนี้ เกมไม่ทราบว่าผู้เล่นคือใครดังนั้นผู้เล่นยังไม่สามารถแชทเริ่มการแข่งขันหรือต่อไป
จากนั้นไคลเอ็นต์จะเปิดเบราว์เซอร์ภายนอกที่ชี้ไปที่ URL การเข้าสู่ระบบของโดเมนเกมของคุณผ่านโทเค็นเซสชันนี้เป็นพารามิเตอร์ใน URL จากนั้นเว็บไซต์จะเข้าสู่การจับมือกันตามปกติสำหรับ Facebook / Google
เมื่อมาถึงจุดนี้เว็บเซิร์ฟเวอร์ของคุณรู้ว่าผู้ใช้เข้าสู่ระบบและสามารถเชื่อมโยงกับโทเค็นเซสชั่นที่ได้รับจากลูกค้า การตรวจสอบนี้สามารถสื่อสารกับเซิร์ฟเวอร์เกมเพื่อยกระดับการเชื่อมต่อของแขกที่ไม่ได้รับการพิสูจน์ตัวตนของลูกค้าให้กลายเป็นเซสชั่นผู้ใช้ที่ได้รับการรับรองความถูกต้อง สิ่งนี้สามารถทำได้โดยให้เว็บเซิร์ฟเวอร์สื่อสารกับเซิร์ฟเวอร์เกมโดยตรงหากเป็นไปได้ หรือเซิร์ฟเวอร์เกมสามารถสำรวจความคิดเห็นของเว็บเซิร์ฟเวอร์เป็นระยะเพื่อตรวจสอบสถานะการเชื่อมต่อของแขกที่ค้างอยู่ หรือลูกค้าสามารถสำรวจความคิดเห็นของเว็บเซิร์ฟเวอร์เป็นระยะ ๆ เพื่อดูว่าการเข้าสู่ระบบเสร็จสมบูรณ์และส่งสัญญาณให้เซิร์ฟเวอร์เกมเพื่อขอการยืนยันจากเว็บเซิร์ฟเวอร์
สิ่งเหล่านี้ทั้งหมดต้องการให้เซิร์ฟเวอร์เกมและเว็บเซิร์ฟเวอร์ของคุณสามารถสื่อสารได้ แต่บริการการรับรองความถูกต้องโดยบุคคลที่สามใด ๆจะกำหนดให้เซิร์ฟเวอร์เกมของคุณสามารถสื่อสารกับโลกภายนอกดังนั้นสิ่งนี้ไม่น่าแปลกใจ
วิธีการรับรองความถูกต้องนี้พบได้ใน MMO ขนาดเล็กถึงขนาดกลาง
โปรดทราบว่าทั้งหมดนี้ใช้สำหรับการร้องขอการชำระเงินผ่านบริการภายนอกเช่น PayPal, Amazon Payments, Google Wallet และอื่น ๆ
การเชื่อมต่อ TLS โดยตรง
ไม่ยากเกินไปที่จะเริ่มต้นเซสชัน TLS ผ่านโปรโตคอลสตรีมแบบกำหนดเอง ไลบรารี่เช่น OpenSSL, GnuTLS, NSS และไลบรารี่เฉพาะ OS ต่าง ๆ จะมี API wrapper ของสตรีมที่เลเยอร์เหนือการขนส่ง / โปรโตคอลระดับต่ำ โดยทั่วไปคุณเพียงแค่ต้องป้อนข้อมูลไบต์ผ่าน API ตัวตัดคำและจัดการกับ handshake และการเข้ารหัส
ส่วนที่ยุ่งยากที่นี่ทำให้มั่นใจได้ว่าการใช้ TLS ของคุณปลอดภัย ตัวอย่างของไลบรารีทั่วไปบางตัวอย่างเช่นโดยค่าเริ่มต้นจะต้องมีใบรับรองที่ลงนามที่ถูกต้องจากหน่วยงานที่เชื่อถือ บางไลบรารีทั่วไปจำเป็นต้องใช้ แต่โดยค่าเริ่มต้นไม่เชื่อถือหน่วยงานใด ๆ บางคนไม่ต้องการให้ใบรับรองถูกต้องทั้งหมด
ขอแนะนำให้คุณต้องการใบรับรองที่ถูกต้องเสมอ การอนุญาต certs ที่ไม่ถูกต้องจะไม่อนุญาตให้ผู้โจมตีที่เป็นเพียงการแอบฟังเพื่อขโมยรหัสผ่าน แต่จะยังอนุญาตให้มีการโจมตีจากคนกลาง
วิธีการนี้ต้องการอย่างน้อยที่สุดในแง่ของการพึ่งพาภายนอกในขณะที่ยังคงให้ความปลอดภัยสูงสุด
ตัวอย่างของเกมที่ใช้สิ่งนี้รวมถึง MMO แบบดั้งเดิมที่มีขนาดใหญ่ที่สุด
เกมดั้งเดิมปลอดภัย (ish)
เกมที่ไม่ได้ใช้บริการแยกต่างหากและไม่ใช้ TLS โดยทั่วไปจะต้องใช้โปรโตคอลการเข้าสู่ระบบแบบ nonce ที่ใช้ในโปรโตคอลหลักของเกม ด้วยวิธีนี้เซิร์ฟเวอร์จะสร้างหมายเลขสุ่ม (ไม่ใช่) และส่งไปยังลูกค้า จากนั้นไคลเอ็นต์จะแฮชที่ไม่มีรหัสผ่านของผู้ใช้ (และชื่อผู้ใช้ซึ่งอาจเป็นข้อมูลอื่น) และส่งการตอบกลับนั้นไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์จะเปรียบเทียบค่าแฮชนี้กับข้อมูลรับรองที่มีในไฟล์ สิ่งนี้จะช่วยให้รหัสผ่านของผู้ใช้แยกตัวออกจากสายและทำให้แน่ใจว่าคุณไม่สามารถใช้การโจมตีรีเพลย์อย่างง่าย ๆ กับรหัสผ่านที่แฮชได้เช่นเดียวกับแผนการล็อคแฮชที่อ่อนแอ
ปัญหาคือผู้ใช้ไม่มีวิธีการส่งรหัสผ่านใหม่ไปยังบริการผ่านโปรโตคอลนี้อย่างปลอดภัย การใช้งานทั่วไปยังจัดเก็บรหัสผ่านของผู้ใช้ในข้อความธรรมดาบนเซิร์ฟเวอร์ซึ่งเป็นวิธีปฏิบัติที่น่ากลัว (หากเซิร์ฟเวอร์ของคุณถูกแฮ็กผู้ใช้ของคุณอาจเพิ่งขโมยอีเมล / Facebook / รหัสผ่านธนาคารของเขาเพราะเขาใช้รหัสผ่านเดียวกันสำหรับเกมของคุณ ที่อื่นเพราะผู้ใช้มักจะทำเช่นนั้น)
มีรูปแบบการเข้าสู่ระบบขั้นพื้นฐานที่ปรับปรุงแล้ว พื้นฐานที่สุด - แม้ว่ายังไม่ปลอดภัยอย่างยิ่ง - สำหรับเซิร์ฟเวอร์ที่จะส่งรหัสแฮชเกลือที่มีค่า nonce ระหว่างการล็อกอิน สิ่งนี้ช่วยให้เซิร์ฟเวอร์จัดเก็บรหัสผ่านที่แฮช (และเค็ม) อย่างปลอดภัยในขณะที่อนุญาตให้ไคลเอ็นต์สร้างแฮชเดียวกันในระหว่างการเข้าสู่ระบบ วิธีนี้จะทำให้ผู้โจมตีได้รับเกลือสำหรับรหัสผ่านของผู้ใช้โดยเฉพาะ แต่สิ่งนี้ไม่เป็นประโยชน์อย่างยิ่งหากไม่ได้รับรหัสผ่านแบบแฮชดั้งเดิม (ซึ่งไม่ได้ส่งผ่านสายระหว่างการเข้าสู่ระบบ) ในระหว่างการสร้าง / อัปเดตรหัสผ่านไคลเอนต์จะส่งรหัสผ่านที่แฮชทั้งหมด (ด้วยเกลือ) ซึ่งผู้โจมตีสามารถดมกลิ่น หากฟังก์ชันแฮชที่ใช้มีความแข็งแรงเพียงพอ (เช่น sha-2/512) การบังคับใช้เดรัจฉานบริสุทธิ์นั้นเป็นไปไม่ได้ แม้ว่าผู้โจมตียังสามารถบังคับรหัสผ่านที่อ่อนแอได้อย่างง่ายดาย (ซึ่งเป็นเหตุผลว่าทำไมการบังคับใช้ความยาวรหัสผ่านขั้นต่ำการกระจายตัวอักษร / ตัวเลข / สัญลักษณ์อย่างน้อยที่สุดและการเปรียบเทียบกับพจนานุกรมของรหัสผ่านที่รู้จัก / ชัดเจน / อ่อนแอนั้นสำคัญ) ความจริงที่ว่าผู้โจมตียังสามารถรับรหัสผ่านที่ถูกแฮชได้นั้นเป็นเหตุผลว่าทำไมจึงปลอดภัยกว่าที่จะทำการแลกเปลี่ยนรหัสผ่านทั้งหมดผ่านช่องทางที่ปลอดภัยและเข้ารหัส
ห้องสมุดเครือข่ายเกมยอดนิยมจำนวนหนึ่งใช้รูปแบบเสริมของโปรโตคอลนี้ ฉันเชื่อว่า SmartFox เป็นตัวอย่างหนึ่งถึงแม้ว่าฉันจะไม่ได้มองลึก (โดยทั่วไปฉันไม่สนใจระบบการตรวจสอบไลบรารี่ใด ๆ และใช้วิธีการ HTTPS เนื่องจากมันง่ายที่จะติดตั้งและแข็งแรงกว่า) เกมอินเทอร์เน็ตที่ไม่ใช่เว็บจำนวนหนึ่งใช้วิธีนี้โดยเฉพาะก่อน Steam, XBL และอื่น ๆ
เกมดั้งเดิมที่ไม่ปลอดภัย
เกมมากมายโชคไม่ดีแค่ส่งชื่อผู้ใช้ / รหัสผ่านเป็นข้อความธรรมดา บางทีพวกเขาอาจจะแฮรหัสผ่านซึ่งชนิดของการป้องกันรหัสผ่านที่แท้จริงของผู้ใช้ (ไม่ดีพอ) แต่การโจมตีซ้ำทำให้การล็อกอินเข้าสู่บริการเกมเป็นเรื่องเล็กน้อย
อย่าทำอย่างนี้ มันไร้ความรับผิดชอบและขี้เกียจ ความไร้เดียงสาของอินเทอร์เน็ตในปี 1990 ที่นิยมวิธีการเข้าสู่ระบบเหล่านี้ไม่ใช่ข้อแก้ตัว
pre-Facebook Flash และเกมบนเว็บจำนวนมากก่อนหน้านี้ใช้แนวทางนี้ ฉันไม่รู้ตัวอย่างเฉพาะจากส่วนบนของหัว ฉันอยากจะเชื่อว่าพวกเขาตายไปหมดแล้ว แต่โลกไม่โชคดีขนาดนั้น
ไม่มีการรับรองความถูกต้อง
เกมส่วนใหญ่ไม่รับรองความถูกต้อง ผู้เล่นเชื่อมต่อส่งผ่านจุดจับเพื่อระบุตัวตนและเริ่มการแข่งขัน ไม่มีเซิร์ฟเวอร์ส่วนกลางที่พยายามตรวจสอบว่ามีเพียงมนุษย์แท้เพียงคนเดียวที่ได้รับอนุญาตให้อ้างว่าเป็น "CaptainMisterDude" เซิร์ฟเวอร์ในพื้นที่เพียงแค่รับรองว่ามีผู้เล่นที่เชื่อมต่ออยู่ในปัจจุบันเพียงคนเดียวเท่านั้นที่มีด้ามจับพิเศษ เซิร์ฟเวอร์ในพื้นที่ใช้การขึ้นบัญชีดำและรายชื่อ IP สำหรับผู้สร้างปัญหา นี่เป็นเรื่องธรรมดาสำหรับเกมสไตล์ Deathmatch ของ FPS แม้กระทั่งทุกวันนี้
หากคุณไม่ต้องการสถานะถาวรสำหรับบัญชีนี่เป็นวิธีที่ง่ายที่สุดและค่อนข้าง "ปลอดภัย" เนื่องจากไม่มีสิ่งใดที่จะแฮ็คหรือขโมยจริง ๆ เห็นได้ชัดว่าวิธีนี้ใช้งานไม่ได้หากคุณต้องการจัดเก็บข้อมูลบัญชีระหว่างเซสชันเกม
Quake เป็นตัวอย่างของเกมที่ใช้วิธีการพิสูจน์ตัวตนผู้ใช้