Tiếng Việt

Công cụ dành cho nhà phát triển · Trình tạo UUID

Phiên bản 1 UUID có thể rò rỉ địa chỉ MAC của bạn và thời gian tạo

· Tại sao nó quan trọng

uuid mật mã browser-apis

Phân tích cấu trúc UUIDv1 hiển thị các trường dấu thời gian và bit địa chỉ MAC
Hình minh họa vector ToolAcre gốc

UUID dựa trên thời gian nhúng dấu thời gian 60-bit và mã nhận dạng nút 48-bit thường là địa chỉ card mạng thực. Bài đăng này cho thấy những gì người ngoài có thể đọc từ một người và tại sao việc tạo ngẫu nhiên lại tránh được vấn đề.

Mã định danh đặt tên cho máy tính xách tay của bạn - tại sao ID trong tài liệu được xuất có thể nhiều hơn ID

Phiên bản 1 UUID được tạo từ dấu thời gian, địa chỉ MAC và giá trị chuỗi đồng hồ. Dấu thời gian 60-bit biểu thị số khoảng 100 nano giây kể từ 15 tháng 10 1582, ngày cải cách lịch Gregory. Trường nút 48-bit theo truyền thống chứa địa chỉ IEEE 802 MAC của giao diện mạng đã tạo ra UUID. Khi bạn xuất tài liệu, chạy công cụ hoặc lưu tệp nhúng phiên bản 1 UUID, bất kỳ ai sau này giải mã UUID đó đều có thể đọc khi nó được tạo và nếu trường nút là địa chỉ MAC thực thì máy nào đã tạo địa chỉ đó. Thông tin này bị rò rỉ một cách âm thầm từ những gì có vẻ là một mã định danh không rõ ràng.

Cấu trúc của v1 UUID — các trường dấu thời gian, chuỗi đồng hồ và trường nút, cũng như vị trí của mỗi trường trong các ký tự 36

Việc rò rỉ thông tin rất tinh vi nhưng gây hậu quả cho quyền riêng tư và quyền tác giả. Nếu bạn cộng tác với đồng tác giả trên một tài liệu và địa chỉ MAC của card mạng của bạn nằm trong UUID v1 được nhúng thì người quan sát sẽ tìm hiểu phần cứng được sử dụng tại một tổ chức hoặc địa điểm cụ thể. Nếu bạn xuất tài liệu vào một thời điểm cụ thể, dấu thời gian trong mỗi giới hạn v1 UUID khi công việc diễn ra. Một tác giả cố gắng duy trì bút danh có thể được hủy bỏ ẩn danh bằng cách đối chiếu dấu thời gian UUID với ngày xuất bản hoặc sự kiện tạo tài liệu đã biết. Các mã định danh có vẻ vô hại vì chúng được định dạng dưới dạng chuỗi ký tự 36 mờ, nhưng chúng hoàn toàn không mờ đối với bất kỳ ai biết định dạng v1 và muốn giải mã chúng.

Người quan sát biết được điều gì - khi bản ghi được tạo và nếu nút là địa chỉ phần cứng thì máy hoặc nhà cung cấp nào đã tạo ra nó

Cấu trúc của v1 UUID làm rõ những gì có thể được trích xuất vì cấu trúc mang tính xác định và được ghi lại công khai. RFC 9562 xác định bố cục: 32 bits cho time_low, 16 bits cho time_mid, 4 bits cho phiên bản được đặt thành 1, 12 bits cho time_high, 2 bits cho biến thể, 14 bits cho clock_seq và 48 bits cho nút. Các trường thời gian bao gồm tổng cộng 60 bits, khi được kết hợp và hiểu là các khoảng 100 nano giây kể từ 1582 mang lại thời điểm tạo chính xác trong vòng 100 nano giây. Trường nút 48-bit thường chứa địa chỉ MAC dưới dạng số nguyên 48-bit. Giải mã có tính xác định: đọc byte, che dấu và dịch chuyển các trường cũng như diễn giải các giá trị. Không có mật mã nào liên quan; cấu trúc UUID làm cho quá trình mã hóa hoàn toàn trong suốt và có thể đảo ngược.

Lịch sử cảnh báo - cách sử dụng số nhận dạng nhúng trong tài liệu để theo dõi quyền tác giả, được mô tả mà không có suy đoán

RFC 9562 thừa nhận lịch sử quyền riêng tư và khuyến nghị không sử dụng phiên bản 1 cho các ứng dụng mới vì chi phí lớn hơn lợi ích. Thông số kỹ thuật bao gồm các lựa chọn thay thế ngẫu nhiên v4 và các lựa chọn thay thế theo thứ tự thời gian v7 với các cân nhắc về quyền riêng tư được ghi lại. Phiên bản 1 được giữ lại để tương thích ngược với các hệ thống đã triển khai nhưng mã mới không được tạo UUID v1 nếu không xem xét bảo mật cẩn thận và biện minh rõ ràng cho việc lộ thông tin. Lỗ hổng không phải là một sơ suất; đó là một lựa chọn thiết kế có chủ ý vào những năm 1980 khi rò rỉ quyền riêng tư không phải là mối quan tâm chính và việc theo dõi là một tính năng có thể chấp nhận được để nhận dạng hệ thống phân tán.

Ví dụ đã hoạt động - giải mã mẫu v1 UUID bằng tay vào các trường dấu thời gian và nút của nó

Dòng thời gian rất quan trọng để hiểu mức độ hiển thị vì v1 UUID trong tài liệu được tạo trong 1998 bao gồm mã hóa dấu thời gian 1998 thời gian, rất hữu ích cho pháp y nhưng bản thân nó lại là vấn đề. Nếu bạn có tài liệu lịch sử với UUID v1 và sau đó bạn chia sẻ chúng thì dấu thời gian vẫn tồn tại. Bạn không thể xóa thực tế lịch sử rằng UUID đã được tạo vào một thời điểm nhất định; bạn chỉ có thể ngừng tạo UUID v1 mới. Một số ứng dụng đã cố gắng giảm thiểu rò rỉ địa chỉ MAC bằng cách thay thế MAC thực bằng một bút danh ngẫu nhiên nhưng dấu thời gian vẫn hoàn toàn có thể đọc và giải mã được.

Những gì v4 và v7 thay đổi - UUID ngẫu nhiên không mang dữ liệu máy; v7 vẫn tiết lộ thời gian sáng tạo, có thể chấp nhận được hoặc không

Một ví dụ hoạt động cho thấy việc giải mã trong thực tế bằng cách sử dụng vectơ mẫu RFC 9562. Lấy v1 UUID như f81d4fae-7dec-11d0-a765-00a0c91e6bf6 từ thông số kỹ thuật. Các byte theo thứ tự là f81d4fae 7dec 11d0 a765 00a0c91e6bf6. Trường phiên bản nằm trong nhóm thứ ba: 11d0 ở dạng hex là 0001 0001 1101 0000 ở dạng nhị phân. 4 bits đầu tiên là 0001, là phiên bản 1. Dấu thời gian được chia thành phần thứ nhất, thứ hai và một phần của nhóm thứ ba: time_low là f81d4fae ở dạng thập phân 4170404526, time_mid là 7dec ở dạng thập phân 32236, time_high là 1d0 khỏi nhóm thứ ba sau khi xóa phiên bản nibble ở dạng thập phân 464. Việc kết hợp các giá trị này thành giá trị 60-bit sẽ cho ra một số biểu thị khoảng 100 nano giây kể từ 1582.

Điều này không bao gồm những gì - tùy chọn nút ngẫu nhiên mà một số triển khai v1 cung cấp, giúp giảm thiểu nhưng không loại bỏ rò rỉ dấu thời gian

Trường nút trong nhóm thứ tư và thứ năm là a765 00a0c91e6bf6, mã hóa thông tin máy nếu bit 0 biểu thị tính xác thực. Nếu bit có ý nghĩa nhỏ nhất của octet đầu tiên của trường nút bằng 0, thì nó biểu thị địa chỉ IEEE thực; nếu được đặt thành 1, nó cho biết giá trị giả ngẫu nhiên được tạo để quyền riêng tư. Trong ví dụ này, a765 ở dạng hex là 10100111 01100101 ở dạng nhị phân; bit ít quan trọng nhất là 1, vì vậy đây là nút giả ngẫu nhiên, không phải MAC thực. Tuy nhiên, các triển khai cũ hơn đôi khi được lưu trữ trực tiếp các địa chỉ thực MAC và nếu đúng như vậy, trường nút 48-bit sẽ giải mã thành mã nhận dạng thẻ mạng. IEEE duy trì sổ đăng ký tiền tố MAC; biết rằng card mạng bắt đầu bằng một tiền tố nhất định sẽ thu hẹp nhà sản xuất và có thể là kiểu máy tính đang sử dụng.

Bài học rút ra: biết ID của bạn tiết lộ những gì — trình tạo ToolAcre lấy mọi số nhận dạng từ CSPRNG, do đó không có địa chỉ MAC hoặc dấu thời gian nào bị rò rỉ

RFC 9562 phiên bản 4 trở đi đã cố tình tránh sự rò rỉ này bằng cách chỉ sử dụng dữ liệu ngẫu nhiên thay vì thông tin được mã hóa. Phiên bản 4 UUID là 122 bits dữ liệu ngẫu nhiên được mã hóa với 4 bits cho trường phiên bản và 2 bits cho trường biến thể. Đọc các bit không tiết lộ gì ngoại trừ UUID là hợp lệ; không có dấu thời gian để giải mã, không có dữ liệu máy để trích xuất. Phiên bản 7 bao gồm dấu thời gian để sắp xếp lợi ích nhưng dấu thời gian đó được lấy từ kỷ nguyên Unix quen thuộc và được tiêu chuẩn hóa thay vì giá trị dựa trên 1582 khó hiểu và đặc tả ghi rõ ràng rằng thông tin thời gian có trong mã định danh. Các thuộc tính quyền riêng tư về cơ bản khác nhau giữa các phiên bản.