Qual è il miglior sostituto per i rand_s di Windows in Linux / POSIX?
-
02-07-2019 - |
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.
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.