2008-09-23 16 views
3

Le problème n'est pas le caractère aléatoire lui-même (nous avons rand), mais dans PRNG cryptographiquement sécurisé. Qu'est-ce qui peut être utilisé sur Linux, ou idéalement POSIX? Est-ce que NSS a quelque chose d'utile?Quel est le meilleur remplacement pour Windows 'rand_s sous Linux/POSIX?

Clarification: Je connais/dev/random, mais il peut manquer d'entropie. Et je ne suis pas sûr si/dev/urandom est garanti pour être cryptographiquement sécurisé.

Répondre

5

Utiliser /dev/random (nécessite une saisie de l'utilisateur, par ex. Mouvements de la souris) ou /dev/urandom. Ce dernier a un pool d'entropie et ne nécessite aucune entrée de l'utilisateur sauf si le pool est vide.

Vous pouvez lire de la piscine comme ceci:

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

Ou quelque chose comme ça.

3

Le dispositif /dev/random est conçu pour être une source de bits cryptographiquement sécurisés.

5

De Wikipedia mes (italique):

contrepartie/dev/random est/dev/urandom ("déverrouillé" source aléatoire) qui réutilise le pool interne pour produire plus de bits pseudo-aléatoires. Cela signifie que l'appel ne bloquera pas, mais que la sortie peut contenir moins d'entropie que la lecture correspondante de/dev/random. L'intention doit servir de générateur de nombres pseudo-aléatoires cryptographiquement sécurisé. Cela peut être utilisé pour des applications moins sécurisées.