개발자 도구 · UUID 생성기
crypto.getRandomValues이 16개의 임의 바이트를 v4 UUID로 변환하는 방법
· 작동 원리
uuid 암호화 브라우저 API
버전 4 UUID는 6비트를 덮어쓴 암호화 보안 생성기의 16 bytes입니다. 이 게시물은 Web Crypto 호출의 바이트를 익숙한 36자 문자열로 안내합니다.
서버가 응답하기 전에 필요한 ID — 클라이언트 측 생성이 오프라인 우선 양식, 낙관적 UI 및 일괄 가져오기로 나타나는 이유
오프라인 양식에는 서버가 응답하기 전에 식별자가 필요할 수 있으며 낙관적 UI는 한 번에 여러 개체를 생성할 수 있습니다. UUIDv4는 중앙 카운터 없이 독립적으로 생성되도록 설계되었습니다. 이는 사용자 신원 증명이나 인증 대신 안전하게 입력할 수 있는 비밀이 아닙니다. 데이터베이스에 생성 시간별로 정렬되는 값이 필요한 경우 임의의 v4 ID는 순서가 지정되지 않습니다. 이는 무작위성을 약화시키는 이유라기보다는 별도의 스키마 결정입니다.
crypto.getRandomValues이 실제로 수행하는 작업 — JavaScript 공식이 아닌 운영 체제의 엔트로피 소스에서 형식화된 배열 채우기
crypto.getRandomValues은 브라우저 플랫폼의 암호화 보안 무작위 생성기에서 가져온 16 bytes로 Uint8Array를 채웁니다. Date.now() 또는 Math.random()에서 값을 파생하지 않습니다. 운영 체제와 브라우저는 기본 엔트로피 소스를 구현하므로 JavaScript 코드는 난수 공식 자체를 구현하는 대신 바이트를 받습니다. ToolAcre는 보안 소스가 없는 경우 식별자 생성을 거부합니다.
바이트 6 및 바이트 8 덮어쓰기 - 버전 니블이 4가 되고 변형 비트가 10xx가 되는 방법과 6비트만 손실되는 이유
RFC 9562는 버전 니블 및 변형 필드를 설명합니다. 16개의 임의 바이트로 시작하여 바이트 6의 상위 4비트를 이진수 0100(버전 4)으로 설정하고 바이트 8의 상위 2비트를 10(표준 변형)으로 설정합니다. 구현에서는 (byte6 & 0x0f) | 0x40 및 (바이트8 및 0x3f) | 0x80. 6비트가 덮어쓰기되어 UUIDv4 구성표에 따라 122개의 임의 비트가 남습니다. 이러한 상수 비트는 나머지 바이트를 덜 무작위로 만들지 않습니다.
바이트에서 8-4-4-4-12까지 — 표준에 따라 16진수 인코딩, 소문자 출력 및 하이픈 배치가 정의됩니다.
필요한 경우 앞에 0이 붙는 정확히 두 개의 16진수 문자로 각 바이트를 인코딩합니다. 4, 6, 8 및 10 bytes 뒤에 대시를 삽입하여 친숙한 8-4-4-4-12 16진수 문자 그룹을 생성합니다. 유효한 v4 문자열의 세 번째 그룹 시작 부분에는 4가 있고 네 번째 그룹 시작 부분에는 8, 9, a 또는 b 중 하나가 있습니다. 형식화는 엔트로피를 추가하지 않습니다. UUID 텍스트 형식을 기대하는 도구와 기본 128비트 값만 상호 운용 가능하게 만듭니다.
실제 예제 — 최종 UUID 문자열에 대한 마스킹 및 형식화를 통해 추적된 하나의 16바이트 버퍼
예시 바이트 00 11 22 33 44 55 F6 77 38 99 AA BB CC DD EE FF를 추적합니다. 바이트 6에서 F6을 마스킹하면 46이 생성됩니다. 8바이트에서 38을 마스킹하면 B8이 생성됩니다. 소문자 16진수 형식과 대시 이후의 결과는 00112233-4455-4677-b899-aabbccddeeff입니다. 이는 프로덕션에서 재사용하기 위한 식별자가 아니라 의도적으로 고정된 교육 예제입니다. 각 실제 개체에 대해 새로운 개체를 생성하고 버전 및 변형 위치를 직접 비교하십시오.
crypto.randomUUID() 원콜 단축 기능 — 최신 메소드의 기능과 이를 사용할 수 없는 경우
보안 원본에서 crypto.randomUUID()은 한 번의 호출로 v4 생성 및 형식 지정을 수행합니다. ToolAcre는 사용 가능한 경우 이를 사용하고 그렇지 않으면 위의 명시적 비트 작업을 사용하여 getRandomValues로 대체합니다. 브라우저 가용성은 상황에 따라 다릅니다. randomUUID는 보안 상황으로 제한되는 반면, getRandomValues는 HTTP LAN 페이지에 계속 존재할 수 있습니다. 어느 분기도 단지 버튼이 작동하도록 유지하기 위해 Math.random로 대체되지 않습니다.
여기서 다루지 않는 내용 — 임의 바이트와 다른 입력이 필요한 시간 기반(v1, v7) 및 이름 기반(v3, v5) 버전
이 메커니즘은 시간 기반 v1 또는 v7 식별자, 이름 기반 v3/v5 식별자 또는 실험적인 v8 레이아웃을 설명하지 않습니다. 무작위 UUID는 절대적인 수학적 충돌 불가능성이 아니라 소리 무작위성과 충돌 확률이 매우 낮습니다. v4 UUID 자체는 보안성, 수명 및 권한 부여를 독립적으로 고려하지 않고 액세스 제어 확인 또는 비밀번호 재설정 토큰으로 사용해서는 안 됩니다.
요점: 안전한 임의성이 전체 작업입니다. ToolAcre UUID 생성기는 동일한 브라우저 CSPRNG에서 가져오므로 복사한 내용이 코드에서 생성되는 내용입니다.
안전한 무작위성이 중요합니다. ToolAcre UUID 생성기는 브라우저의 CSPRNG를 사용하고 버전 및 변형 비트를 적용하며 복사된 값에 대한 올바른 형식 검사를 제공합니다. 생성된 결과를 바이트 레이아웃 예제와 비교한 다음 애플리케이션이 실제로 할당한 역할에 대해서만 새로운 고유 출력을 사용하십시오.