Công cụ dành cho nhà phát triển · Trình tạo UUID
Cách crypto.getRandomValues Biến 16 byte ngẫu nhiên thành v4 UUID
· Cách thức hoạt động
uuid mật mã browser-apis
Phiên bản 4 UUID là 16 bytes từ trình tạo bảo mật bằng mật mã với sáu bit được ghi đè. Bài đăng này sẽ chuyển từng byte từ lệnh gọi Web Crypto đến chuỗi ký tự 36 quen thuộc.
ID bạn cần trước khi máy chủ trả lời — tại sao việc tạo phía máy khách xuất hiện ở dạng ngoại tuyến đầu tiên, giao diện người dùng lạc quan và nhập hàng loạt
Biểu mẫu ngoại tuyến có thể cần số nhận dạng trước khi máy chủ phản hồi và giao diện người dùng lạc quan có thể tạo nhiều đối tượng cùng một lúc. UUIDv4 được thiết kế để tạo độc lập mà không cần bộ đếm trung tâm. Nó không phải là bằng chứng về danh tính người dùng hoặc bí mật mà bạn có thể sử dụng để xác thực một cách an toàn. Nếu cơ sở dữ liệu của bạn cần các giá trị sắp xếp theo thời gian tạo, ID v4 ngẫu nhiên sẽ không được sắp xếp; đó là một quyết định lược đồ riêng biệt chứ không phải là lý do để làm suy yếu tính ngẫu nhiên của chúng.
crypto.getRandomValues thực sự làm gì — điền vào một mảng đã nhập từ nguồn entropy của hệ điều hành, không phải từ công thức JavaScript
crypto.getRandomValues điền vào Uint8Array 16 bytes từ trình tạo ngẫu nhiên được bảo mật bằng mật mã của nền tảng trình duyệt. Nó không lấy được giá trị từ Date.now() hoặc Math.random(). Hệ điều hành và trình duyệt triển khai nguồn entropy cơ bản, do đó mã JavaScript nhận byte thay vì tự triển khai công thức số ngẫu nhiên. ToolAcre từ chối tạo số nhận dạng nếu không có nguồn bảo mật.
Ghi đè byte 6 và byte 8 — cách phiên bản nibble trở thành 4 và các bit biến thể trở thành 10xx và tại sao chỉ có sáu bit bị mất
RFC 9562 mô tả một trường phiên bản và một trường biến thể. Bắt đầu với mười sáu byte ngẫu nhiên, đặt bốn bit cao nhất của byte 6 thành nhị phân 0100 (phiên bản 4) và đặt hai bit trên cùng của byte 8 thành 10 (biến thể tiêu chuẩn). Việc triển khai sử dụng (byte6 & 0x0f) | 0x40 và (byte8 & 0x3f) | 0x80. Sáu bit bị ghi đè, để lại 122 bit ngẫu nhiên theo sơ đồ UUIDv4. Những bit không đổi đó không làm cho các byte còn lại ít ngẫu nhiên hơn.
Từ byte đến 8-4-4-4-12 — mã hóa hex, đầu ra chữ thường và vị trí dấu gạch nối theo tiêu chuẩn xác định chúng
Mã hóa từng byte chính xác bằng hai ký tự thập lục phân với số 0 đứng đầu khi cần. Chèn dấu gạch ngang sau 4, 6, 8 và 10 bytes, tạo ra các nhóm ký tự thập lục phân 8-4-4-4-12 quen thuộc. Chuỗi v4 hợp lệ có 4 ở đầu nhóm thứ ba và một trong 8, 9, a hoặc b ở đầu nhóm thứ tư. Định dạng không thêm entropy; nó chỉ làm cho giá trị 128-bit cơ bản có thể tương tác được với các công cụ yêu cầu dạng văn bản UUID.
Ví dụ đã hoạt động — một bộ đệm 16 byte được theo dõi thông qua việc tạo mặt nạ và định dạng cho chuỗi UUID cuối cùng của nó
Theo dõi các byte minh họa 00 11 22 33 44 55 F6 77 38 99 AA BB CC DD EE FF. Che giấu F6 ở byte 6 tạo ra 46; che giấu 38 tại byte 8 tạo ra B8. Sau khi định dạng thập lục phân viết thường và gạch ngang, kết quả là 00112233-4455-4677-b899-aabbccddeeff. Đây là một ví dụ giảng dạy cố tình cố định, không phải là mã định danh để sử dụng lại trong sản xuất. Tạo một cái mới cho từng đối tượng thực và tự mình so sánh vị trí phiên bản và biến thể.
crypto.randomUUID() làm phím tắt một cuộc gọi — phương pháp mới hơn giúp ích gì cho bạn và ở đâu phương pháp này không khả dụng
Trên nguồn gốc an toàn, crypto.randomUUID() thực hiện việc tạo và định dạng v4 trong một cuộc gọi. ToolAcre sử dụng nó khi có sẵn và nếu không thì quay lại getRandomValues với các thao tác bit rõ ràng ở trên. Tính khả dụng của trình duyệt khác nhau tùy theo ngữ cảnh: RandomUUID bị hạn chế trong các ngữ cảnh bảo mật, trong khi getRandomValues có thể vẫn tồn tại trên trang HTTP LAN. Cả hai nhánh đều không quay trở lại Math.random chỉ để giữ cho một nút có vẻ hoạt động.
Điều này không bao gồm những gì - phiên bản dựa trên thời gian (v1, v7) và dựa trên tên (v3, v5), cần đầu vào khác với byte ngẫu nhiên
Cơ chế này không mô tả số nhận dạng v1 hoặc v7 dựa trên thời gian, số nhận dạng v3/v5 dựa trên tên hoặc bố cục v8 thử nghiệm. UUID ngẫu nhiên có xác suất va chạm rất thấp với tính ngẫu nhiên về âm thanh, không phải là khả năng va chạm tuyệt đối về mặt toán học. Không nên sử dụng bản thân v4 UUID làm mã kiểm tra kiểm soát truy cập hoặc mã thông báo đặt lại mật khẩu mà không xem xét độc lập tính bảo mật, thời gian tồn tại và ủy quyền.
Bài học rút ra: tính ngẫu nhiên an toàn là toàn bộ công việc — trình tạo ToolAcre UUID lấy từ cùng một trình duyệt CSPRNG, vì vậy nội dung bạn sao chép chính là nội dung mà mã của bạn sẽ tạo ra
Tính ngẫu nhiên an toàn là công việc. Trình tạo ToolAcre UUID sử dụng CSPRNG của trình duyệt, thực thi các bit phiên bản và biến thể, đồng thời cung cấp tính năng kiểm tra tính đúng định dạng cho các giá trị được sao chép. So sánh kết quả được tạo với ví dụ về bố cục byte, sau đó chỉ sử dụng đầu ra mới, duy nhất cho vai trò mà ứng dụng của bạn thực sự đã gán cho nó.