한국어

개발자 도구 · UUID 생성기

버전 1 UUID로 인해 MAC 주소 및 생성 시간이 유출될 수 있음

· 그것이 중요한 이유

uuid 암호화 브라우저 API

타임스탬프 필드와 MAC 주소 비트를 보여주는 UUIDv1 구조 분석
원본 ToolAcre 벡터 일러스트레이션

시간 기반 UUID에는 60비트 타임스탬프와 실제 네트워크 카드 주소인 48비트 노드 식별자가 포함되어 있습니다. 이 게시물은 외부인이 읽을 수 있는 내용과 무작위 생성이 문제를 피하는 이유를 보여줍니다.

노트북 이름을 지정하는 식별자 - 내보낸 문서의 ID가 ID보다 클 수 있는 이유

버전 1 UUID은 타임스탬프, MAC 주소 및 시계 시퀀스 값으로 구성됩니다. 60비트 타임스탬프는 그레고리력 개혁 날짜인 15 10월 1582 이후 100-나노초 간격의 수를 나타냅니다. 48비트 노드 필드에는 일반적으로 UUID을 생성한 네트워크 인터페이스의 IEEE 802 MAC 주소가 포함됩니다. 문서를 내보낼 때 도구를 실행하거나 1 UUID 버전이 포함된 파일을 저장하면 나중에 UUID을 디코딩하는 사람은 누구나 해당 문서가 생성되었을 때 읽을 수 있으며, 노드 필드가 실제 MAC 주소인 경우 어느 컴퓨터에서 생성했는지 읽을 수 있습니다. 이 정보는 불투명한 식별자로 보이는 것에서 자동으로 유출됩니다.

v1의 구조 UUID — 타임스탬프 필드, 클록 시퀀스, 노드 필드, 그리고 각각이 36 문자에 있는 위치

정보 유출은 미미하지만 개인 정보 보호 및 귀속을 위해 중요합니다. 문서의 공동 작성자와 협력하고 네트워크 카드의 MAC 주소가 내장된 v1 UUID에 있는 경우 관찰자는 특정 기관이나 위치에서 사용 중인 하드웨어를 학습합니다. 특정 시간에 문서를 내보내는 경우 모든 v1 UUID의 타임스탬프는 작업이 발생한 시점으로 제한됩니다. 가명성을 유지하려는 작성자는 UUID 타임스탬프를 알려진 게시 날짜 또는 문서 생성 이벤트와 연관시켜 익명성을 제거할 수 있습니다. 식별자는 불투명한 36 문자 문자열로 형식화되어 있기 때문에 무해해 보이지만 v1 형식을 알고 이를 디코딩하려는 사람에게는 전혀 불투명하지 않습니다.

관찰자가 학습하는 내용 — 레코드가 생성된 시기 및 노드가 하드웨어 주소인 경우 이를 생성한 기계 또는 공급업체

v1 UUID의 구조는 구조가 결정적이고 공개적으로 문서화되어 있기 때문에 추출할 수 있는 내용을 명확히 합니다. RFC 9562은 레이아웃을 정의합니다. time_low의 경우 32비트, time_mid의 경우 16비트, 1로 설정된 버전의 경우 4비트, time_high의 경우 12비트, 변형의 경우 2비트, 14비트 node.lock_seq 및 48 비트. 시간 필드는 총 60 비트로 구성되며, 1582 이후 100-나노초 간격으로 결합 및 해석되면 100 나노초 이내에 정확한 생성 순간이 생성됩니다. 48비트 노드 필드는 일반적으로 MAC 주소를 48비트 정수로 보유합니다. 디코딩은 결정적입니다. 바이트를 읽고, 필드를 마스크 및 이동하고, 값을 해석합니다. 암호화는 포함되지 않습니다. UUID 구조는 인코딩을 완전히 투명하고 되돌릴 수 있게 만듭니다.

주의사항 기록 — 저자 추적을 위해 문서에 포함된 식별자가 어떻게 사용되었는지, 추측 없이 설명됨

RFC 9562는 개인 정보 보호 기록을 인정하고 비용이 이점보다 크기 때문에 새 애플리케이션에 대해 v1을 권장합니다. 사양에는 개인정보 보호 고려사항이 문서화된 v4 무작위 및 v7 시간순 대안이 포함되어 있습니다. 버전 1은 배포된 시스템과의 이전 버전 호환성을 위해 유지되지만, 새 코드는 신중한 보안 검토 및 노출에 대한 명시적인 정당성 없이 v1 UUID를 생성해서는 안 됩니다. 취약점은 실수가 아니었습니다. 이는 개인 정보 유출이 주요 관심사가 아니었고 추적이 분산 시스템 식별을 위해 허용되는 기능이었던 1980년대의 의도적인 설계 선택이었습니다.

작업된 예 — 샘플 v1 UUID을 직접 타임스탬프 및 노드 필드로 디코딩합니다.

1998에서 생성된 문서의 v1 UUID에는 법의학에 유용하지만 문제 자체인 1998 시대 시간을 인코딩하는 타임스탬프가 포함되어 있으므로 노출을 이해하는 데 타임라인이 중요합니다. v1 UUID가 포함된 기록 문서가 있고 나중에 이를 공유하는 경우 타임스탬프가 유지됩니다. 특정 시점에 UUID이 생성되었다는 역사적 사실을 소급하여 제거할 수 없습니다. 새로운 v1 UUID 생성만 중지할 수 있습니다. 일부 애플리케이션은 실제 MAC를 임의의 가명으로 대체하여 MAC 주소 유출을 완화하려고 시도했지만 타임스탬프는 여전히 완전히 읽고 디코딩할 수 있습니다.

v4 및 v7 변경 사항 — 임의의 UUID에는 머신 데이터가 없습니다. v7은 여전히 생성 시간을 표시하며 이는 허용될 수도 있고 허용되지 않을 수도 있습니다.

작업된 예제에서는 RFC 9562 예제 벡터를 사용하여 실제로 디코딩하는 방법을 보여줍니다. 사양에서 f81d4fae-7dec-11d0-a765-00a0c91e6bf6과 같은 v1 UUID을 가져옵니다. 순서대로 바이트는 f81d4fae 7dec 11d0 a765 00a0c91e6bf6입니다. 버전 필드는 세 번째 그룹에 속합니다. 16진수로 된 11d0은 바이너리로 0001 0001 1101 0000입니다. 첫 번째 4 비트는 0001(버전 1)입니다. 타임스탬프는 세 번째 그룹의 첫 번째, 두 번째 및 일부로 분할됩니다. time_low는 십진수 4170404526의 f81d4fae이고, time_mid는 십진수 32236의 7dec이고, time_high는 십진수 464의 버전 니블을 제거한 후 세 번째 그룹에서 1d0입니다. 이를 60비트 값으로 결합하면 1582 이후 100-나노초 간격을 나타내는 숫자가 제공됩니다.

여기서 다루지 않는 내용 — 일부 v1 구현에서 제공하는 무작위 노드 옵션은 타임스탬프 누출을 완화하지만 제거하지는 않습니다.

네 번째 및 다섯 번째 그룹의 노드 필드는 a765 00a0c91e6bf6이며, 비트 0이 신뢰성을 나타내는 경우 기계 정보를 인코딩합니다. 노드 필드의 첫 번째 옥텟의 최하위 비트가 0이면 실제 IEEE 주소를 나타냅니다. 1로 설정되면 개인 정보 보호를 위해 생성된 의사 난수 값을 나타냅니다. 이 예에서 16진수 a765는 2진수로 10100111 01100101입니다. 최하위 비트는 1이므로 이는 실제 MAC가 아닌 임의의 의사 노드입니다. 그러나 이전 구현에서는 실제 MAC 주소를 직접 저장하는 경우가 있었으며, 그렇게 한 경우 48비트 노드 필드가 네트워크 카드 식별자로 디코딩됩니다. IEEE는 MAC 접두사 레지스트리를 유지 관리합니다. 네트워크 카드가 특정 접두사로 시작된다는 사실을 알면 제조업체와 사용 중인 컴퓨터 모델의 범위가 좁아집니다.

요점: ID가 무엇을 공개하는지 파악하십시오. ToolAcre 생성기는 CSPRNG에서 모든 식별자를 가져오므로 누출될 MAC 주소나 타임스탬프가 없습니다.

RFC 9562 버전 4 이상에서는 인코딩된 정보가 아닌 임의의 데이터만 사용하여 의도적으로 이러한 유출을 방지합니다. 버전 4 UUID은(는) 버전 필드에 4비트, 변형 필드에 2비트를 포함하는 122비트의 암호화된 무작위 데이터입니다. 비트를 읽으면 UUID이 유효하다는 것 외에는 아무 것도 나타나지 않습니다. 디코딩할 타임스탬프도 없고 추출할 머신 데이터도 없습니다. 버전 7에는 혜택 정렬을 위한 타임스탬프가 포함되어 있지만 해당 타임스탬프는 모호한 1582 기반 값이 아닌 친숙하고 표준화된 Unix 시대에서 파생되었으며 사양에는 시간 정보가 식별자에 존재함을 명시적으로 문서화했습니다. 개인 정보 보호 속성은 버전마다 근본적으로 다릅니다.