Какова лучшая замена Windows rand_s в Linux / POSIX? - PullRequest
3 голосов
/ 23 сентября 2008

Проблема не в самой случайности (у нас есть ранд), а в криптографически безопасном PRNG. Что можно использовать в Linux или в идеале POSIX? Есть ли в NSS что-нибудь полезное?

Уточнение : Я знаю о / dev / random, но он может исчерпать пул энтропии. И я не уверен, гарантированно ли криптографически безопасен / dev / urandom.

Ответы [ 3 ]

5 голосов
/ 23 сентября 2008

Используйте /dev/random (требуется ввод данных пользователем, например, движения мыши) или /dev/urandom. Последний имеет пул энтропии и не требует ввода данных пользователем, если пул не пуст.

Вы можете читать из пула так:

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

Или что-то в этом роде.

5 голосов
/ 23 сентября 2008

Из Википедия (мой курсив):

Аналогом / dev / random является / dev / urandom («разблокированный» случайный источник), который повторно использует внутренний пул для получения большего количества псевдослучайных битов. Это означает, что вызов не будет блокироваться, но выходные данные могут содержать меньше энтропии, чем соответствующее чтение из / dev / random. намерение должно служить криптографически безопасным генератором псевдослучайных чисел . Это может быть использовано для менее безопасных приложений.

3 голосов
/ 23 сентября 2008

Устройство /dev/random предназначено для использования в качестве источника криптографически защищенных битов.

...