Come posso sapere se un UUID generato da QUIid::createUuid() è basato sull'entropia della qualità crittografica?

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

  •  21-12-2019
  •  | 
  •  

Domanda

Dal riferimento Qt5 su QUID:

QUID QUID::createUuid() [statico]

Su qualsiasi piattaforma diversa da Windows, questa funzione restituisce un nuovo UUID con Variant Quid :: DCE e versione QUUID :: Random.Se esiste il dispositivo /dev /urandom, i numeri utilizzati per costruire l'UUID saranno di qualità crittografica, il che renderà unico l'UUID.Altrimenti, i numeri dell'UUID saranno ottenuti dal generatore di numeri pseudo-casualmente locale (Qrand (), che è seminato da Qsrand ()) che di solito non è di qualità criptograa, il che significa che l'UUID non può essere garantito essere unico.

Su una piattaforma con /dev/urandom, come posso sapere se /dev/urandom è effettivamente disponibile e verrà utilizzato da questa funzione quando verrà eseguita?

Sospetto che non fosse nel mio caso, in base a questo piccolo codice che ho eseguito principalmente per curiosità:

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

Ciò ha prodotto il seguente output quando l'ho eseguito ripetutamente:

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

Notare l'output dall'aspetto piuttosto bizzarro sulla riga n. 4 e le altre apparenti simmetrie nella terza e quarta colonna (ad eccezione del 4 all'inizio della colonna 3 che era prevedibile).

Grazie!

È stato utile?

Soluzione

enter image description here

Il tuo output sulla riga 4 è quasi certamente solo casuale.6 UUID non sono un campione abbastanza ampio da fornire alcuna indicazione di casualità, se volessi davvero saperlo con certezza dovresti testare un numero enorme di UUID (più di quanto sia realisticamente fattibile).

Per quanto riguarda le colonne 3 e 4, come hai notato è previsto il "4" iniziale nella terza colonna perché indica la versione dell'UUID.Il valore iniziale nella quarta colonna (B 55d, 8 285, 9 303, ...) però è previsto anche questo valore sarà sempre 8, 9, a o b.Al di fuori di questi valori non vedo particolari simmetrie nella 3a e 4a colonna.

Per verificare se /dev/urandom O qrand() è stato utilizzato, la classe QUID non rende disponibili queste informazioni, ma se vuoi davvero saperlo puoi sempre fare quello che fa la classe QUID e provare ad aprire e leggere i dati da /dev/urandom.Direi che questo è probabilmente eccessivo.Anche se di certo non farei affidamento qrand() in ogni situazione in cui sono necessari numeri casuali di qualità per la sicurezza, è l'implementazione (dato il modo in cui viene seminato, ~riga 959) è probabilmente sufficiente per generare UUID.

Altri suggerimenti

In generale puoi provarlo su console in questo modo

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

Se questo ti dà 10 caratteri, urandom funziona. Se tutto è ok con il tuo setup, Qt lo userà anche.

Per quanto ne so, questo è anche solo un generatore di numeri casuali PSEDO che lavora con l'entropia generata dal sistema. Mentre i blocchi /dev/random quando l'entropia usata è troppo bassa, urandom continua a darti numeri.

Quindi se è necessario fare affidamento sulla sicurezza assoluta, acquista un vero RNG. Se stai bene con la "casualità" del /dev/random, usalo. Se non stai creando tanti (milioni forse di più) uuids e non funzionano all'avvio del sistema, urandom va bene, ma da utilizzare con cautela.

Oh, perché /dev/random e /dev/urandom non è un vero RNG?

Semplicemente perché potresti riprodurre la sua uscita riproducendo la situazione. Bene, questo non sarà possibile senza esattamente osservando un sistema mentre la sua entropia è utilizzata per un tale divertimento ... ma in teoria è possibile. Per la casualità reale potresti voler avere un dispositivo osservando stati quantici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top