Comment puis-je savoir si un UUID généré par QUuid::createUuid() est basé sur entrophy de chiffrement de qualité?

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

  •  21-12-2019
  •  | 
  •  

Question

À partir de la Qt5 de référence sur QUuid:

QUuid QUuid::createUuid() [statique]

Sur toutes les plateformes autres que Windows, cette fonction renvoie un nouvel UUID avec la variante QUuid::DCE et la version QUuid::Random.Si le /dev/urandom dispositif existe, alors les numéros utilisés pour construire les UUID sera de chiffrement de qualité, qui fera de l'UUID unique.Sinon, l' les numéros de l'UUID seront obtenus à partir des locaux de la pseudo-aléatoire générateur de nombre (qrand(), qui est placé par les qsrand()) qui est généralement pas de cryptograhic qualité, ce qui signifie que l'UUID ne peut pas être garantie unique.

Lorsque sur une plate-forme avec /dev/urandom, comment puis-je savoir si /dev/urandom, en fait, est disponible et sera utilisé par cette fonction lorsqu'il s'exécute?

Je soupçonne que c'était pas dans mon cas, en se fondant sur ce petit code que j'ai utilisé principalement pour la curiosité du souci:

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

Ce produit la sortie suivante quand je l'ai couru à plusieurs reprises:

 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}"

Avis plutôt bizarre à la recherche de sortie sur la ligne n ° 4, et de l'apparente aux symétries dans les 3e et 4e colonnes (sauf pour les 4 dans le début de la colonne 3 qui était attendu).

Merci!

Était-ce utile?

La solution

enter image description here

Votre sortie sur la ligne 4 est presque certainement tout hasard.6 Uuid n'est pas un échantillon suffisamment grand pour fournir une indication de l'aléatoire, si vous avez vraiment envie de savoir pour sûr que vous devez tester un grand nombre de Uuid (plus que ce qui est réalisable).

Concernant la colonne 3 et 4, comme vous l'avez remarqué le premier "4" dans la 3ème colonne est prévu, car il indique l'UUID de la version.La valeur principale dans la 4ème colonne (b 55d, 8 285, 9 303, ...) mais est également attendue, cette valeur sera toujours 8, 9, a, ou b.En dehors de ces valeurs, je ne vois pas tout particulier symétries dans les 3e et 4e colonnes.

Pour vérifier si /dev/urandom ou qrand() a été utilisé, le QUuid classe ne comprend pas rendre ces informations disponibles, mais si tu voulais vraiment savoir, vous pouvez toujours faire ce que l'QUuid classe ne comprend et essayer d'ouvrir et de lire des données à partir de /dev/urandom.Je dirais que c'est probablement excessif cependant.Alors que je n'aurais certainement pas compter sur qrand() dans toute situation où la qualité de nombres aléatoires sont nécessaires pour la sécurité, c'est la mise en œuvre (compte tenu de la façon dont il est semé, ~la ligne de 959) est probablement suffisant pour générer des Uuid.

Autres conseils

En général, vous pouvez l'essayer sur la console de cette façon

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

Si cela vous donne 10 caractères, urandom est de travail.Si tout est OK avec votre installation de Qt sera également l'utiliser.

Pour autant que je sais, c'est également à seulement un psedo générateur de nombre aléatoire de travail avec l'entropie générée par le système.Alors que /dev/random les blocs lorsque utilisé entropie est trop faible, urandom continue à vous donner des chiffres.

Donc, si vous avez besoin de compter sur une sécurité absolue, acheter un vrai RNG.Si vous êtes OK avec le "hasard" de /dev/random, l'utiliser.Si vous n'êtes pas de la création que de nombreux (en millions peut-être plus) uuids et ne s'exécute pas au démarrage du système, urandom c'est bien, mais à utiliser avec précaution.

Oh, pourquoi /dev/random et /dev/urandom n'est pas un vrai RNG ?

Tout simplement parce que vous pourriez reproduire sa sortie par la reproduction de la situation.Eh bien, ce ne sera pas possible sans exactement les observer alors que son entropie est utilisé pour un tel plaisir...mais en théorie possible.Pour de vrai hasard, vous voudrez peut-être avoir un dispositif d'observation d'états quantiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top