Domanda

Il problema non riguarda la casualità stessa (abbiamo rand), ma nel PRNG crittograficamente sicuro. Cosa può essere utilizzato su Linux o idealmente POSIX? NSS ha qualcosa di utile?

Chiarimento : conosco / dev / random, ma potrebbe esaurire il pool di entropia. E non sono sicuro che / dev / urandom sia garantito crittograficamente sicuro.

È stato utile?

Soluzione

Usa / dev / random (richiede l'input dell'utente, ad es. movimenti del mouse) o / dev / urandom . Quest'ultimo ha un pool di entropia e non richiede alcun input da parte dell'utente a meno che il pool non sia vuoto.

Puoi leggere dal pool in questo modo:

char buf[100];
FILE *fp;
if (fp = fopen("/dev/urandom", "r")) {
    fread(&buf, sizeof(char), 100, fp);
    fclose(fp);
}

O qualcosa del genere.

Altri suggerimenti

Da Wikipedia (corsivo):

Una controparte di / dev / random è / dev / urandom (sorgente "randomizzata" sbloccata) che riutilizza il pool interno per produrre più bit pseudo-casuali. Ciò significa che la chiamata non si bloccherà, ma l'output potrebbe contenere meno entropia della lettura corrispondente da / dev / random. L ' intento è quello di fungere da generatore di numeri pseudocasuali crittograficamente sicuro . Questo può essere usato per applicazioni meno sicure.

Il dispositivo / dev / random deve essere una fonte di bit crittograficamente sicuri.

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