Какая лучшая замена для Windows' rand_s в Linux/POSIX?
Проблема не в самой случайности (у нас есть ранд), а в криптографически безопасном PRNG. Что можно использовать в Linux или в идеале POSIX? Есть ли в NSS что-нибудь полезное?
Уточнение: я знаю о /dev/random, но он может исчерпать энтропийный пул. И я не уверен, что / dev / urandom гарантированно является криптографически безопасным.
3 ответа
Использование /dev/random
(требуется ввод пользователя, например, движения мыши) или /dev/urandom
, Последний имеет пул энтропии и не требует никакого пользовательского ввода, если пул не пуст.
Вы можете прочитать из пула, как это:
char buf[100];
FILE *fp;
if (fp = fopen("/dev/urandom", "r")) {
fread(&buf, sizeof(char), 100, fp);
fclose(fp);
}
Или что-то типа того.
Из Википедии (мой курсив):
Аналогом /dev/random является /dev/urandom ("разблокированный" случайный источник), который повторно использует внутренний пул для получения большего количества псевдослучайных битов. Это означает, что вызов не будет блокироваться, но вывод может содержать меньше энтропии, чем соответствующее чтение из /dev/random. Намерение состоит в том, чтобы служить криптографически безопасным генератором псевдослучайных чисел. Это может быть использовано для менее безопасных приложений.
/dev/random
Устройство должно быть источником криптографически защищенных битов.