ไลบรารีโอเพนซอร์สใหม่ที่เรียกว่า UUIDv47 ได้เกิดขึ้นมา โดยสัญญาว่าจะแก้ไขปัญหาเฉพาะในการออกแบบฐานข้อมูล: วิธีการรักษาประโยชน์ด้านประสิทธิภาพของ UUIDv7 identifiers ที่เรียงลำดับตามเวลา ในขณะที่ซ่อนข้อมูลเวลาจากผู้ใช้ภายนอก ไลบรารีนี้ใช้การปิดบังด้วยวิธีการเข้ารหัสเพื่อทำให้ UUIDv7 identifiers ดูเหมือน UUIDv4 แบบสุ่มสำหรับผู้สังเกตการณ์ภายนอก แต่แนวทางนี้ได้แบ่งแยกชุมชนนักพัฒนา
การเปรียบเทียบรูปแบบ UUID
ประเภท UUID | การจัดเก็บในฐานข้อมูล | การเปิดเผยผ่าน API | การเรียงลำดับตามเวลา | ความเป็นส่วนตัว |
---|---|---|---|---|
UUIDv4 | สุ่ม | สุ่ม | ไม่มี | สูง |
UUIDv7 | เรียงตามเวลา | เรียงตามเวลา | มี | ต่ำ |
UUIDv47 | เรียงตามเวลา (v7) | ปกปิด (ดูเหมือน v4) | มี (ภายใน) | สูง |
นวัตกรรมหลักและการแลกเปลี่ยน
UUIDv47 ทำงานโดยการเก็บ UUIDv7 identifiers ที่สามารถเรียงลำดับได้ในฐานข้อมูลเพื่อประสิทธิภาพการจัดทำดัชนีที่ดีขึ้น จากนั้นปิดบังส่วน timestamp ด้วยการเข้ารหัส SipHash-2-4 เมื่อเปิดเผยผ่าน APIs สิ่งนี้สร้างสิ่งที่ดูเหมือน UUIDv4 แบบสุ่มสำหรับระบบภายนอก ในขณะที่ยังคงประโยชน์ของฐานข้อมูลในการจัดเก็บแบบเรียงลำดับตามเวลา อย่างไรก็ตาม ความคิดเห็นจากชุมชนเผยให้เห็นความกังวลที่สำคัญเกี่ยวกับแนวทางคู่นี้
การวิพากษ์วิจารณ์ที่แหลมคมที่สุดมุ่งเน้นไปที่การทำลายความคาดหวังโดยนัย นักพัฒนาคนหนึ่งกล่าวว่า แนวทางนี้โดยนัยแล้วได้เอาประโยชน์สมมติของคนอื่นในการใช้ประโยชน์จาก UUID v7 ไปพร้อมกับเพิ่มความซับซ้อนที่ไม่จำเป็นผ่านการแปลงระหว่างรูปแบบอย่างต่อเนื่อง ความกังวลนี้สะท้อนหลักการที่กว้างขึ้นในการออกแบบ API: ผู้บริโภคอาจคาดหวังได้อย่างสมเหตุสมผลที่จะได้รับประโยชน์จากคุณสมบัติการเรียงลำดับตามเวลาของ UUIDv7 แม้ว่าจะไม่ได้รับการรับประกันอย่างชัดเจน
SipHash-2-4: ฟังก์ชันการเข้ารหัสที่ออกแบบมาให้เร็วในขณะที่ป้องกันการโจมตีเพื่อกู้คืนคีย์
ข้อมูลจำเพาะทางเทคนิคของ UUIDv47
- ภาษา: C แบบ Header-only (รองรับ C89)
- การพึ่งพา: ไม่มีการพึ่งพาภายนอก
- การเข้ารหัส: SipHash-2-4 ด้วยคีย์ 128 บิต
- ประสิทธิภาพ: โอเวอร์เฮดระดับนาโนวินาทีต่อการแปลง
- หน่วยความจำ: ดำเนินการโดยไม่จัดสรรหน่วยความจำ
- การแมป: แบบกำหนดได้ สามารถย้อนกลับได้ (round-trip ที่แม่นยำ)
- ความเข้ากันได้: บิต version/variant ที่เข้ากันได้กับ RFC
ความกังวลด้านความเป็นส่วนตัวในโลกจริงขับเคลื่อนการยอมรับ
แม้จะมีการวิพากษ์วิจารณ์ แต่ผู้สนับสนุนโต้แย้งว่าไลบรารีนี้แก้ไขความเสี่ยงด้านความเป็นส่วนตัวที่แท้จริงซึ่งนักพัฒนาหลายคนมองข้าม timestamp ที่ฝังอยู่ใน UUIDv7 สามารถเปิดเผยข้อมูลที่ละเอียดอ่อนเกี่ยวกับรูปแบบพฤติกรรมของผู้ใช้ สถานการณ์ความเป็นส่วนตัวรวมถึงโปรไฟล์แอปหาคู่ที่ timestamp การสร้างอาจเปิดเผยไทม์ไลน์ความสัมพันธ์ หรือการอัปโหลดรูปภาพที่เปิดเผยเวลาที่ผู้ใช้ใช้งานแม้จะอ้างว่าอยู่ในเขตเวลาที่แตกต่างกัน
ความกังวลเหล่านี้มีความเกี่ยวข้องโดยเฉพาะสำหรับแอปพลิเคชันที่จัดการข้อมูลที่ละเอียดอ่อนหรือดำเนินการภายใต้กฎระเบียบความเป็นส่วนตัวที่เข้มงวด ผู้เขียนไลบรารีเน้นว่า SipHash-2-4 ให้ความปลอดภัยทางการเข้ารหัส ทำให้เป็นไปไม่ได้ที่จะกู้คืน timestamp เดิมโดยไม่มีคีย์ลับ
ตัวอย่างความเสี่ยงด้านความเป็นส่วนตัว
- แอปหาคู่: การประทับเวลาในการสร้างโปรไฟล์อาจเปิดเผยรูปแบบไทม์ไลน์ของความสัมพันธ์
- การอัปโหลดรูปภาพ: Asset ID อาจเปิดเผยเวลาที่ผู้ใช้มีกิจกรรมในโซนเวลาต่างๆ ที่อ้างว่าอยู่
- บัญชีผู้ใช้: เวลาในการสร้างบัญชีอาจมีความสัมพันธ์กับเหตุการณ์ภายนอก
- บันทึกการทำธุรกรรม: รูปแบบการชำระเงินหรือกิจกรรมอาจถูกอนุมานได้จากลำดับของ ID
โซลูชันระดับฐานข้อมูลได้รับความสนใจ
แนวทางทางเลือกที่น่าสนใจได้เกิดขึ้นจากการอภิปรายของชุมชน: การจัดการการแปลงในระดับฐานข้อมูลแทนที่จะอยู่ในโค้ดแอปพลิเคชัน สิ่งนี้จะช่วยให้นักพัฒนาสามารถแปลงระหว่าง UUIDv7 และเวอร์ชันที่ปิดบังโดยใช้ไวยากรณ์ SQL ซึ่งอาจลดภาระความซับซ้อนสำหรับนักพัฒนาแอปพลิเคชันในขณะที่ยังคงประโยชน์ด้านความเป็นส่วนตัวเดียวกัน
แนวทางที่เน้นฐานข้อมูลนี้สามารถขจัดค่าใช้จ่ายการแปลงอย่างต่อเนื่องและลดโอกาสในการเปิดเผย identifiers ที่ไม่ได้ปิดบังโดยไม่ตั้งใจ อย่างไรก็ตาม มันจะต้องมีการปรับเปลี่ยนหรือส่วนขยายของเอนจินฐานข้อมูล ทำให้เป็นโซลูชันระยะยาว
บริบทที่กว้างขึ้นของวิวัฒนาการ UUID
การถกเถียงสะท้อนความเจ็บปวดในการเติบโตขณะที่ชุมชนนักพัฒนาปรับตัวเข้ากับมาตรฐาน UUID ที่ใหม่กว่า UUIDv7 ที่แนะนำเพื่อแก้ไขประสิทธิภาพฐานข้อมูลที่แย่ของ UUIDv4 แบบสุ่ม สร้างการพิจารณาใหม่เกี่ยวกับการรั่วไหลของข้อมูลที่ไม่เกี่ยวข้องกับ identifiers แบบสุ่มล้วนๆ
UUIDv47 แสดงถึงแนวทางหนึ่งในการสร้างสมดุลระหว่างความต้องการที่แข่งขันกันเหล่านี้ แต่การอภิปรายของชุมชนแสดงให้เห็นว่าโซลูชันที่เหมาะสมที่สุดอาจแตกต่างกันอย่างมากขึ้นอยู่กับกรณีการใช้งานเฉพาะ แอปพลิเคชันที่มีข้อกำหนดความเป็นส่วนตัวที่เข้มงวดอาจพบว่าความซับซ้อนนั้นคุ้มค่า ในขณะที่แอปพลิเคชันอื่นๆ อาจชอบความเรียบง่ายของการเลือกใช้ UUIDv4 หรือ UUIDv7 อย่างสม่ำเสมอตลอดทั้งระบบ
อ้างอิง: UUIDv47 - UUIDv7-in / UUIDv4-out (SipHash-masked timestamp)