如何判断QUuid :: createUuid()生成的UUID是否基于加密质量的熵?

Len*_*and 2 uuid cryptography qt5

来自QUuid的Qt5参考:

QUuid QUuid :: createUuid()[静态]

在Windows以外的任何平台上,此函数返回带有变体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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我重复运行它时,会产生以下输出:

 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}"
Run Code Online (Sandbox Code Playgroud)

注意第4行的相当奇怪的输出,以及第3和第4列中的其他明显的对称性(除了第3列开始的4是预期的).

谢谢!

Syo*_*yon 7

在此输入图像描述

第4行的输出几乎肯定是随机的.6 UUID不足以提供随机性的任何指示,如果你真的想知道你需要测试大量的UUID(超过现实可行性).

关于第3列和第4列,正如您所注意到的那样,第3列中的前导"4"是预期的,因为它表示UUID版本.在第4列中的领导值(b 55D,8 285 9 303,...),虽然也预计,该值将永远是8,9,A,或b.在这些值之外,我在第3和第4列中没有看到任何特定的对称性.

因为,如果检查/dev/urandomqrand()使用时,QUuid类不提供这方面的信息,但如果你真的想知道你总是可以做QUuid类做什么,并尝试从打开和读取数据/dev/urandom.我认为这可能是过度杀戮.虽然qrand()在安全性需要高质量随机数的任何情况下我当然不会依赖它,但它的实现(给定它是如何播种的,〜第959行)可能足以生成UUID.

  • 你是说我第一次运行这个程序,0000beee-690c-4875-9589-9e222222cedc只是随机出现?伙计,我今天应该买一些彩票...... (3认同)