QUuid::createUuid()에 의해 생성된 UUID가 암호화 품질 엔트로피를 기반으로 하는지 어떻게 알 수 있나요?

StackOverflow https://stackoverflow.com//questions/25038169

  •  21-12-2019
  •  | 
  •  

문제

QUID의 Qt5 참조에서:

QUId QUId::createUuid() [정적]

Windows 이외의 모든 플랫폼 에서이 함수는 Variant Quuid :: DCE 및 버전 Quuid :: Random을 가진 새로운 UUID를 반환합니다./dev/urandom 장치가 존재하면 UUID를 구성하는 데 사용되는 숫자는 다음과 같습니다. 암호화 품질, UUID를 고유하게 만듭니다.그렇지 않으면 UUID의 숫자는 로컬 의사 난수에서 가져옵니다. 숫자 생성기 (qrand(), qsrand()에 의해 시드됨) 일반적으로 암호화 품질이 아니므로 UUID가 고유하다고 보장할 수 없습니다.

/dev/urandom이 있는 플랫폼에서 /dev/urandom이 실제로 사용 가능하고 이 기능이 실행될 때 사용될 것인지 어떻게 알 수 있습니까?

호기심을 위해 주로 실행한 이 작은 코드를 기반으로 보면 내 경우는 그렇지 않은 것 같습니다.

while(true){
        QUuid u=QUuid::createUuid();
        QString str=u.toString();
        if(str.contains("2222")){
            qDebug()<<"UUID:"<<str;
            return;
        }
    }

반복해서 실행했을 때 다음과 같은 결과가 나왔습니다.

 1 UUID: "{8b42222b-bac3-4c93-b55d-0255a33115a2}"
 2 UUID: "{5122227e-473e-4885-8285-8780cc51f71a}"
 3 UUID: "{bfeed28f-f8da-4a69-9303-77388752222e}"
 4 UUID: "{0000beee-690c-4875-9589-9e222222cedc}"
 5 UUID: "{e5a2646d-1c81-4974-94ad-8b222265b67a}"
 6 UUID: "{bb77d756-6726-4e9f-94d8-3d4892222a2f}"

라인 #4의 다소 이상해 보이는 출력과 세 번째 및 네 번째 열의 다른 명백한 대칭에 주목하십시오(예상했던 세 번째 열의 시작 부분에 있는 4를 제외하고).

감사해요!

도움이 되었습니까?

해결책

여기에 이미지 설명

라인 4의 출력은 거의 확실히 무작위로 확실합니다. 6 Uuids는 무작위 성의 표시를 제공하는 충분한 샘플이 아닙니다. 정말로 거의 수의 UUID를 테스트해야 할 필요가 있는지 확인하려면 (현실적으로 실현 가능성 이상)

컬럼 3과 4에 관해서는 UUID 버전을 나타내는 것이기 때문에 3 번째 열의 선행 "4"가 예상됨에 따라 예상됩니다. 4 번째 컬럼 ( b 55d, 8 / strong> 285, 9 303, ...)의 선행 값도 기대되지만이 값은 또한 < href="https://ko.wikipedia.org/wiki/universally_unique_identifier#vversion_4_.28random.29"rel="noreferrer">는 항상 8, 9, a 또는 b가 될 것입니다. 이 값을 바깥쪽으로, 나는 3 번째와 4 번째 열에 특정 대칭이 보이지 않는다.

/dev/urandom 또는 qrand()가 사용되었는지 확인하려면 Quuid 클래스 가이 정보를 사용할 수 없지만 Quuid 클래스가 수행하고 Queuid 클래스에서 데이터를 열고 읽고 읽으려고 알고 싶으면 실제로 알고 싶다면 /dev/urandom에서 데이터를 열고 읽으려고 알고 싶다는 것을 알고 싶으면. 나는 이것이 아마도 오버 킬 일이 있다고 주장 할 것이다. 확실히 보안을 위해 품질 난수가 필요한 상황에서 qrand()에 의존하지 않을 것입니다. 구현입니다 ( 씨앗이있는 방법을 감안할 때, ~ 959 줄 라인은 아마도 UUID를 생성 할만 큼 충분히 좋을 것입니다.

다른 팁

일반적으로 이런 식으로 콘솔에서 시도해 볼 수 있습니다.

random="$(dd if=/dev/urandom bs=10 count=1)";
echo $random

이렇게 하면 10개의 문자가 제공됩니다. urandom 일하고 있습니다.설정에 문제가 없으면 Qt도 이를 사용합니다.

내가 아는 한, 이것은 또한 시스템에서 생성된 엔트로피를 사용하여 작동하는 의사 난수 생성기일 뿐입니다.하는 동안 /dev/random 엔트로피를 사용할 때 블록이 너무 낮습니다. urandom 계속해서 번호를 알려준다.

따라서 절대적인 보안에 의존해야 한다면 실제 제품을 구입하세요. RNG."임의성"이 괜찮다면 /dev/random, 그걸 써.그렇게 많이 생성하지 않는 경우(아마도 수백만 개 이상) uuids 시스템 시작 시 실행되지 않고, urandom 괜찮지만 주의해서 사용하세요.

왜 오 /dev/random 그리고 /dev/urandom 진짜가 아니다 RNG ?

상황을 재현함으로써 출력을 재현할 수 있기 때문입니다.글쎄요, 엔트로피가 그런 재미를 위해 사용되는 동안 시스템을 정확하게 관찰하지 않고는 불가능할 것입니다...하지만 이론적으로는 가능합니다.실제 무작위성을 위해 양자 상태를 관찰하는 장치를 갖고 싶을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top