UFO ET IT

무작위로 생성 된 UUID에서 "-"를 제거하는 것이 얼마나 안전합니까?

ufoet 2020. 11. 22. 20:58
반응형

무작위로 생성 된 UUID에서 "-"를 제거하는 것이 얼마나 안전합니까?


이 코드가 있습니다.

String uuid = UUID.randomUUID().toString().replace("-", "");

생성 된 UUID에서 "-"를 제거하는 것이 얼마나 안전합니까? 이를 제거하면 전역 적으로 고유 한 목적이 무효화되고 생성 된 UUID가 충돌하기 쉽게 만들 수 있습니까?


생성 된 UUID에서 "-"를 제거하는 것이 얼마나 안전한지

대시는 값의 일부가 아니므로 100 % 안전합니다. 문자열 UUID는 128 비트 값의 16 진수 표현입니다. 대시는 표시 목적으로 만 존재하므로 UUID는 눈에 조금 더 쉬울 것입니다.

String형식의 UUID 를 외부 API, 데이터베이스 및 해당 특성과 같은 외부 시스템 에 전달할 때주의하십시오 . 대시가있을 것으로 예상 할 수 있습니다.


내가 백악관에 전화하고 싶다고 가정 해 봅시다. 전화 번호는 (202) 456-1111입니다. 전화 번호에서 대시와 괄호를 모두 삭제하면 2024561111이 남습니다.이 과정에서 정보를 잃지 않았습니다. 읽기 어렵게 서식을 변경했습니다. 이 번호를 내 전화기에 입력해도 전화 시스템은 여전히 ​​처음 세 자리가 지역 번호이고 다음 7 자리가 주 번호라는 것을 알고 있기 때문에 제대로 전화를 겁니다.

같은 방식으로 UUID의 대시는 전화 번호의 추가 구두점과 같습니다. 사람이 기본적으로 큰 숫자를 더 쉽게 읽을 수 있도록 포함되어 있습니다. UUID에서이 번호는 길이가 128 비트이고 16 진수로 작성되므로 전화 번호와 달리 "분명히"번호가 아니지만 기본 원칙은 동일합니다. 대시를 삭제해도 숫자가 변경되지 않으므로 보안에 영향을주지 않습니다.

이제 일어날 수있는 일은 이렇게하면 플랫폼 간의 형식 호환성이 손상된다는 것입니다. 전화 번호 비유로 돌아가 보겠습니다. 내가 사용한 일부 웹 사이트에서는 전화 번호로 2024561111을 입력 할 수 없습니다. 그들은 (202) 456-1111에서와 같이 공백, 대시 및 괄호를 넣어야한다고 주장 할 것입니다. (저는 이와 같은 사이트의 팬은 아니지만 다른 이야기입니다.) 따라서 UUID의 문자열 표현을 다른 프로세스 또는 서비스에 전달해야하는 경우 UUID에서 대시를 제거하는 것이 잠재적으로 문제가 될 수 있습니다. 쉼표를 포함한 전체 형식.


올바르게 구성된 UUID의 대시는 문자열에 무작위로 배치되지 않습니다. 이는 RFC에 자세히 설명 된 특정 형식입니다.- http: //www.ietf.org/rfc/rfc4122.txt

따라서 대시를 제거해도 UUID의 고유성에 영향을주지 않습니다.

그러나 UUID로 유효성을 검사하기 위해 UUID의 일부로 대시가 필요한 라이브러리에 문제가 발생할 수 있습니다.

제거하려는 이유는 무엇입니까?


javadoc 을 읽으면 문자열이 어떻게 생성되는지 확인할 수 있습니다 .

UUID                   = <time_low> "-" <time_mid> "-"
                      <time_high_and_version> "-"
                      <variant_and_sequence> "-"
                      <node>
time_low               = 4*<hexOctet>
time_mid               = 2*<hexOctet>
time_high_and_version  = 2*<hexOctet>
variant_and_sequence   = 2*<hexOctet>
node                   = 6*<hexOctet>

따라서를 제거하는 -것은 괜찮습니다. 원하는 경우 나중에 올바른 위치에 다시 삽입하거나 UUID동일한 정보를 포함 하는 개체를 다시 만들 수 있습니다.

고유성 관련 : UUID는 얼마나 고유합니까?


UUID는 128 비트 숫자입니다.

하이픈이있는 16 진수 형식은 사람이 소비하는 디스플레이 렌더링 일뿐입니다. 가능한 여러 디스플레이 렌더링 중 하나이며 하이픈이 있거나없는 디스플레이 형식은 UUID 자체가 아닙니다.


UUID는 128 비트 숫자입니다. 4 비트의 숫자 M는 UUID 버전을 나타내고 1 ~ 3 개의 최상위 숫자 비트 N는 UUID 변형을 나타냅니다. UUID의 이진 인코딩은 시스템마다 다릅니다. 많은 시스템이 UUID를 완전히 빅 엔디안 형식으로 인코딩합니다.

참고 URL : https://stackoverflow.com/questions/51830845/how-safe-is-it-to-remove-the-in-a-randomly-generated-uuid

반응형