Tiêu chuẩn Quốc gia TCVN 10583-8:2014

28 15 0
Tiêu chuẩn Quốc gia TCVN 10583-8:2014

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tiêu chuẩn Quốc gia TCVN 10583-8:2014 quy định định dạng và quy tắc tạo cho phép người sử dụng đưa ra các định danh 128 bít được đảm bảo đơn nhất toàn cầu hoặc đơn nhất toàn cầu với xác suất cao. UUID được tạo ra theo Tiêu chuẩn này phù hợp với định danh tạm thời 100 nano giây tạo ra một UUID mới, hoặc phù hợp với định danh cố định. Tiêu chuẩn này bắt nguồn từ các đặc tả ban đầu không theo tiêu chuẩn của UUID và thế hệ sau của UUID giống hệt với các đặc tả ban đầu đó. Tiêu chuẩn này quy định các thủ tục điều hành của cơ quan đăng ký UUID trên nền tảng Web.

TIÊU CHUẨN QUỐC GIA TCVN 10583-8:2014 ISO/IEC 9834-8:2008 CÔNG NGHỆ THÔNG TIN – LIÊN KẾT HỆ THỐNG MỞ – THỦ TỤC ĐIỀU HÀNH CỦA CƠ QUAN ĐĂNG KÝ OSI – PHẦN 8: TẠO VÀ ĐĂNG KÝ CÁC ĐỊNH DANH ĐƠN NHẤT (UUIDS) VÀ SỬ DỤNG NHƯ CÁC THÀNH PHẦN ĐỊNH DANH ĐỐI TƯỢNG ASN.1 Information technology – Open systems interconnection – Procedures for the operation of OSI registration authorities – Part 8: Generation and registration of universally unique identifier (UUIDs) and their use as ASN.1 object identifier components Lời nói đầu TCVN 10583-8:2014 hoàn toàn tương đương với ISO/IEC 9834-8:2008 TCVN 10583-8:2014 Ban kỹ thuật tiêu chuẩn quốc gia TCVN/JTC Công nghệ thông tin biên soạn, Tổng cục Tiêu chuẩn Đo lường Chất lượng đề nghị, Bộ Khoa học Công nghệ công bố Lời giới thiệu Bộ tiêu chuẩn TCVN 10583 (ISO/IEC 9834) Công nghệ thông tin – Liên kết hệ thống mở gồm tiêu chuẩn sau đây: TCVN 10583-1:2014 (ISO/IEC 9834-1:2012) Công nghệ thông tin – Thủ tục điều hành quan đăng ký định danh đối tượng – Phần 1: Thủ tục chung cung định danh đối tượng quốc tế TCVN 10583-2:2014 (ISO/IEC 9834-2:1993) Công nghệ thông tin – Liên kết hệ thống mở – Thủ tục điều hành quan đăng ký OSI – Phần 2: Thủ tục đăng ký cho kiểu tài liệu OSI TCVN 10583-3:2014 (ISO/IEC 9834-3:2008) Công nghệ thông tin – Liên kết hệ thống mở – Thủ tục điều hành quan đăng ký OSI – Phần 3: Đăng ký cung định danh đối tượng bên cung mức ISO ITU–T quản trị TCVN 10583-4:2014 (ISO/IEC 9834-4:1991) Công nghệ thông tin – Liên kết hệ thống mở – Thủ tục điều hành quan đăng ký OSI–Phần 4: Sổ đăng ký hồ sơ VTE TCVN 10583-5:2014 (ISO/IEC 9834-5:1991) Công nghệ thông tin – Liên kết hệ thống mở – Thủ tục điều hành quan đăng ký OSI – Phần 5: Sổ đăng ký xác định đối tượng điều khiển VT TCVN 10583-6:2014 (ISO/IEC 9834-6:2005) Công nghệ thông tin – Liên kết hệ thống mở – Thủ tục điều hành quan đăng ký OSI – Phần 6: Đăng ký trình ứng dụng thực thể ứng dụng TCVN 10583-7:2014 (ISO/IEC 9834-7:2008) Công nghệ thông tin–Liên kết hệ thống mở – Thủ tục điều hành quan đăng ký OSI – Phần 7: Việc đăng ký tổ chức quốc tế ISO ITU–T TCVN 10583-8:2014 (ISO/IEC 9834-8:2008) Công nghệ thông tin – Liên kết hệ thống mở – Thủ tục điều hành quan đăng ký OSI – Phần 8: Tạo đăng ký định danh đơn (UUIDs) sử dụng thành phần định danh đối tượng ASN.1 TCVN 10583-9:2014 (ISO/IEC 9834-9:2008) Công nghệ thông tin – Liên kết hệ thống mở – Thủ tục điều hành quan đăng ký OSI – Phần 9: Đăng ký cung định danh đối tượng cho ứng dụng dịch vụ sử dụng định danh thẻ CÔNG NGHỆ THÔNG TIN – LIÊN KẾT HỆ THỐNG MỞ – THỦ TỤC ĐIỀU HÀNH CỦA CƠ QUAN ĐĂNG KÝ OSI – PHẦN 8: TẠO VÀ ĐĂNG KÝ CÁC ĐỊNH DANH ĐƠN NHẤT (UUIDS) VÀ SỬ DỤNG NHƯ CÁC THÀNH PHẦN ĐỊNH DANH ĐỐI TƯỢNG ASN.1 Information technology – Open systems interconnection – Procedures for the operation of OSI registration authorities – Part 8: Generation and registration of universally unique identifiers (UUIDs) and their use as ASN.1 object identifier components Phạm vi áp dụng Tiêu chuẩn quy định định dạng quy tắc tạo cho phép người sử dụng đưa định danh 128 bít đảm bảo đơn toàn cầu đơn toàn cầu với xác suất cao UUID tạo theo Tiêu chuẩn phù hợp với định danh tạm thời 100 nano giây tạo UUID mới, phù hợp với định danh cố định Tiêu chuẩn bắt nguồn từ đặc tả ban đầu không theo tiêu chuẩn UUID hệ sau UUID giống hệt với đặc tả ban đầu Tiêu chuẩn quy định thủ tục điều hành quan đăng ký UUID tảng Web Tiêu chuẩn quy định cho phép sử dụng UUID (được đăng ký không đăng ký) giá trị sơ cấp (xác định nhãn Unicode) cho cung bên cung liên kết UUID Điều cho phép người sử dụng tạo sử dụng cung mà không cần thực thủ tục đăng ký Tiểu chuẩn quy định cho phép sử dụng UUID (được đăng ký không đăng ký) để tạo URN Tài liệu viện dẫn Các tài liệu viện dẫn sau cần thiết cho việc áp dụng tiêu chuẩn Đối với tài liệu viện dẫn ghi năm cơng bố áp dụng nêu Đối với tài liệu viện dẫn khơng ghi năm cơng bố áp dụng phiên nhất, bao gồm sửa đổi TCVN 8271:2010 (ISO/IEC 10646:2003) Công nghệ thông tin – Bộ ký tự mã hóa tiếng Việt Recommendation ITU-T X.660 (2004)|ISO/IEC 9834-1:2008 Information technology – Open systems interconnection – Procedures for the operation of OSI registration authorities: General procedures and top arcs of the international object identifier tree (Công nghệ thông tin – Liên kết hệ thống mở - Thủ tục điều hành quan đăng ký OSI: Thủ tục chung cung định danh đối tượng quốc tế) Recommendation ITU-T X.680 (2002) | ISO/IEC 8824-1:2002 Information technology – Abstract syntax notation one (ASN.1) : Specification of basic notation (Công nghệ thông tin – Ký pháp cú pháp trừu tượng phiên 1: Quy định ký pháp sở) ISO/IEC 8802-3:2000, Information technology – Telecommunications and information exchange between systems – Local and metropolitan area network – Specific requirements – Part 3: Carrier sense multiple access with collision detection (CSMA/CD) access method and physical layer specifications (Công nghệ thông tin – Viễn thông trao đổi thông tin hệ thống – Mạng cục mạng trung tâm – Các yêu cầu cụ thể - Phần 3: Đa truy cập cản sóng với phương pháp truy cập phát xung đột quy định tầng vật lý) ISO/IEC 10118-3:2004, Information technology – Security techniques – Hash fuctions – Part 3: Dedicated hash-functions (Công nghệ thông tin – Kỹ thuật an toàn – Hàm băm – Phần 3: Các hàm băm dành riêng) FIPS PUB 180-3:2008, Federal information processing standards publication, secure hash standard (SHS) (Công bố tiêu chuẩn xử lý thơng tin, tiêu chuẩn hàm băm an tồn) IETF RFC 1321(1992) , The MD5 message – Digest algorithm (Thơng điệp MD5 – Thuật tốn phân loại) IETF RFC 2141 (1997), URN syntax (cú pháp URN) Thuật ngữ định nghĩa Các định nghĩa sau áp dụng tiêu chuẩn 3.1 Ký pháp ASN.1 Tiêu chuẩn sử dụng thuật ngữ nêu Recommendation ITU-T X.680 ½ISO/IEC 88241: a Giờ quốc tế (UTC); b Kiểu định danh đối tượng; c Kiểu định danh nguồn quốc tế hóa OID 3.2 Cơ quan đăng ký Tiêu chuẩn sử dụng thuật ngữ nêu TCVN 10583-1 (ISO/IEC 98341½Recommendation ITU-T X.660): a Cây định danh đối tượng quốc tế b Giá trị IRI/URI c Định danh nguồn quốc tế hóa OID d Định danh đối tượng e Đăng ký f Cơ quan đăng ký g Các thủ tục đăng ký h Định danh thứ cấp i Ký tự Unicode j Nhãn Unicode 3.3 Thuật ngữ mạng Tiêu chuẩn sử dụng thuật ngữ nêu ISO/IEC 8802-3: - Địa MAC 3.4 Định nghĩa bổ sung 3.4.1 Số ngẫu nhiên mã hóa (cryptographic-quality random-number) Số ngẫu nhiên số giả ngẫu nhiên tạo theo chế đảm bảo chuỗi đầy đủ giá trị lặp lại để sử dụng mã hóa (và sử dụng cho cơng việc tương tự vậy) 3.4.2 Cung liên kết UUID (joint UUID arc) Là cung bên nút định danh đối tượng quốc tế định danh giá trị định danh đối tượng {Joint-iso-1 tu-t (2) uuid (25)} giá trị định danh nguồn quốc tế hóa ASSN.1 OID “/UUID” 3.4.3 Phiên theo tên gọi (name-based version) UUID tạo sử dụng hàm băm mật mã vùng tên tên vùng tên 3.4.4 Vùng tên (name space) Hệ thống tạo tên đối tượng để đảm bảo định danh không tối nghĩa vùng tên CHÚ THÍCH: Các ví dụ cho vùng tên hệ thống tên miền mạng, URNs, OIDs, tên xác định thư điều (Xem [5]), từ khóa dành riêng cho ngơn ngữ lập trình 3.4.5 Phiên theo số ngẫu nhiên (random-number-based version) Một UUID tạo sử dụng số ngẫu nhiên số giả ngẫu nhiên 3.4.6 Biến thể UUID tiêu chuẩn (standard UUID variant) Biến thể định dạng UUID khả thi quy định tiêu chuẩn CHÚ THÍCH: Xét phương diện lịch sử, định dạng UUID khác với định dạng biến thể quy định tiêu chuẩn UUID tạo theo định dạng biến thể khác biệt 3.4.7 Phiên theo thời gian (time-based version) UUID sử dụng địa MAC để xác định hệ thống giá trị Clock theo thời gian UTC 3.4.8 Định danh đơn phổ biến (UUID) (universally unique identifier (UUID)) Giá trị 128 bít tạo phù hợp với Tiêu chuẩn phù hợp với số đặc tính cũ cung cấp giá trị hệ thống phu trội (xem 3.4.6) Các từ viết tắt Tiêu chuẩn áp dụng từ viết tắt sau: ASSN.1: Ký pháp cú pháp trìu tượng GUID: Định danh đơn toàn cầu MAC: Điều khiển truy cập thiết bị MD5: Thuật tốn mã khóa thông điệp OID: Định danh đối tượng ASN.1 OID-IRI: Định danh nguồn quốc tế hóa OID RA: Cơ quan đăng ký SHA-1: Thuật toán hàm băm bảo mật URL: Định vị nguồn đồng URN: Tên nguồn đồng UTC: Thời gian điều phối phổ dụng UUID: Định danh đơn phổ dụng Ký pháp 5.1 Tiêu chuẩn quy định dãy bít để UUID sử dụng thuật ngữ cuối Dãy bít gọi “octet 15” dãy bít cuối gọi “octet 0” 5.2 Các bit UUID đánh số từ “bit 127” đến “bit 0”, bit 127 bit quan trọng octet 15 bit bit quan trọng octet 5.3 Khi sử dụng số bảng tiêu chuẩn octet quan trọng (và bit quan trọng nhất) thị bên trái trang Điều tương ứng với thứ tự truyền octet, octet phía bên trái truyền 5.4 Một số giá trị sử dụng tiêu chuẩn thể giá trị số nguyên không dấu với độ dài bit giả định (gọi N) Các bit giá trị nguyên không dấu N-bit đánh số từ “bit N1” đến “bit 0”, bit N-1 bit quan trọng bit bít quan trọng 5.5 Các ký pháp sử dụng tiêu chuẩn Các phần biểu diễn nhớ máy tính khơng chuẩn hóa phụ thuộc vào cấu trúc hệ thống Cấu trúc UUID phép biểu diễn 6.1 Cấu trúc trường UUID 6.1.1 UUID quy định dãy thứ tự trường UUID quy định thuật ngữ ghép trường UUID Các trường UUID đặt tên là: a) Trường “TimeLow” b) Trường “TimeMid” c) Trường “VersionAndTimeHigh” d) Trường “VariantAndClockSeqHigh” e) Trường “ClockSeqLow f) Trường “Node” 6.1.2 Các trường UUID có mức độ quan trọng theo thứ tự liệt kê bên trên, “TimeLow” trường quan trọng (bit 31 “TimeLow” bit 127 UUID, “Node” trường quan trọng (bit “Node” bit UUID) 6.1.3 Nội dung trường UUID quy định thuật ngữ giá trị nguyên không dấu Version, Variant, Time, Clock Sequence Node (mỗi trường có kích cỡ bit cố định) Việc thiết lập giá trị quy định Điều 12 gán giá trị cho trường UUID quy định 12.1 CHÚ THÍCH – Một phần tên trường UUID (ví dụ, Tim eLow, Tim eMid, Tim eHigh) thứ tự liên tiếp bit UUID (từ bit đến bit 127) suy từ giá trị ngun khơng dấu riêng biệt (ví dụ từ bit đến bit 59 Tim eValue) không giống thứ tự liên tiếp bít giá trị nguyên khơng dấu 6.2 Biểu diễn nhị phân 6.2.1 Một UUID biểu diễn theo dạng nhị phân 16 octet hình thành liên kết cố định số ngun khơng dấu mã hóa trường vào nhiều octet Số octet sử dụng cho trường sau: a) Trường “TimeLow”: octet b) Trường “TimeMid”: octet c) Trường “ VersionAndTimeHigh”: octet d) Trường “VariantAndClockSeqHigh: octet e) Trường “ClockSeqLow”: octet f) Trường “Node”: octet CHÚ THÍCH: Thứ tự trường UUID biểu diễn thường xuyên hệ thống máy tính biểu diễn dạng ký tự hệ thập lục phân (Xem 6.4) 6.2.2 Bit quan trọng mã hóa số ngun khơng dấu trường UUID bít quan trọng octet (octet N, octet quan trọng nhất), bit quan trọng mã hóa số ngun khơng dấu bít quan trọng octet cuối (octet 0, bít quan trọng nhất) 6.2.3 Các trường UUID liên kết với theo thứ tự mức độ quan trọng chúng (xem điều 6.1.2) với trường quan trọng trường quan trọng cuối 6.3 Biểu diễn giá trị nguyên đơn Một UUID biểu diễn giá trị nguyên đơn Để lấy giá trị nguyên đơn UUID 16 octet biểu diễn nhị phân xem mã hóa số ngun khơng dấu bít quan trọng mã hóa số nguyên bit quan trọng (bit 7) phần 16 octet (octet 15), xem mã số nguyên không dấu bit quan trọng mã số nguyên khơng dấu bít quan trọng (bit 0) phần cuối octet 16 (octet 0) CHÚ THÍCH: Giá trị nguyên đơn sử dụng UUID hình thành giá trị nguyên ban đầu cung liên kết UUID theo quy định Điều 6.4 Biểu diễn thập lục phân Đối với định dạng thập lục phân, octet định dạng nhị phân biểu diễn theo dạng chuỗi số, sử dụng hai số thập lục phân cho octet định dạng nhị phân, định dạng giá trị bit ô cao octet 15, định dạng thứ giá trị bit ô thấp octet (xem 6.5) Ký tự “-” (45) (Xem TCVN 8271 (ISO/IEC 10646)) chèn biểu diễn thập lục phân cặp trường liền kề nhau, loại trừ trường hợp bị chèn trường “VariantAndClockSeqHigh” trường “ClockSeqLow” (Xem ví dụ Điều 8) 6.5 Cú pháp tắc biểu diễn thập lục phân 6.5.1 Định nghĩa tắc cú pháp biểu diễn thập lục phân UUID quy định sử dụng ký pháp BNF mở rộng Recommendation ITU-TX.680/ISO/IEC 8824-1, Điều 5, ngoại trừ trường hợp có khoảng trống điều từ vựng 6.5.2 Mục từ vựng “hexdigit” sử dụng đặc tả BNF xác định sau: Tên mục từ vựng – hexdigit Một “hexdigit” bao gồm ký tự sau ABCDEFabcdef0123456789 6.5.3 Biểu diễn thập nhị phân UUID phải việc tạo “UUID” UUID::= TimeLow “_”TimeMid “_”VersionAndTimeHigh “_”VariantAndClockSeqHigh ClockSeqLow “_”Node TimeLow ::= HexOctet HexOctet HexOctet HexOctet TimeMid::= HexOctet HexOctet VersionAndTimeHigh ::= HexOctet HexOctet VariantAndClockSeqHigh ::= HexOctet ClockSeqLow ::= HexOctet Node ::= HexOctet HexOctet HexOctet HexOctet HexOctet HexOctet HexOctet ::= Hexdigit hexdiget 6.5.4 Phần mềm tạo biểu diễn thập lục phân UUID không sử dụng chữ hoa CHÚ THÍCH: Biểu diễn thập lục phân khuyến cáo sử dụng theo định dạng dễ đọc, hạn chế ký tự chữ thường Tuy nhiên phần mềm xử lý biểu diễn yêu cầu chấp nhận ký tự chữ hoa chữ thường theo quy định 6.5.2 Sử dụng UUID giá trị nguyên sơ cấp nhãn Unicode cung liên kết UUID 7.1 UUID (được đăng ký không đăng ký) xem giá trị nguyên sơ cấp cung liên kết UUID sử dụng giá trị nguyên đơn UUID quy định Điều 6.3 CHÚ THÍCH: Điều 16 cung cấp thơng tin cách sử dụng UUID số nguyên cung liên kết UUID 7.2 Biểu diễn thập lục phân UUID điều 6.4 sử dụng nhãn Unicode thập phân cho cung VÍ DỤ: Sau ví dụ cách sử dụng UUID để tạo thành giá trị IRI/URI: “oid:/UUID/f81d4ae-7dec-11d0-a756-00a0c91e6bf6” Sử dụng UUID để tạo URN Một URN (Xem IETF RFC 2141) tạo cách sử dụng UUID chuỗi “urn;uuid” theo biểu diễn thập nhị phân UUID điều 6.4 VÍ DỤ: Sau ví dụ biểu diễn chuỗi UUID URN urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 CHÚ THÍCH: Định dạng URN xen kẽ (xem [6]) sẵn có, khơng dùng cho URN UUID tạo Định dạng xen kẽ sử dụng giá trị nguyên đơn UUID quy định Điều 6.3 Ví dụ biểu diễn sau: “urn:oid:2.25.329800735698586629295641978511506172918” Các quy tắc so sánh xếp UUID 9.1 Để so sánh cặp UUID, giá trị trường tương ứng (xem 6.1) UUID so sánh theo thứ tự mức độ quan trọng (xem 6.1.2) Hai UUID tương đương trường tương ứng tương đương CHÚ THÍCH 1: Thuật tốn so sánh hai UUID tương tự việc việc so sánh giá trị biểu diễn số nguyên đơn quy định 6.3 CHÚ THÍCH 2: So sánh sử dụng trường vật lý quy định Điều 6.1.1, không sử dụng giá trị liệt kê 6.1.3 quy định Điều 12 (Tim e, Clock, Sequence, Variant, Version Node) 9.2 Một UUID lớn UUID khác có giá trị lớn cho trường quan trọng trường khác 9.3 Khi biểu diễn thập lục phân UUID theo thứ tự bảng chữ (Xem điều 6.4), UUID lớn UUID nhỏ 10 Tính hợp lệ Ngoại trừ việc xác định bit biến thể có thiết lập xác hay khơng, giá trị Time sử dụng UUID theo thời gian hay không (và chưa ấn định), khơng có chế xác định tính hợp lệ UUID thời điểm nên tất giá trị khả thi xảy 11 Bit biến thể 11.1 Bit biến thể gồm bit quan trọng (bit 7,6 5) octet 7, octet quan trọng trường “VariantAndClockSeqHigh” 11.2 Tất UUID phù hợp với Tiêu chuẩn có bit biến thể với bit octet thiết lập cho giá trị bit octet thiết lập cho giá trị Bit octet bit quan trọng ClockSequence thiết lập Điều 12.4 CHÚ THÍCH: Bit liệt kê bit biến thể giá trị khác với định dạng cũ Hiểu cách rõ ràng khơng phải phần giá trị biến thể Tiêu chuẩn này, sử dụng hai bit cho giá trị biến thể 11.3 Bảng 1, liệt kê thông tin sử dụng giá trị khác bit biến thể Bảng – Sử dụng bit biến thể Bit Bit Bit Mô tả - - Lưu trữ để cung cấp tính tương thích NCS sau - Giá trị biến thể quy định Tiêu chuẩn 1 Lưu trữ để cung cấp tính tương thích sau tập đồn Microsoft 1 Lưu trữ để sử dụng tương lai Tiêu chuẩn 12 Sử dụng trường UUID thứ tự byte truyền 12.1 Yêu cầu chung 12.1.1 Bảng cung cấp vị trí tóm tắt cách sử dụng trường UUID khác biểu diễn nhị phân Bảng – Vị trí cách sử dụng trường UUID Trường Octet # Mô tả UUID “TimeLow” 15-12 Bit hàng thấp giá trị Time (32 bits) “TimeMid” 11-10 Bit hàng giá trị Time (16 bits) “VariantAndTimeHigh” 9-8 Version (4 bits) bit hàng cao Clock Sequence (6 bits) “VariantAndClockSeqHigh” Bit Variant (2 bits) bit hàng cao Clock Sequence (6 bits) “ClockSeqLow” Bit hàng thấp Clock Sequence (8 bits) “Node” 5-0 Node (Xem điều 12.5) (48 bits) 12.1.2 Vị trí trường UUID biểu diễn nhị phân mô tả Hình Hình – Ví trí trường UUID biểu diễn nhị phân 12.1.3 Biểu diễn nhị phân sử dụng để truyền dẫn theo chế liên lạc với 16 octets biểu diễn nhị phân truyền tập hợp liên tiếp 16 bit với octet (octet 15) đứng trước octet cuối (octet 0) GHI CHÚ 1: Thứ tự bit octet quy định chế truyền thông tin GHI CHÚ 2: 16 octet liên thứ tự quy định sử dụng để truyền UUID đặc tả giao thức chọn phương tiện truyền UUID luân phiên, bao gồm phân m ảnh truyền phần UUID (ví dụ phần thêm vào giá trị Time) 12.2 Phiên 12.2.1 Ba phương thức thay để tạo UUID (theo thời gian, theo tên, theo số ngẫu nhiên) xác định phân biệt bốn bit quan trọng trường “VersionAndTimeHigh” (Bit đến octet UUID) UUID tạo sử dụng chế khác gọi “các phiên UUID khác nhau” CHÚ THÍCH – Khơng hồn tồn m tả phiên “ phiên UUID khác”, nhiên tên gọi sử dụng số lý lịch sử Khơng có khái niệm “số phiên bản” truyền thống định dạng UUID, phiên m ới xác định phiên sửa đổi tiêu chuẩn Bất định dạng UUID tương lai định danh giá trị khác bit biến thể 12.2.2 Bảng liệt kê “UUID version” sử dụng bit trường “VersionAndTimeHigh” (Bit đến octet UUID) Nó ấn định giá trị “Version” nguyên cho liên kết bit CHÚ THÍCH - Giá trị phiên khơng sử dụng cho mục tiêu tương thích với định nghĩa cũ UUID Giá trị phiên O đến 15 lưu trữ để sử dụng tương lai Bảng – Các phiên UUID Bit Bit Bit Bit Giá trị phiên Mô tả 0 1 Phiên theo thời gian Tiêu chuẩn (xem điều 13) 0 Lưu trữ cho phiên bảo mật DCE với POSIX UUID kèm theo 0 1 Phiên theo tên quy định Tiêu chuẩn với MD5 (xem điều 14) 0 Phiên theo số ngẫu nhiên quy định Tiêu chuẩn (Xem điều 15) 1 Phiên theo tên quy định Tiêu chuẩn với SHA-1 (Xem điều 14) 12.3 Thời gian 12.3.1 Thời gian phải giá trị 60 bit CHÚ THÍCH - Tên “Tim e” thích hợp cho phiên theo thời gian UUID (phiên 1), không sử dụng cho nội dung giá trị tương ứng phiên khác UUID (phiên 4) 12.3.2 Đối với phiên theo thời gian UUID, Time tính khoảng 100 nano giây Giờ phối hợp quốc tế (UTC) từ nửa đêm sáng ngày 15 tháng 10 năm 1582 (ngày theo lịch Gregory có sửa đổi so với lịch Cơ đốc) CHÚ THÍCH - Trước thành lập văn phòng quốc tế de l’Heur e (Văn phòng thời gian quốc tế), phút quy ước có 60 giây Do đó, giây xen kẽ xuất cần thiết, số giây tăng (hoặc giảm) năm CHÚ THÍCH - Hệ thống tính thời gian cầm tay xảy cố xác định thời gian UTC, hệ thống thường bị khóa theo địa phương Ngoại trừ trường hợp hệ thống tiếp tục sử dụng thời gian địa phương thay đổi giá trị Clock Sequence (xem điều 12.4) UUID hệ thống tạo CHÚ THÍCH 3: Đối với hệ thống khơng truy cập vào tín hiệu thời gian tổng, đồng hồ hệ thống ghi lại thời gian địa phương, thời gian sử dụng với thời gian khác, ngồi khơng có UUID tạo có thay đổi thời gian tiết giảm ban ngày, thay đổi giá trị Clock Sequence (Xem 12.4) 12.3.3 Phiên theo tên UUID giá trị 60 bit tạo từ tên chung quy định Điều 14 CHÚ THÍCH - Ví dụ tên chung OID, URN tên phân biệt thư điều (xem [5]) 12.3.4 Phiên theo số ngẫu nhiên UUID ngẫu nhiên giả ngẫu nhiên tạo giá trị 60 bit quy định Điều 15 12.4 Chuỗi định 12.4.1 Đối với phiên theo thời gian UUID, Clock Sequence sử dụng để tránh trùng lặp phát sinh giá trị Time thiết lập lại giá trị Node thay đổi CHÚ THÍCH - Tên “Clock Sequence” thích hợp cho phiên theo thời gian UUID, tên không sử dụng cho nội dung giá trị tương ứng phiên theo tên số ngẫu nhiên UUID 12.4.2 Nếu giá trị Time thiết lập lại thiết lập lại (ví dụ hệ thống bị ngắt) phát UUID khơng thể nhận biết UUID tạo giá trị Time lớn giá trị Time thiết lập hay không Trong trường hợp này, giá trị Clock Sequence thay đổi CHÚ THÍCH - Nếu giá trị trước Clock Sequence tăng lên Clock Sequence thiết lập giá trị bảo mật ngẫu nhiên giá trị giả ngẫu nhiên 12.4.3 Tương tự trên, giá trị Node thay đổi (ví dụ, cạc mạng di chuyển máy), giá trị Clock Sequence thay đổi 12.4.4 Clock Sequence lấy giá trị ban đầu (có nghĩa lần chu kỳ sống hệ thống tạo UUID) từ số ngẫu nhiên không dẫn xuất từ giá trị Node CHÚ THÍCH - Đây hình thức tối giản hệ thống tương quan cung cấp bảo vệ tối đa cho địa MAC, địa di chuyển hoán đổi nhanh từ hệ thống sang hệ thống khác 12.4.5 Đối với phiên theo tên UUID, Clock Sequence giá trị 14 bit tạo từ tên quy định điều 14 12.4.6 Đối với phiên theo số ngẫu nhiên UUID, Clock Sequence tạo giá trị 14 bít ngẫu nhiên giả ngẫu nhiên quy định Điều 15 12.5 Nút 12.5.1 Đối với phiên theo thời gian UUID, giá trị Node bao gồm địa MAC (Xem ISO/IEC 8802-3) địa host vài giao thức mạng 12.5.2 Đối với hệ thống có nhiều địa MAC, sử dụng địa ngoại trừ địa multicast Octet UUID (octet “Node”) thiết lập octet địa MAC hệ thống tương ứng ISO/IEC 8802-3 truyền CHÚ THÍCH 1: Octet bao gồm bit toàn cục/bit cục bit đơn nhân/bit phổ rộng Bit đơn nhân/bit phổ rộng đặt truyền thông đơn hướng để tránh xung đột với địa tạo theo quy định điều 12.5.3 CHÚ THÍCH - Có thể lấy khóa địa MAC từ quan đăng ký địa MAC (Xem [4]) 12.5.3 Đối với hệ thống địa MAC, số ngẫu nhiên mật mã số giả ngẫu nhiên sử dụng (Xem phụ lục C) Bít phổ rộng thiết lập địa CHÚ THÍCH: Điều đảm bảo địa tạo không bị xung đột với địa lấy từ mạng quy định điều 12.5.2 12.5.4 Đối với UUID theo tên, giá trị Node giá trị 48 bit tạo cách kết hợp phân chia từ tên quy định điều 14 12.5.5 Đối với UUID dựa số ngẫu nhiên, giá trị Node tạo giá trị 48 bit ngẫu nhiên giả ngẫu nhiên quy định điều 15 13 Thiết lập trường UUID theo thời gian Các trường UUID theo thời gian thiết lập sau: - Xác định giá trị cho Time theo UTC Clock Sequence để sử dụng UUID quy định điều 12.3 12.4 - Mục tiêu thuật toán xác định Time số nguyên không dấu 60 bit Clock Sequence số nguyên không dấu 14 bit Các bit kề giá trị với số dành cho bit quan trọng - Đặt trường “TimeLow” với 32 bít quan trọng (từ bit đến bit 31) Time theo thứ tự quan trọng - Đặt trường “TimeMid” với bit từ bit 32 đến bit 47 Time theo thứ tự quan trọng - Đặt 12 bít quan trọng (từ bit đến bit 11) trường “VersionAndTimeHigh” với bit từ 48 đến 59 Time theo thứ tự quan trọng - Đặt bit quan trọng (Từ bit 12 đến 15) trường “VersionAndTimeHigh” vào số phiên bít quy định điều 12.2 - Đặt trường “ClockSeqLow” vào tám bít quan trọng (Từ bit đến 7) trường ClockSequence theo thứ tự quan trọng - Đặt sáu bit quan trọng (Từ bit đến 5) trường “VariantAndClockSeqHigh” vào bit quan trọng (từ bit đến 13) trường Clock Sequence theo thứ tự quan trọng - Đặt bit quan trọng (bit 7) trường “VariantAndClockSeqHigh” vào vị trí tương ứng - Đặt trường Node vào địa MAC 48 bit theo thứ tự quan trọng 14 Thiết lập trường UUID theo tên Điều quy định thủ tục để tạo UUID theo tên Điều 14.1 quy định thủ tục chung cho hàm băm (Xem ISO/IEC 10118) Điều 14.2 quy định sử dụng MD5 điều 14.3 quy định sử dụng SHA-1 CHÚ THÍCH: Sử dụng MD5 giới hạn trường hợp yêu cầu tương thích với UUID tại, SHA-1 cung cấp thuật toán băm tương thích giá trị băm giống tạo từ tài nguyên băm khác (xem C.4) 14.1 Các trường UUID theo tên thiết lập sau: - Phân bố UUID để sử dụng “định danh vùng tên” cho tất UUID tạo từ tên vùng tên CHÚ THÍCH: Điều D.9 khuyến cáo UUID sử dụng cho vùng tên phổ thơng - Chuyển tên thành chuỗi tắc octet (được xác định tiêu chuẩn quy ước vùng tên chuỗi) - Tính giá trị băm 16 octet định danh vùng tên liên kết với tên sử dụng hàm băm quy định 14.2 14.3 Số lượng octet giá trị băm từ đến 15 quy định IETF RFC 1321 (dành cho MD5) quy định FIPS PUB 180-3 dành cho cho SHA-1 - Đặt octet từ đến trường “TimeLow” vào octet từ đến giá trị băm - Lấy giá trị Node - Nếu giá trị Node trạng thái sẵn (ví dụ khơng tồn bị ngắt) khác so với giá trị Node tạo giá trị Clock Sequence ngẫu nhiên - Nếu giá trị Time trạng thái có sẵn giá trị Time lưu trữ tới muộn giá trị Time giá trị Clock Sequence tăng lên - Lưu trạng thái (giá trị Time, Clock Sequence Node tại) trở nhớ ổn định - Ngắt đồng hồ tổng - Định dạng UUID từ giá trị Time, ClockSequence Node theo bước Điều 13 A.1.2 Nếu UUID không thường xuyên tạo thuật tốn hồn tồn đầy đủ Tuy nhiên, yêu cầu thể cao vấn đề với thuật tốn đơn giản bao gồm: - Đọc trạng thái từ nhớ ổn định lần khơng hiệu quả; - Độ xác đồng hồ hệ thống 100 nano giây; - Viết trạng thái vào nhớ ổn định lần không hiệu quả; - Chia sẻ trạng thái ngồi giới hạn quy trình khơng hiệu A.1.3 Mỗi kết ghi theo kiểu mô đun cách cải thiện cục chức đọc, viết trạng thái đọc Chúng ấn định địa điều nhỏ A.2 Bộ nhớ đọc ổn định A.2.1 Trạng thái cần đọc từ nhớ ổn định lần thời điểm khởi động trạng thái đưa vào nhớ khả biến hệ thống lớn (và cập nhật nhớ ổn định cập nhật) A.2.2 Nếu trình thực khơng có nhớ ổn định sẵn có, khẳng định giá trị khơng dùng Q trình thực mong đợi làm tăng tần số tạo số Clock Sequence mới, dẫn đến tăng khả trùng lặp A.2.3 Nếu giá trị Node không thay đổi (ví dụ cạc mạng khơng gắn liền với hệ thống) thay đổi khởi tạo lại Clock Sequence theo giá trị ngẫu nhiên thay giữ giá trị nhớ ổn định, giá trị Node trả lại A.3 Tính xác đồng hồ hệ thống A.3.1 Giá trị Time tạo từ thời gian hệ thống có độ xác độ xác giá trị Time yêu cầu A.3.2 Nếu UUID không tạo thường xuyên giá trị Time đơn giản thời gian hệ thống phân chia thành số khoảng 100 nano giây cho khoảng thời gian hệ thống A.3.3 Nếu hệ thống bị khởi động sinh yêu cầu nhiều UUID khoảng thời gian hệ thống đơn dịch vụ UUID trả lại lỗi, ngắt sinh UUID đồng hồ hệ thống bắt kịp A.3.4 Giá trị thời gian xác mơ cách liên tục đếm số lượng UUID tạo giá trị giống thời gian hệ thống sử dụng để tạo bit hàng thấp giá trị Time Khoảng đếm từ đến 100 nano giây cho khoảng thời gian hệ thống CHÚ THÍCH: Nếu xử lý thường xuyên bị tràn UUID địa MAC thêm vào phân bố cho hệ thống cho phép phân bố tốc độ cao cách tạo nhiều UUID sẵn có cho giá trị Tim e A.4 Bộ nhớ ghi ổn định Không cần thiết phải ghi trạng thái vào nhớ ổn định UUID tạo Giá trị Time nhớ ổn định thiết lập định kỳ cho giá trị lớn giá trị sử dụng UUID Miễn UUID tạo có giá trị Time nhỏ giá trị đó, giá trị Clock Sequence Node khơng bị thay đổi, chụp thay đổi trạng thái cần cập nhật Ngoài ra, giá trị Time nhớ ổn định tương lai nhỏ thời gian qui chuẩn yêu cầu hệ thống khởi động lại cố nguyên nhân khởi tạo lại Clock Sequence A.5 Chia sẻ trạng thái qua quy trình Nếu việc truy cập vào trạng thái chia sẻ tạo UUID tốn sinh hệ thống lớn hoạt động để phân bố khóa giá trị Time thời điểm bị gọi, tạo quy trình từ khóa phân bố khóa kết thúc Phụ lục B (Tham khảo) Đặc tính UUID theo tên B.1 UUID theo tên nghĩa tạo ra UUID từ tên lấy từ vài vùng tên Khái niệm tên vùng tên cần phân tích đại thể khơng giới hạn tên dạng văn Các chế chuyển đổi để phân bố tên đảm bảo tính tên, vùng tên tên nằm phạm vi Tiêu chuẩn CHÚ THÍCH: Để tránh vấn đề lặp lại, UUID theo tên không tạo từ OID kết thúc với UUID theo tên B.2 Đặc tính UUID theo tên tạo theo điều 14 vùng tên lựa chọn phù hợp sau: - UUID tạo thời điểm khác từ tên giống vùng tên giống tương đương nhau; - UUID tạo từ hai tên khác vùng tên giống có xác suất khác cao - UUID tạo từ tên giống hai vùng tên khác có xác suất khác cao - Nếu hai UUID theo tên tương đương hai UUID có khả tạo từ tên giống vùng tên giống Phụ lục C (Tham khảo) Phát sinh số ngẫu nhiên hệ thống C.1 Nếu hệ thống không tạo số ngẫu nhiên dạng mật mã đa số hệ thống có số lượng lớn ngang nguồn ngẫu nhiên sẵn có từ hệ thống có khả tạo số ngẫu nhiên dạng mật mã Các nguồn rõ ràng cách hệ thống, thường bao gồm: - Phần trăm sử dụng nhớ; - Kích thước nhớ tính byte; - Số lượng byte trống nhớ chính; - Các byte trống trang tệp trung gian; - Kích cỡ tính theo byte khoảng địa ảo dành cho người sử dụng; - Tổng số byte sẵn có khoảng địa dành cho người sử dụng; - Kích cỡ tính theo byte ổ đĩa khởi động; - Kích cỡ tính theo byte ổ đĩa mồi; - Kích cỡ tính theo byte vùng đĩa trống ổ mồi; - Thời gian tại; - Tổng thời gian từ hệ thống mồi; - Kích cỡ riêng tệp thư điều hệ thống khác nhau; - Chuẩn bị tệp, đọc lần cuối sửa đổi thời gian tệp thư điều hệ thống khác nhau; - Nhân tố nguồn hệ thống khác (vùng lưu trữ heap,v…v); - Vị trí trỏ chuột tại; - Vị trí dấu cartet (ký hiệu số mũ lũy thừa bậc); - Số lượng quy trình, chuỗi thời; - Ô điều khiển ID cửa sổ hình cửa sổ hành; - Giá trị trỏ ngăn xếp gọi; - Quy trình định danh chuỗi gọi; - Cấu trúc xử lý khác quy định việc đếm biểu diễn (các lệnh thực hiện, thiếu vùng nhớ đệm, thiếu TLB) C.2 Ngoài ra, điều tên máy tính tên hệ điều hành giúp phân biệt kết lấy từ hệ thống khác C.3 Thuật tốn xác tạo giá trị Node sử dụng liệu có tính rõ ràng liệu sẵn có hàm chứa chúng thường rõ ràng Tuy nhiên, cần tiếp cận tổng quát để tích lũy nhiều nguồn vào đệm sử dụng ký hiệu truyền tin SHA-1, lấy octet từ giá trị băm thiết lập bit đổi kiểu mô tả C.4 Các hàm băm khác MD5 hàm băm quy định ISO/IEC 10118 sử dụng Yêu cầu kết phù hợp ngẫu nhiên nghĩa đầu từ tập hợp đầu vào phân bố giống đầu vào phân bố giống nhau, bit đơn thay đổi đầu vào làm nửa bít đầu thay đổi (Sử dụng MD5 không sử dụng UUID nghiên cứu cho thấy giá trị đầu vào không phân bố đồng đều) Phụ lục D (Tham khảo) Biểu diễn mẫu D.1 Các tệp dự phòng Biểu diễn bao gồm tệp: Copyt.h, uuid.c, sysdep.h, sysdep.c utest.c Tệp uuid.* biểu diễn độc lập thuật toán tạo UUID quy định Điều 13, 14 15 mô tả tối ưu phụ lục A (ngoại trừ trạng thái đầy đủ phân chia cho quy trình) Giả thiết mã hỗ trợ số nguyên 64 bit làm cho mã rõ ràng nhiều CHÚ THÍCH – Mã kiểm tra Linux (Red Hat 4.) với GCC (2.7.2) Win NT với với VC++ 5.0 D.2 Tệp copyrt.h Tất tệp nguồn đánh giá để đưa thông báo quyền sau đây: /* **Bản quyền (c) 1990 – 1993, 1996 Tập đoàn sáng lập phần mềm mở **Bản quyền (c) 1989 công ty Hewlett-Packard, palo Alto, Ca & **Tập đoàn thiết bị số Maynard, Mass **Đối với cá nhân nhận thức tệp “AS IS” cung cấp khơng có **thơng tin bảo đảm việc cho phép sử dụng, chép, sửa đổi phân **phối tệp mục tiêu mà khơng trả lệ phí, trừ thơng báo quyền **bên thông báo quyền chép mã nguồn không sử dụng tên **Tập đồn sáng lập mã nguồn mở, cơng ty Hewlett-Packard tập đoàn thiết bị **số quảng cáo liên hệ công khai để phân phối phần mềm không **cấp phép văn rõ ràng trước Tập đồn sáng lập mã nguồn mở, cơng ty **Hewlett-Packard tập đồn thiết bị số khơng đưa tun bố tính phù **hợp phần mềm mục tiêu D3 Tệp uuid.h #include “copyrt.h” #undef uuid_t Typedef struct { unsigned32 time_low; unsigned16 time_mid; unsigned16 tiem_hi_and version; unsigned8 clock_seq_hi_and_reserved; unsigned8 clock_seq_low; byte node [6]; } uuid_t; /* uuid_create - - tạo UUID */ Int uuid_create (uuid_t * uuid); /* uuid_create_from_name - - tạo UUID sử dụng “name” từ “name space”*/ Void uuid_create_from_name { uuid_t *uuid, /* trả UUID */ uuid_t nsid, /* UUID vùng tên */ void *name, /* tên tạo UUID */ int namelen /* độ dài tên */ }; / * uuid_compare – So sánh hai “lexically” UUID trả giá trị -1 u1 đứng trước u2 u1 u2 u1 sau u2 Chú thích: Thứ tự lexical khơng phải thứ tự tạm thời /* Int uuid_compare (uudi_t *u1, uuid_t *u2); D.4 Tệp uuid.c #include “copyrt.h” #include #include #include #include #ifndef _WINDOW_ #include #endif #include “uuid.h” /* Các khai báo chuyển tiếp khác nhau*/ Static int read_state (unsigned16 *clockseq, uuid_time_t *timestamp, uuid_node_t *node); static void write_state (unsigned16 clockseq, uuid_tiem timestamp, uuid_node_t node); static void format_uuid_v1 (uuid_t *uuid, unsigned16 clockseq, uuid_time_t timestamp, uuid_node_t node); static void format_uuid_v3(uuid_t *uuid, unsigned char hash[16]); static unsigned16 true_random(void); /* uuid_create - - tạo UUID */ Int uuid_create (uuid_t *uuid) { uuid_time_t timestamp, last_time; unsigned16 clockseq; uuid_node_t last_node; int f; /* yêu cầu đồng hồ tổng chúng xếp */ LOCK; /* Lấy time, node identifier,saved state từ nhớ không ổn định */ get_current_time (×tamp); get_ieee_node_identifier (&node); f = read_state (&clockseq, &last_time, &last_node); /* Nếu trạng thái NV, đồng hồ bị chậm, định danh Node thay đổi (ví dụ cạc mạng mới) làm thay đổi clockseq */ If (! F | | memcmp (&node, &last_node, sizeof node)) Clockseq = true_random(); Else if (timestamp < last_time) Clockseq++; /* lưu trạng thái cho lần tiếp theo*/ Write_state (clockseq, timestamp, node); UNCLOCK /* gán trường vào UUID */ Format_uuid_v1 (uuid, clockseq, timestamp, node); Return 1; } /* format_uuid_v1 - - tạo UUID từ timestamp, clockseq node identifier */ Void format_uuid_v1(uuid_t* uuid, unsigned16 clock_seq, uuid_time_t timestamp, uuid_node_t node) { /* tạo phiên UUID thông tin tập hợp thêm số.*/ uuid ->time_low = (unsigned long) (timestamp & 0xFFFFFFFF) ; uuid->time_mid = (unsigned short)((timestamp >> 32) & 0xFFFF); uuid->time_hi_and_version = (unsigned short)((timestamp >> 48) & 0x0FFF); uuid->time_hi_and_version |= (1 clock_seq_low = clock_seq & 0xFF; uuid->clock_seq_hi_and_reserved = (clock_seq & 0x3F00) >> 8; uuid->clock_seq_hi_and_reserved |= 0x80; memcpy(&uuid->node, &node, sizeof uuid->node); } /* Kiểu liệu cho trạng thái ổn định tạo UUID*/ typedef struct { uuid_time_t ts; /* timestamp lưu trữ */ uuid_node_t node; /* node identifier lưu trữ */ unsigned16 cs; /* Clock Sequence lưu trữ */ } uuid_state; static uuid_state st; /* read_state đọc trạng thái tạo UUID từ nhớ không ổn định*/ int read_state(unsigned16 *clockseq, uuid_time_t *timestamp, uuid_node_t*node) { static int inited = 0; FILE *fp; /* Chỉ cần đọc trạng thái lần khởi động */ if (!inited) { fp = fopenC'state", "rb"); if (fp == NULL) return 0; fread(&st, sizeof st, 1, fp); fclose(fp); inited = 1; } *clockseq = st.cs; *timestamp = st.ts; *node = st.node; return 1; } /* write_state lưu trạng thái tạo UUID nhớ không ổn định */ void write_state(unsigned16 clockseq, uuid_time_t timestamp, uuid_node_tnode) { static int inited = 0; static uuid_time_t next_save; FILE* fp; if (!inited) { next_save = timestamp; inited = 1; } /* Luôn lưu trạng thái đến trạng thái chia sẻ ổn định */ st.cs = clockseq; st.ts = timestamp; st.node = node; if (timestamp >= next_save) { fp = fopen("state", "wb"); fwrite(&st, sizeof st, 1, fp); fclose (fp); /* schedule next save for 10 seconds from now */ next_save = timestamp + (10 * 10 * 1000 * 1000); } } /* get-current_time Lấy giá trị time 60 bit 100 nano giây từ UUID Bù độ xác đồng hồ thực nhỏ 100 nano giây */ void get_current_time(uuid_time_t *timestamp) { static int inited = 0; static uuid_time_t time_last; static unsigned16 uuids_this_tick; uuid_time_t time_now; if (!inited) { get_system_time(&time_now); uuids_this_tick = UUIDS_PER_TICK; inited = 1; } for ( ; ; ) { get_system_time(&time_now); /* Nếu đồng hồ đọc thay đổi tạo UUID cuối cùng, */ if (time_last != time_now) { /* Đếm lại uuid tạo đồng hồ đọc */ uuids_this_tick = 0; time last = time now; break; } if (uuids_this_tick < UUIDS_PER_TICK) { uuids_this_tick++; break; } /* đồng hồ chạy nhanh; quay vòng */ } /* Bổ sung việc đếm UUID vào bit hàng thấp đồng hồ đọc */ *timestamp = time_now + uuids_this_tick; } /* true_random – tạo số ngẫu nhiên mã hóa ** Ví dụ khơng thực điều đó.** */ static unsigned16 true_random(void) { static int inited = 0; uuid_time_t time_now; if (!inited) { get_system_time(&time_now); time_now = time_now / UUIDS_PER_TICK; srand((unsigned int)(((time_now >> 32) A time_now) & 0xffffffff)); inited = 1; } return rand(); { /* uuid_create_from_name tạo UUID sử dụng “name” từ “namespace” */ void uuid_create_from_name(uuid_t *uuid, uuid_t nsid, void *name, int namelen) { MD5_CTX c; unsigned char hash[16]; uuid_t net_nsid; /* Đặt định danh vùng tên theo thứ tự byte mạng chúng đặt kiểu thứ tự byte ngược*/ net_nsid = nsid; htonl(net_nsid.time_low); htons(net_nsid.time_mid); htons(net_nsid.time_hi_and_version); MD5lnit(&c); MD5Update(&c, &net_nsid, sizeof net_nsid); MD5Update(&c, name, namelen); MD5Final(hash, &c); /* giá trị băm thứ tự byte mạng vị trí */ format_uuid_v3(uuid, hash); } /* format_uuid_v3 tạo UUID từ số 128 bit ngẫu nhiên (giả ngẫu nhiên) */ void format_uuid_v3(uuid_t *uuid, unsigned char hash[16]) { /* Chuyển UUID theo thứ tự byte cục */ memcpy(uuid, hash, sizeof *uuid); ntohl(uuid->time_low); ntohs(uuid->time_mid); ntohs(uuid->time_hi_and_version); /* Đặt vào bit biến thể bit phiên */ uuid->time_hi_and_version &= 0x0FFF; uuid->time_hi_and_version |= (3 clock_seq_hi_and_reserved &= 0x3F; uuid->clock_seq_hi_and_reserved |= 0x80; } /* uuid_compare So sánh hai “lexically” UUID trả lại giá trị */ #define CHECK(f1, f2) if (f1 != f2) return f1 < f2 ? -1 : 1; int uuid_compare(uuid_t *u1, uuid_t *u2) { int i; CHECK(u1->time_low, u2->time_low); CHECK(u1->time_mid, u2->time_mid); CHECK(u1->time_hi_and_version, u2->time_hi_and_version); CHECK(u1->clock_seq_hi_and_reserved, u2->clock_seq_hi_and_reserved); CHECK(u1->clock_seq_low, u2->clock_seq_low) for (i = 0; i < 6; i++) { if (u1->node[i] < u2->node[i]) return -1; if (u1->node[i] > u2->node[i]) return 1; } return 0; } #undef CHECK D.5 Tệp sysdep.h #include "copyrt.h" /* Loại bỏ xác định sau không chạy Windows 32 */ #define WININC # ifdef WININC #include #else #include #include #include #include #endif #include "global.h" /* Thay đổi chu kỳ MD5 I/IETF RFC 1321 có biểu diễn mẫu*/ #include "md5.h" /* Thiết lập sau vào số 100 nano giây cho độ xác thực đồng hồ hệ thống*/ #define UUIDS_PER_TICK 1024 /* Thiết lập sau cho gọi để nhận trả đồng hồ tổng*/ #define LOCK #define UNLOCK typedef unsigned long unsigned32; typedef unsigned short unsigned16; typedef unsigned char unsigned8; typedef unsigned char byte; /* Thiết lập cho chương trình biên dịch sử dụng kiểu liệu 64 bit */ #ifdef WININC #define unsigned64_t unsigned_int64 #define I64(C) C #else #define unsigned64_t unsigned long long #define I64(C) C##LL #endif typedef unsigned64_t uuid_time_t; typedef struct { char nodeID[6]; } uuid_node_t; void get_ieee_node_identifier(uuid_node_t *node); void get_system_time(uuid_time_t *uuid_time); void get_random_info(unsigned char seed[16]); D.6 Tệp sysdep.c #include "copyrt.h" #include #include #include "sysdep.h" /* Lệnh call độc lập hệ thống nhận định danh node MAC Biểu diễn mẫu tạo định danh ngẫu nhiên*/ void get_ieee_node_identifier(uuid_node_t *node) { static int inited = 0; static uuid_node_t saved_node; unsigned char seed[16]; FILE *fp; if (!inited) { fp = fopen("nodeid", "rb"); if (fp) { fread(&saved_node, sizeof saved_node, 1, fp); fclose(fp); } else { get_random_info(seed); seed[0] |= 0x80; memcpy(&saved_node, seed, sizeof saved_node); fp = fopen("nodeid", "wb"); if (fp) { fwrite(&saved_node, sizeof saved_node, 1, fp); fclose(fp); } } inited = 1; } *node = saved_node; } /* Lệnh call độc lập hệ thống nhận thời gian hệ thống Trả giá trị 100 nano giây từ giai đoạn UUID */ #ifdef _WINDOWS_ void get_system_time(uuid_time_t *uuid_time) { ULARGE_INTEGER time; /* Win NT giữ time theo định dạng Tệp TIME 100 nano giây từ tháng 1/1601 UUID sử dụng thời gian 100 nano giây từ 15/10/1582 Sự khác biệt 17 ngày tháng 10 + ngày 30 (tháng 11) + ngày 31 (tháng 12) + 18 năm ngày nhuận */ GetSystemTimeAsFileTime((FILETIME *)&time); time.QuadPart += (unsigned int64) (1000*1000*10) // giây * (unsigned int64) (60 * 60 * 24) // ngày *(unsigned int64) (17+30+31+365*18+5); // # ngày *uuid_time = time.QuadPart; } void get_random_info(unsigned char seed[16]) { MD5_CTX c; struct { MEMORYSTATUS m; SYSTEM_INFO s; FILETIME t; LARGE_INTEGER pc; DWORD tc; DWORD l; char hostname[MAX_COMPUTERNAME_LENGTH + 1]; } r; MD5Init(&c); GlobalMemoryStatus(&r.m); GetSystemInfo(&r.s); GetSystemTimeAsFileTime(&r.t); QueryPerformanceCounter(&r.pc); r.tc = GetTickCount(); r.l = MAX_COMPUTERNAME_LENGTH + 1; GetComputerName(r.hostname, &r.l); MD5Update(&c, &r, sizeof r); MD5Final(seed, &c); } #else void get_system_time(uuid_time_t *uuid_time) { struct timeval tp; gettimeofday(&tp, (struct timezone *)0); /* Khoảng trống thời gian định dạng UUID thời gian định dạng Unix Thời gian theo UUID UTC 15/10/1582 Thời gian theo Unix 1/1/1970 */ *uuid_time = (tp.tv_sec * 10000000) + (tp.tv_usec * 10) + I64(0X01B21DD213814000); } void get_random_info(unsigned char seed[16]) { MD5_CTX c; struct { struct timeval t; char hostname[257]; } r; MD5lnit(&c); gettimeofday(&r.t, (struct timezone *)0); gethostname(r.hostname, 256); MD5Update(&c, &r, sizeof r); MD5Final(seed, &c); } #endif D.7 Tệp utest.c #include "copyrt.h" #include "sysdep.h" #include #include "uuid.h" uuid_t NameSpace_DNS = { /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 */ 0x6ba7b810, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8 }; /* puid – In UUID */ void puid(uuid_t u) { int i; printf("%8.8x-%4.4X-%4.4X-%2.2x%2.2x-", u.time_low, u.time_mid, u.time_hi_and_version, u.clock_seq_hi_and_reserved, u.clock_seq_low); for (i = 0; i < 6; i++) printf("%2.2x", u.node[i]); printf ("\n"); } /* Ổ đĩa đơn giản cho phát UUID */ int main(int argc, char **argv) { uuid_t u; int f; uuid_create(&u); printf("uuid_create(): "); puid(u); f = uuid_compare(&u, &u); printf("uuid_compare(u,u): %d\n", f); /* giá trị */ f = uuid_compare(&u, &NameSpace_DNS); printf("uuid_compare(u, NameSpace_DNS): %d\n", f); /* giá trị */ f = uuid_compare(&NameSpace_DNS, &u); printf("uuid_compare(NameSpace_DNS, u): %d\n", f); /* giá trị -1 */ uuid_create_from_name(&u, NameSpace_DNS, "www.widgets.com", 15); printf("uuid_create_from_name(): "); puid(u); } D.8 Ví dụ utest uuid_create(): 7d444840-9dc0-11d1-b245-5ffdce74fad2 uuid_compare(u,u): uuid_compare(u, NameSpace_DNS): uuid_compare(NameSpace_DNS, u): -1 uuid_create_from_name(): e902893a-9d22-3c7e-a7b8-d6e313b71d9f D.9 Một vài ID vùng tên Điều liệt kê ID vùng tên cho vùng tên tiềm cấu trúc ngôn ngữ C biểu diễn chuỗi xác định bên /* Chuỗi Name tên miền đầy đủ */ uuid_t NameSpace_DNS = { /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 */ 0x6ba7b810, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8 }; /* Name string URL */ uuid_t NameSpace_URL = { /* 6ba7b811-9dad-11d1-80b4-00c04fd430c8 */ 0x6ba7b811, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8 }; /* Name string OID */ uuid_t NameSpace_OID = { /* 6ba7b812-9dad-11d1-80b4-00c04fd430c8 */ 0x6ba7b812, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8 }; /* Name string tên phân biệt thư điều (trong DER or định dạng xuất ký tự*/ uuid_t NameSpace_X500 = { /* 6ba7b814-9dad-11d1-80b400c04fd430c8 */ 0x6ba7b814, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8 }; THƯ MỤC TÀI LIỆU THAM KHẢO [1] Zahn, L., Dineen, T., Leach, P (January 1990), Network computing architecture , ISBN 0-13611674.-4 [2] Open group CAE:DCE: Remote procedure call, Specification C309, ISBN 1-85912=041-5, August 1994 [3] ISO/IEC 11578:1996, Information technology – Open system interconnection – Remote procedure call (RPC) [4] IEEE, Request form for an individual address block (also known as an Ethernet address block) of 4,096 MAC Address, http://standards.ieee.org/regauth/oui/pilot-ind.html [5] ITU-T Recommendation X.500 (2008) ‫ ׀‬ISO/IEC 9594-1:2008 Information technology – Open system Interconnection – The Directory: Overview of concept, models and services [6] IETF RFC 3061 (2001), A URN Namespace of Object identifiers [7] IETF RFC 4122 (2005), A universally unique identifier (UUID) URN Namespace MỤC LỤC Lời nói đầu Lời giới thiệu Phạm vi áp dụng Tài liệu viện dẫn Thuật ngữ định nghĩa Các từ viết tắt Ký pháp Cấu trúc UUID phép biểu diễn Sử dụng UUID giá trị nguyên sơ cấp nhãn Unicode cung UUID Sử dụng UUID để tạo URN Các quy tắc so sánh xếp UUID 10 Tính hợp lệ 11 Bit biến thể 12 Sử dụng trường UUID thứ tự byte truyền 13 Thiết lập trường UUID theo thời gian 14 Thiết lập trường UUID theo tên 15 Thiết lập trường UUID theo số ngẫu nhiên 16 Đăng ký UUID cách sử dụng UUID định danh đối tượng quốc tế Phụ lục A (Tham khảo) Thuật toán tạo UUID theo thời gian Phụ lục B (Tham khảo) Đặc tính UUID theo tên Phụ lục C (Tham khảo) Phát sinh số ngẫu nhiên hệ thống Phụ lục D (Tham khảo) Biểu diễn mẫu ... định Tiêu chuẩn với MD5 (xem điều 14) 0 Phiên theo số ngẫu nhiên quy định Tiêu chuẩn (Xem điều 15) 1 Phiên theo tên quy định Tiêu chuẩn với SHA-1 (Xem điều 14) 12.3 Thời gian 12.3.1 Thời gian... áp dụng tiêu chuẩn 3.1 Ký pháp ASN.1 Tiêu chuẩn sử dụng thuật ngữ nêu Recommendation ITU-T X.680 ½ISO/IEC 88241: a Giờ quốc tế (UTC); b Kiểu định danh đối tượng; c Kiểu định danh nguồn quốc tế... UUID tiêu chuẩn (standard UUID variant) Biến thể định dạng UUID khả thi quy định tiêu chuẩn CHÚ THÍCH: Xét phương diện lịch sử, định dạng UUID khác với định dạng biến thể quy định tiêu chuẩn

Ngày đăng: 27/10/2020, 18:01

Hình ảnh liên quan

9.3 Khi biểu diễn thập lục phân của UUID theo thứ tự bảng chữ cái (Xem điều 6.4), một UUID lớn hơn - Tiêu chuẩn Quốc gia TCVN 10583-8:2014

9.3.

Khi biểu diễn thập lục phân của UUID theo thứ tự bảng chữ cái (Xem điều 6.4), một UUID lớn hơn Xem tại trang 7 của tài liệu.
Hình 1– Ví trí của trường UUID trong biểu diễn nhị phân - Tiêu chuẩn Quốc gia TCVN 10583-8:2014

Hình 1.

– Ví trí của trường UUID trong biểu diễn nhị phân Xem tại trang 8 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan