Вопрос

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

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

Это было полезно?

Решение

Использовать /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 Устройство предназначено для использования в качестве источника криптографически безопасных битов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top