¿Cuál es el mejor reemplazo para Windows' rand_s en Linux/POSIX?
-
02-07-2019 - |
Pregunta
El problema no es acerca de la aleatoriedad en sí (que hemos rand), pero en criptográficamente segura PRNG.Lo que puede ser usado en Linux, o idealmente POSIX?¿NSS tiene algo útil?
Aclaración:Yo sé acerca de /dev/random, pero se puede ejecutar fuera de la piscina de entropía.Y no estoy seguro de si /dev/urandom está garantizado para ser criptográficamente seguro.
Solución
Uso /dev/random
(requiere la intervención del usuario, por ejemplo, los movimientos del ratón) o /dev/urandom
.El último tiene una piscina de entropía, y no requiere ninguna entrada de usuario, a menos que la piscina está vacía.
Se puede leer en la piscina como esta:
char buf[100];
FILE *fp;
if (fp = fopen("/dev/urandom", "r")) {
fread(&buf, sizeof(char), 100, fp);
fclose(fp);
}
O algo como eso.
Otros consejos
De Wikipedia (cursiva mía):
Una contraparte de /dev/random /dev/urandom ("desbloqueado" de origen aleatorio), que vuelve a utilizar la piscina interior para producir más de pseudo-aleatorio de bits.Esto significa que la llamada no se bloque, pero el resultado puede contener menos de la entropía de la correspondiente lectura de /dev/random.El la intención es servir como un criptográficamente segura generador de números pseudoaleatorios.Esto puede ser utilizado para menos aplicaciones seguras.
El /dev/random
el dispositivo está destinado a ser una fuente de criptográficamente segura bits.