¿Cómo puedo saber si un UUID generado por QUuid::createUuid() se basa en entrophy de cifrado de calidad?

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

  •  21-12-2019
  •  | 
  •  

Pregunta

A partir de las dlls de qt5 de referencia en QUuid:

QUuid QUuid::createUuid() [static]

En cualquier plataforma que no sea Windows, esta función devuelve un nuevo UUID con la variante de QUuid::DCE y la versión QUuid::Aleatorio.Si el /dev/urandom dispositivo existe, entonces los números se utilizan para construir el UUID será de de cifrado de calidad, lo que hará que el UUID único.De lo contrario, el los números de la UUID se obtiene a partir de la local de pseudo-aleatorio generador de números (qrand(), que es cabeza de serie por qsrand()) que es normalmente no cryptograhic calidad, lo que significa que el UUID no puede ser garantizada a ser único.

Cuando en una plataforma con /dev/urandom, ¿cómo puedo saber si /dev/urandom, de hecho, está disponible y se utiliza esta función cuando se ejecuta?

Sospecho que no fue en mi caso, con base en este pequeño código que me encontré en su mayoría por curiosidad:

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

Esto produce la siguiente salida cuando me encontré con él en varias ocasiones:

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

Aviso de la extraña buscando salida en la línea #4, y el otro aparente simetrías en el 3 y 4 columnas (excepto para el 4 en el inicio de la columna 3 que era de esperar).

Gracias!

¿Fue útil?

Solución

ingrese la descripción de la imagen aquí

Su salida en la línea 4 es casi seguramente una posibilidad aleatoria. 6 UUIDS no es una muestra lo suficientemente grande para proporcionar ninguna indicación de la aleatoriedad, si realmente quiso saber con seguridad que deberías probar un número masivo de uuids (más de lo que es de manera realista).

Con respecto a la columna 3 y 4, ya que ha notado que se espera que el líder "4" en la 3ª columna se espera porque indica la versión UUID. El valor inicial en la 4ª columna ( B 55d, 8 285, 9 303, ...), aunque también se espera, este valor < un href="https://en.wikipedia.org/wiki/universally_unique_identifier#version_4_.28random.29" rel="noreferrer"> siempre será 8, 9, a o b . Fuera de estos valores, no veo ninguna simetría en particular en las columnas 3ª y 4ª.

Para verificar si se usó /dev/urandom o qrand(), la clase Quuid no hace que esta información esté disponible, pero si realmente quisiera saber que siempre puede hacer lo que la clase de Quuid hace e intente abrir y leer datos del código de /dev/urandom. Ante eso argumentaría que esto es probablemente demasiado exagerado. Si bien ciertamente no confiaría en qrand() en ninguna situación donde se necesitan números aleatorios de calidad para la seguridad, su implementación ( dado cómo se está siendo sembrado, ~ la línea 959 ) es probablemente lo suficientemente bueno para generar uuids.

Otros consejos

En general, usted puede probarlo en la consola de esta manera

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

Si esto te da 10 caracteres, urandom está trabajando.Si todo está bien con su instalación, Qt también hará uso de ella.

Hasta donde yo sé, esta es también una psedo generador de números aleatorios de trabajo con la entropía generada por el sistema.Mientras /dev/random bloquea cuando se utiliza la entropía es demasiado bajo, urandom sigue a dar los números.

Así que si usted necesita confiar en la seguridad absoluta, comprar una de verdad RNG.Si usted está bien con la "aleatoriedad" de /dev/random, uso de él.Si usted no es de la creación que muchos (millones quizá más) uuids y no se ejecuta al inicio del sistema, urandom está bien, pero para usar con precaución.

Oh, ¿por qué /dev/random y /dev/urandom no es un verdadero RNG ?

Simplemente porque usted puede reproducir sus resultados mediante la reproducción de la situación.Bueno, esto no será posible sin exactamente la observación de un sistema, mientras que su entropía se utiliza para la diversión...pero, en teoría, su posible.Real aleatoriedad puede que desee tener un dispositivo de observación de estados cuánticos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top