Qual é o melhor substituto para rand_s do Windows' em Linux / POSIX?
-
02-07-2019 - |
Pergunta
O problema não é sobre a própria aleatoriedade (temos rand), mas em criptograficamente segura PRNG. O que pode ser usado em Linux, ou, idealmente, POSIX? Does NSS têm algo útil?
Clarificação : eu sei sobre / dev / random, mas pode funcionar fora do pool de entropia. E eu não estou certo se / dev / urandom é garantido para ser criptograficamente segura.
Solução
Uso /dev/random
(requer intervenção do utilizador, por exemplo, os movimentos do rato) ou /dev/urandom
. O último tem uma piscina entropia e não requer nenhuma entrada do usuário a menos que a piscina está vazia.
Você pode ler a partir do pool assim:
char buf[100];
FILE *fp;
if (fp = fopen("/dev/urandom", "r")) {
fread(&buf, sizeof(char), 100, fp);
fclose(fp);
}
Ou algo parecido.
Outras dicas
A partir Wikipedia (grifo meu):
A contrapartida para / dev / random é / dev / urandom ( "desbloqueado" fonte aleatório), que reutiliza o piscina interna para produzir mais bits pseudo-aleatórios. Isto significa que a chamada não irá bloquear, mas a saída pode conter menos do que a entropia de leitura correspondente de / dev / aleatória. O intenção é servir como um gerador de números pseudo-aleatórios criptograficamente segura . Isso pode ser usado para aplicações menos seguras.
O dispositivo /dev/random
se destina a ser uma fonte de bits criptograficamente seguras.