พร็อพเพอร์ตี้ตัวระบุที่ใช้ร่วมกันของผู้ให้บริการ Google

ที่มา

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

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

พร็อพเพอร์ตี้ของตัวระบุที่แชร์

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

ในการผสานรวมระหว่าง Google กับพาร์ทเนอร์ภายนอก ตัวระบุที่แชร์ซึ่งใช้ร่วมกันจะต้องมีพร็อพเพอร์ตี้ต่อไปนี้

  1. ไม่ซ้ำกันทั่วโลก: ตัวระบุที่แชร์นี้ต้องชี้ไปยังการลิงก์เดียวระหว่างผู้ใช้ Google กับบัญชีผู้ออกบัตร ต้องไม่มีตัวระบุที่แชร์ร่วมกันสำหรับ ผู้ออกรายเดียวกันที่มีค่าเหมือนกัน
  2. คาดเดาไม่ได้: ตัวระบุที่แชร์เหล่านี้มีสิทธิ์ในการดำเนินการในนามของผู้ใช้ ดังนั้นจึงจำเป็นที่บุคคลที่สามไม่สามารถคาดเดาค่าตัวระบุที่แชร์ได้
  3. เพิกถอนได้: ผู้ใช้อาจเพิกถอนตัวระบุที่แชร์ได้ และการเพิกถอนนี้ควรห้ามไม่ให้ใช้ค่าตัวระบุที่แชร์ในอนาคต พร็อพเพอร์ตี้นี้มีพร็อพเพอร์ตี้ร่วม 2-3 รายการที่มีลักษณะดังนี้
    • ไม่ได้อิงตามพร็อพเพอร์ตี้ที่เปลี่ยนแปลงไม่ได้ของทั้ง 2 บัญชี: หากค่าตัวระบุที่แชร์อิงตามพร็อพเพอร์ตี้ที่เปลี่ยนแปลงไม่ได้ของบัญชีผู้ออกบัตรหรือบัญชี Google การสร้างตัวระบุที่แชร์ซึ่งเพิกถอนไปแล้วจะทำให้มีค่าเดียวกับตัวระบุที่แชร์นั้น (ซึ่งจะเป็นการเลิกทำการเพิกถอน) ดังนั้นค่าของตัวระบุที่แชร์ต้องไม่ใช่พร็อพเพอร์ตี้ของบัญชีหรือหมายเลขโทรศัพท์ (เช่น
    • ไม่ใช่แค่ <บัญชี Google, บัญชีพาร์ทเนอร์>: ยังต้องมีค่าอื่นๆ (เช่น เวลา) ที่สามารถเพิกถอนได้
  4. อนุญาตการลิงก์หลายรายการสำหรับบัญชีในฝั่งใดฝั่งหนึ่ง: การสร้างค่าตัวระบุที่ใช้ร่วมกันต้องไม่ทำให้ผู้ใช้ Google รายเดียวลิงก์กับบัญชีธนาคารหลายบัญชี หรือบัญชี Google มากกว่า 1 บัญชีลิงก์กับบัญชีธนาคารเดียวได้ (เช่น บัญชีหลักและบัญชีย่อยที่ลิงก์กับบัญชีธนาคารระดับบนสุด) คล้ายกับการยกเลิกได้ โดยช่องนี้จะประกอบไปด้วย
    • ขอย้ำอีกครั้งว่าไม่ได้อิงตามพร็อพเพอร์ตี้ที่เปลี่ยนแปลงไม่ได้ของทั้ง 2 บัญชีหรือไม่ ตัวระบุที่ใช้ร่วมกันจะมีค่าเดียวกันเมื่อผู้ใช้ Google รายเดียวลิงก์บัญชีธนาคารหลายบัญชี (หากค่าตัวระบุที่ใช้ร่วมกันอิงตามบัญชี Google) หรือหากบัญชี Google หลายบัญชีลิงก์อยู่กับบัญชีธนาคารบัญชีเดียว (หากค่าตัวระบุที่แชร์อิงตามทรัพย์สินของบัญชีธนาคาร)
  5. ใช้งานได้นาน: ตัวระบุที่แชร์จะใช้ได้ในบริบทที่ปลอดภัยเท่านั้น (การผสานรวมระหว่าง Google และผู้ให้บริการ ซึ่งใช้การป้องกันทั้งระดับการเชื่อมต่อและระดับแอปพลิเคชัน (เช่น PGP, SSL ร่วม ฯลฯ) จึงไม่จำเป็นต้องมีวงจรที่สั้นเพื่อคงความปลอดภัย สิ่งที่ Google แนะนำคือตัวระบุที่แชร์จะไม่มีวันหมดอายุ แต่หากผู้ให้บริการกำหนดให้วันหมดอายุ จะต้องใช้ระยะเวลานาน (เช่น มากกว่า 1 ปี)

พร็อพเพอร์ตี้ตัวระบุที่แชร์อื่นๆ ที่แนะนํามีดังนี้

  1. Base64: ช่วยให้รับส่งและสื่อสารคุณค่าของการผสานรวมได้ง่ายๆ ผ่าน HTTPS
  2. ความยาวขั้นต่ำ: ขอแนะนำให้กำหนดตัวเลขอย่างน้อย 27 หลัก (ก่อนการเข้ารหัส Base64) เพื่อให้มั่นใจว่ามีพื้นที่ว่างเพียงพอเพื่อหลีกเลี่ยงการทับซ้อนกัน

เกิดอะไรขึ้น

เพื่อช่วยให้ผู้อ่านเข้าใจพร็อพเพอร์ตี้ที่จำเป็น ต่อไปนี้เป็นกรณีศึกษาบางส่วนที่แสดงให้เห็นถึงปัญหาที่พบเมื่อไม่ปฏิบัติตามพร็อพเพอร์ตี้เหล่านี้

กรณีศึกษาเกี่ยวกับตัวระบุที่แชร์

กรณีศึกษาที่ 1: การรีไซเคิลหมายเลขโทรศัพท์

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

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

กรณีศึกษาที่ 2: The Paste

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

กรณีศึกษาที่ 3: The Bad Employee

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

กรณีศึกษาที่ 4: The Rotation

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

ในการหมุนเวียนนี้ Google จะแจ้งผู้ออกว่าบัญชีผู้ใช้ที่ถูกบุกรุกแต่ละบัญชีจะมีตัวระบุที่ใช้ร่วมกัน 2 ตัวซึ่งทำงานเป็นระยะเวลาสั้นๆ ในระหว่างที่มีการล้างฐานข้อมูล แต่ผู้ออกไม่อนุญาตให้ใช้พร็อพเพอร์ตี้ #4 และบอก Google ว่ามีข้อจำกัดว่าตัวระบุที่แชร์ร่วมกันได้เพียง 1 รายการเท่านั้นสำหรับบัญชีผู้ใช้หนึ่งๆ ซึ่งทำให้การหมุนตัวนั้นยุ่งเหยิงมากกับสภาวะทางเชื้อชาติ