ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวสร้าง UUID

เวอร์ชัน 1 UUID อาจทำให้ MAC ที่อยู่และเวลาการสร้างของคุณรั่วไหลได้

· เหตุใดจึงสำคัญ

uuid การเข้ารหัส เบราว์เซอร์-apis

รายละเอียดของโครงสร้าง UUIDv1 ที่แสดงฟิลด์การประทับเวลาและบิตที่อยู่ MAC
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

UUID ตามเวลาจะฝังการประทับเวลา 60 บิตและตัวระบุโหนด 48 บิตซึ่งมักจะเป็นที่อยู่การ์ดเครือข่ายจริง โพสต์นี้แสดงให้เห็นว่าบุคคลภายนอกสามารถอ่านอะไรได้บ้าง และเหตุใดการสร้างแบบสุ่มจึงหลีกเลี่ยงปัญหา

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

เวอร์ชัน 1 UUID ถูกสร้างขึ้นจากการประทับเวลา ที่อยู่ MAC และค่าลำดับนาฬิกา การประทับเวลา 60 บิตแสดงถึงจำนวนช่วงเวลา 100-นาโนวินาทีตั้งแต่ 15 ตุลาคม 1582 ซึ่งเป็นวันที่ของการปฏิรูปปฏิทินเกรกอเรียน ฟิลด์โหนด 48 บิต โดยทั่วไปจะมีที่อยู่ IEEE 802 MAC ของอินเทอร์เฟซเครือข่ายที่สร้าง UUID เมื่อคุณส่งออกเอกสาร ให้เรียกใช้เครื่องมือหรือบันทึกไฟล์ที่ฝังเวอร์ชัน 1 UUID ใครก็ตามที่ถอดรหัสในภายหลังว่า UUID สามารถอ่านได้เมื่อถูกสร้างขึ้น และหากฟิลด์โหนดเป็นที่อยู่ MAC จริง แสดงว่าเครื่องใดเป็นผู้สร้าง ข้อมูลนี้รั่วไหลอย่างเงียบๆ จากสิ่งที่ดูเหมือนจะเป็นตัวระบุที่ไม่ชัดเจน

กายวิภาคของ v1 UUID — ฟิลด์การประทับเวลา ลำดับนาฬิกา และฟิลด์โหนด และตำแหน่งที่แต่ละฟิลด์อยู่ในอักขระ 36

การรั่วไหลของข้อมูลเป็นเรื่องเล็กน้อยแต่เป็นผลสืบเนื่องต่อความเป็นส่วนตัวและการระบุแหล่งที่มา หากคุณทำงานร่วมกับผู้เขียนร่วมในเอกสารและที่อยู่ MAC ของการ์ดเครือข่ายของคุณอยู่ใน UUID v1 ที่ฝังไว้ ผู้สังเกตการณ์จะเรียนรู้ฮาร์ดแวร์ที่ใช้งานอยู่ในสถาบันหรือสถานที่เฉพาะ หากคุณส่งออกเอกสารในเวลาที่กำหนด การประทับเวลาในทุก ๆ v1 UUID จะถูกจำกัดเมื่องานเกิดขึ้น ผู้เขียนที่พยายามรักษานามแฝงสามารถยกเลิกการเปิดเผยตัวตนได้โดยเชื่อมโยงการประทับเวลา UUID กับวันที่เผยแพร่ที่ทราบหรือเหตุการณ์การสร้างเอกสาร ตัวระบุดูไม่เป็นอันตรายเนื่องจากมีการจัดรูปแบบเป็นสตริงอักขระ 36 แบบทึบ แต่ไม่ทึบแสงสำหรับทุกคนที่รู้รูปแบบ v1 และต้องการถอดรหัส

สิ่งที่ผู้สังเกตการณ์เรียนรู้ — เมื่อใดที่บันทึกถูกสร้างขึ้น และหากโหนดเป็นที่อยู่ฮาร์ดแวร์ เครื่องหรือผู้จำหน่ายรายใดเป็นผู้สร้างมัน

ลักษณะทางกายวิภาคของ v1 UUID ให้ความกระจ่างถึงสิ่งที่สามารถแยกออกมาได้ เนื่องจากโครงสร้างถูกกำหนดไว้และได้รับการบันทึกไว้อย่างเปิดเผยต่อสาธารณะ RFC 9562 กำหนดเค้าโครง: 32 bits สำหรับ time_low, 16 bits สำหรับ time_mid, 4 bits สำหรับเวอร์ชันที่ตั้งค่าเป็น 1, 12 bits สำหรับ time_high, 2 bits สำหรับตัวแปร 14 bits สำหรับ clock_seq และ 48 bits สำหรับโหนด ฟิลด์เวลาประกอบด้วยผลรวม 60 bits ซึ่งเมื่อรวมกันและแปลเป็นช่วงเวลา 100 นาโนวินาที เนื่องจาก 1582 ให้ผลการสร้างที่แน่นอนทันทีภายใน 100 นาโนวินาที ฟิลด์โหนด 48 บิตมักจะเก็บที่อยู่ MAC ไว้เป็นจำนวนเต็ม 48 บิต การถอดรหัสเป็นไปตามที่กำหนด: อ่านไบต์ ปิดบัง และเลื่อนฟิลด์ และตีความค่า ไม่มีการเข้ารหัสที่เกี่ยวข้อง โครงสร้าง UUID ทำให้การเข้ารหัสโปร่งใสอย่างสมบูรณ์และย้อนกลับได้

ประวัติที่เป็นคำเตือน — วิธีใช้ตัวระบุที่ฝังอยู่ในเอกสารเพื่อติดตามการประพันธ์ โดยอธิบายโดยไม่มีการคาดเดา

RFC 9562 รับทราบประวัติความเป็นส่วนตัวและแนะนำให้เทียบกับเวอร์ชัน 1 สำหรับแอปพลิเคชันใหม่ เนื่องจากต้นทุนมีมากกว่าผลประโยชน์ ข้อมูลจำเพาะประกอบด้วยทางเลือกแบบสุ่ม v4 และ v7 ตามลำดับเวลาพร้อมเอกสารข้อควรพิจารณาด้านความเป็นส่วนตัว เวอร์ชัน 1 จะคงไว้เพื่อความเข้ากันได้แบบย้อนหลังกับระบบที่ใช้งาน แต่โค้ดใหม่ไม่ควรสร้าง UUID v1 หากไม่มีการตรวจสอบความปลอดภัยอย่างรอบคอบและการให้เหตุผลที่ชัดเจนสำหรับการเปิดเผย ช่องโหว่นี้ไม่ใช่การกำกับดูแล มันเป็นตัวเลือกการออกแบบโดยเจตนาในช่วงทศวรรษ 1980 เมื่อการรั่วไหลของความเป็นส่วนตัวไม่ใช่ปัญหาหลัก และการติดตามเป็นคุณสมบัติที่ยอมรับได้สำหรับการระบุระบบแบบกระจาย

ตัวอย่างการทำงาน - ถอดรหัสตัวอย่าง v1 UUID ด้วยมือลงในการประทับเวลาและฟิลด์โหนด

เส้นควบคุมเวลามีความสำคัญสำหรับการทำความเข้าใจความเสี่ยง เนื่องจาก v1 UUID ในเอกสารที่สร้างขึ้นใน 1998 มีการประทับเวลาเข้ารหัส 1998-era เวลา ซึ่งมีประโยชน์สำหรับนิติเวชแต่ก็คือตัวปัญหาเอง หากคุณมีเอกสารเชิงประวัติที่มี v1 UUID และคุณแบ่งใช้ในภายหลัง การประทับเวลาจะยังคงอยู่ คุณไม่สามารถลบข้อเท็จจริงทางประวัติศาสตร์ที่ว่า UUID ถูกสร้างขึ้นในช่วงเวลาหนึ่งๆ ย้อนหลังได้ คุณสามารถหยุดสร้าง UUID v1 ใหม่ได้เท่านั้น แอปพลิเคชันบางตัวพยายามลดการรั่วไหลของที่อยู่ MAC โดยการแทนที่ MAC จริงด้วยนามแฝงแบบสุ่ม แต่การประทับเวลายังคงสามารถอ่านและถอดรหัสได้อย่างสมบูรณ์

การเปลี่ยนแปลงใน v4 และ v7 คืออะไร — UUID แบบสุ่มไม่มีข้อมูลเครื่อง v7 ยังคงเปิดเผยเวลาในการสร้างซึ่งอาจยอมรับได้หรือไม่ก็ได้

ตัวอย่างการทำงานแสดงการถอดรหัสในทางปฏิบัติโดยใช้เวกเตอร์ตัวอย่าง RFC 9562 รับ v1 UUID เช่น f81d4fae-7dec-11d0-a765-00a0c91e6bf6 จากข้อกำหนด ไบต์ตามลำดับคือ f81d4fae 7dec 11d0 a765 00a0c91e6bf6 ฟิลด์เวอร์ชันอยู่ในกลุ่มที่สาม: 11d0 ในฐานสิบหกคือ 0001 0001 1101 0000 ในไบนารี 4 bits ตัวแรกคือ 0001 ซึ่งเป็นเวอร์ชัน 1 การประทับเวลาจะแบ่งระหว่างกลุ่มแรก ที่สอง และส่วนของกลุ่มที่สาม: time_low คือ f81d4fae ในฐานสิบ 4170404526, time_mid คือ 7dec ในฐานสิบ 32236, time_high คือ 1d0 จากกลุ่มที่สาม หลังจากลบเวอร์ชัน nibble ในฐานสิบ 464 การรวมสิ่งเหล่านี้เข้ากับค่า 60-บิต จะให้ตัวเลขที่แสดงถึง 100-ช่วงเวลานาโนวินาทีตั้งแต่ 1582

สิ่งนี้ไม่ครอบคลุม — ตัวเลือกโหนดแบบสุ่มที่มีการใช้งาน v1 บางอย่าง ซึ่งบรรเทาลงแต่ไม่ได้ลบการรั่วไหลของการประทับเวลา

ฟิลด์โหนดในกลุ่มที่สี่และห้าคือ a765 00a0c91e6bf6 ซึ่งจะเข้ารหัสข้อมูลเครื่องหากบิต 0 บ่งชี้ถึงความถูกต้อง หากบิตที่มีนัยสำคัญน้อยที่สุดของออคเต็ตแรกของฟิลด์โหนดเป็นศูนย์ จะระบุที่อยู่ IEEE จริง หากตั้งค่าเป็นหนึ่ง จะแสดงค่าสุ่มเทียมที่สร้างขึ้นเพื่อความเป็นส่วนตัว ในตัวอย่างนี้ a765 ในรูปแบบฐานสิบหกคือ 10100111 01100101 ในรูปแบบไบนารี บิตที่มีนัยสำคัญน้อยที่สุดคือ 1 ดังนั้นนี่คือโหนดเทียมแบบสุ่ม ไม่ใช่ MAC จริง อย่างไรก็ตาม การใช้งานแบบเก่าบางครั้งจะจัดเก็บที่อยู่ MAC จริงไว้โดยตรง และหากเป็นเช่นนั้น ฟิลด์โหนด 48 บิตจะถอดรหัสเป็นตัวระบุการ์ดเครือข่าย IEEE รักษารีจิสทรีของคำนำหน้า MAC การรู้ว่าการ์ดเครือข่ายเริ่มต้นด้วยคำนำหน้าจะทำให้ผู้ผลิตแคบลงและอาจรวมถึงรุ่นของคอมพิวเตอร์ที่ใช้งานอยู่

สิ่งสำคัญ: รู้ว่า ID ของคุณเปิดเผยอะไร — ตัวสร้าง ToolAcre จะดึงตัวระบุทุกตัวจาก CSPRNG ดังนั้นจึงไม่มีที่อยู่ MAC หรือการประทับเวลาที่จะรั่วไหล

RFC 9562 เวอร์ชัน 4 และหลังจากนั้น จงใจหลีกเลี่ยงการรั่วไหลนี้โดยใช้ข้อมูลแบบสุ่มเท่านั้น แทนที่จะเข้ารหัสข้อมูล เวอร์ชัน 4 UUID คือ 122 bits ของข้อมูลสุ่มแบบเข้ารหัส โดยมี 4 bits สำหรับฟิลด์เวอร์ชัน และ 2 bits สำหรับฟิลด์ตัวแปร การอ่านบิตจะไม่เปิดเผยสิ่งใดนอกจากว่า UUID นั้นถูกต้อง ไม่มีการประทับเวลาให้ถอดรหัส ไม่มีข้อมูลเครื่องให้แยก เวอร์ชัน 7 มีการประทับเวลาสำหรับการเรียงลำดับผลประโยชน์ แต่การประทับเวลานั้นได้มาจากยุค Unix ที่คุ้นเคยและเป็นมาตรฐาน แทนที่จะเป็นค่าตาม 1582 ที่คลุมเครือ และข้อกำหนดระบุอย่างชัดเจนว่าข้อมูลเวลามีอยู่ในตัวระบุ คุณสมบัติความเป็นส่วนตัวแตกต่างกันโดยพื้นฐานระหว่างเวอร์ชันต่างๆ