한국어

개발자 도구 · UUID 생성기

직접 UUID 읽기: 버전 및 변형 비트가 있는 위치

· 작동 방식

uuid 암호화 브라우저 API

버전 니블(위치 14) 및 변형 필드(위치 19)가 강조 표시된 UUID 문자열은 ID 유형을 나타내는 16진수 문자를 보여줍니다.
원본 ToolAcre 벡터 일러스트레이션

모든 UUID에 있는 두 개의 16진수 문자는 해당 버전이 생성된 버전과 그에 따른 변형 레이아웃을 알려줍니다. 한 눈에 읽는 법을 배우고 그들이 당신에게 말할 수 없는 것을 아는 법을 배우십시오.

이 ID를 만든 시스템은 무엇입니까? — 버전 니블이 답변할 수 있는 로그 포렌식 질문

UUID 문자열에는 36 문자가 있습니다. 즉, 32개의 16진수 숫자와 8-4-4-4-12 위치에 4개의 하이픈이 있습니다. 모든 UUID의 두 문자(14 및 19 위치에 나타남)는 메타데이터를 인코딩합니다. 버전 필드는 ID를 생성한 알고리즘을 알려주고 변형 필드는 따르는 표준 레이아웃을 알려줍니다. 도구 없이 이 두 문자를 읽는 것이 로그 포렌식 기술입니다. 데이터베이스 덤프 또는 오류 메시지에서 UUID을 발견하고 그것이 v1 타임스탬프(생성 시간 누출)인지, v4 임의 값(CSPRNG에서 생성됨)인지, 아니면 다른 것인지 즉시 알 수 있습니다. 버전 번호는 UUID의 비트 48–51를 차지하며, 이는 세 번째 그룹의 첫 번째 16진수 문자에 매핑됩니다.

5개 그룹의 128비트 레이아웃 — 8-4-4-4-12가 바이트에 매핑되는 방식과 그룹이 기능이 아니라 기록인 이유

xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx 문자열의 경우 14 위치에 있는 문자가 버전입니다. RFC 9562은 버전 1부터 8까지 정의합니다. v1은 그레고리력 시간을 기반으로 하며 생성 시간이 누출됩니다. v4는 무작위입니다. v7은 Unix 시간 기반이며 정렬 가능합니다. 버전 0, 9 이상은 예약되었거나 사용되지 않습니다. v1 UUID이 표시되면 시간과 하드웨어 주소가 혼합되어 있음을 알 수 있습니다. v4가 표시되면 ID는 버전 비트가 설정된 임의 바이트입니다. v7이 보이면 생성 시간을 기준으로 정렬됩니다. 버전은 선택사항이 아닙니다. 올바르게 구성된 모든 UUID에는 하나가 있습니다. 변형 필드는 8 옥텟의 가장 중요한 두 비트인 UUID의 64–65 비트를 차지합니다.

버전 니블 — 세 번째 그룹의 첫 번째 문자, 1부터 8까지의 의미, 0 또는 9이 나타내는 내용

텍스트 표현 xxxxxxxx-xxxx-xxxx-Nxxx-xxxxxxxxxxxx에서 네 번째 그룹(위치 19)의 첫 번째 문자는 변형을 인코딩합니다. RFC 9562 변형(최신 사용 표준)의 경우 이 문자는 8, 9, a 또는 b(이진수로 된 1000, 1001, 1010 및 1011의 16진수 표현)여야 합니다. 다른 문자(0–7, c–f)는 다른 변형을 나타냅니다. 0–7은 NCS 이전 버전과 호환됩니다. c–d는 리틀 엔디안 바이트 순서를 사용하는 Microsoft 레거시 GUID입니다. e–f는 예약되어 있습니다. 19 위치를 읽고 8, 9, a 또는 b를 보면 RFC 9562 UUID을 보고 있는 것입니다. 다른 값은 바이트가 다른 해석을 따른다는 것을 의미합니다. 128비트 레이아웃은 0~15 옥텟으로 나뉘지만 텍스트 형식은 기능이 아닌 가독성을 위해 그룹으로 구분됩니다.

변형 필드 — 네 번째 그룹의 첫 번째 문자가 RFC UUID의 경우 8, 9, a 또는 b인 이유와 c/d(Microsoft 레거시) 또는 0–7(NCS) 신호

5개 그룹은 기록 필드 경계를 나타냅니다. 처음 3개 필드에는 v1 UUID의 타임스탬프와 버전이 포함되고, 네 번째 필드에는 시계 순서와 변형이 포함되고, 다섯 번째 필드에는 노드 식별자가 포함됩니다. 버전 4 이상 UUID 버전은 이러한 필드 이름을 사용하지 않지만 동일한 비트 위치에는 여전히 버전과 변형이 포함됩니다. v4 UUID를 읽는다는 것은 대부분의 128 비트가 무작위 페이로드이지만 그 중 두 개(텍스트의 14 및 19 위치)가 표준에 따라 고정되어 있다는 것을 의미합니다. 이러한 고정 비트는 ID가 v4 및 RFC 변형임을 증명합니다. nil UUID은 00000000-0000-0000-0000-000000000000이며 모두 0이며 버전이 전혀 없습니다. 최대 UUID는 ffffffff-ffff-ffff-ffff-ffffffffffff(모두 f 문자)이며 예약되어 있으며 버전이 없습니다.

작업된 예 — v4 및 v7을 포함하여 세 가지 샘플 식별자를 문자별로 디코딩합니다.

잘 구성된 다른 모든 UUID에는 세 번째 그룹에 버전이 있고 네 번째 그룹에 변형이 있습니다. 세 가지 샘플 ID로 직접 테스트해 보세요. 123e4567-e89b-12d3-a456-426614174000(v1, 변형 RFC(위치 19는 a이므로)); 9b2e4f1a-4f3e-4c1a-8a7d-1b2c3d4e5f60(v4, 위치 19이 8이므로 변형 RFC); 018f0c2e-1b5a-7c3d-9e4f-5a6b7c8d9e0f(v7, 위치 19가 9이므로 변형 RFC). ToolAcre 검사기가 판독값을 확인합니다. 형식 확인에서는 ID가 고유한지, 데이터베이스에 존재하는지, 안전하게 생성되었는지 알 수 없습니다. 버전 v1은 시간과 하드웨어를 입력으로 사용하므로 다른 시스템의 동일한 v1 UUID는 클럭 왜곡 또는 동기화 문제를 의미합니다. 버전 v4는 무작위이므로 중복 v4 UUID는 무작위성이 깨졌거나 천문학적으로 가능성이 없는 충돌을 의미합니다(사운드 무작위성이 있는 대략 2. 7조 UUID당 하나).

Nil 및 Max — 버전이 전혀 없는 두 개의 모두 0 및 모두 F 값

버전 0 또는 9은 문자열이 전혀 유효한 UUID이 아님을 의미합니다. 버전과 변형을 읽는 것은 ID가 무엇인지 이해하는 첫 번째 단계입니다. 그것이 존재하는지 또는 고유한지 확인하는 것은 데이터베이스 및 비즈니스 로직에 의해 수행되는 두 번째 및 세 번째 단계입니다. 비트 위치를 이해하면 데이터 마이그레이션을 디버깅하는 데 도움이 됩니다. 레거시 시스템에서 UUID를 가져올 때 일부 도구는 RFC 9562 표준과 일치하지 않는 변형 필드를 내보냅니다. c 또는 d의 변형 필드는 리틀 엔디안 바이트 순서로 Microsoft GUID를 나타냅니다. 이러한 GUID는 Microsoft 시스템 내에서 유효한 식별자이지만 바이트 순서 변환 없이는 RFC 9562 UUID와 상호 운용되지 않습니다. 위치 19를 읽으면 어떤 시스템이 ID를 생성했는지 즉시 알 수 있습니다. 8, 9, a 또는 b가 표시되면 RFC 표준 UUID이 있는 것입니다.

형식 확인으로 알 수 없는 것 - ID가 데이터베이스에 존재하는지, 안전하게 생성되었는지, 고유한지

c 또는 d가 표시되면 Microsoft GUID가 있는 것입니다. 다른 문자가 보이면 식별자가 잘못되었거나 모호한 시스템에서 온 것입니다. ToolAcre 생성기는 항상 8, 9, a 또는 b 중 하나로 위치 19을 사용하여 RFC 9562 UUID를 생성합니다. 3비트 버전 필드는 7개의 가능한 값을 인코딩합니다(1–7; 버전 0 및 8은 특별한 의미를 갖습니다). 버전 1은 그레고리력 타임스탬프, 버전 3은 MD5 기반 네임스페이스, 버전 4은 무작위, 버전 5은 SHA-1 기반 네임스페이스, 버전 6은 Unix 타임스탬프 기반(제안), 버전 7는 Unix 타임스탬프 기반 정렬 가능(RFC 9562에서 표준화됨)이며, 버전 8은 사용자 정의 형식용으로 예약되어 있습니다. position-14 문자를 읽으면 어떤 알고리즘이 사용되었는지 즉시 알 수 있습니다. UUID 충돌이나 예상치 못한 정렬을 디버깅하는 경우 버전 번호가 첫 번째 단서입니다. ToolAcre는 암호화에서만 v4 UUID를 생성합니다.

요약: 두 문자, 많은 컨텍스트 — ToolAcre의 올바른 형식 검사를 사용하여 문자열 구문 분석을 확인한 다음 니블 버전을 직접 읽어보세요.

getRandomValues; 생성되는 모든 UUID에는 14 위치에 4이 있습니다. UUID 구조를 직접 분석하는 것은 도구를 사용할 수 없는 복잡한 시스템을 디버깅하는 데 유용한 기술입니다. 프로덕션 사고에서는 특별한 도구를 실행하지 않고 데이터베이스 덤프, 오류 로그 또는 캐시에서 UUID를 읽어야 할 수도 있습니다. 버전을 식별하기 위해 14 위치를 찾습니다(시간이 누출됩니까? 무작위입니까? 정렬 가능합니까?). 변형을 식별하기 위해 위치 19를 찾습니다(RFC 표준입니까, Microsoft GUID입니까? 예약되어 있습니까?). 총 36 중 이 두 문자는 메타데이터를 전달합니다. 나머지 34 문자는 페이로드(타임스탬프, 임의 바이트 또는 기타 알고리즘 관련 데이터)입니다. 페이로드가 무엇을 나타내는지 알면 시스템에서 ID의 역할을 이해하는 데 도움이 됩니다.