2012-01-26 3 views
3

Для удовольствия я экспериментировал с методами шифрования. Один из методов, которые я использую, требует начального значения. Я хотел бы накормить его истинными случайными числами. Я знаю, что стандартный метод получения семени, например, C++ - это время вызова (NULL), однако, поскольку это только псевдослучайное, мне было интересно, есть ли какие-либо надежные способы сбора действительно случайных чисел. Единственное ограничение состоит в том, что его можно реализовать на языках C, C++ и Java.Методы создания более высоких уровней энтропии в семенах

Заранее спасибо.

Уточнение: пока я запускаю Ubuntu, этот код должен запускаться в системе Windows.

+0

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

ответ

3

Их много, но у вас есть ваша терминология в замешательстве, потому что any источник бит энтропии будет генератором случайных чисел. Вы действительно думаете о «псевдослучайных числах».

Теперь, при этом, существует ряд различных схем для энтропийных источников. Многие UNIX-подобные системы имеют/dev/random, которые создают случайные числа, делая различные магии для физических процессов, таких как размеры кеша и содержимое памяти. Существуют более сильные источники, которые используют, например, промежутки между событиями с радиоактивным распадом.

Fourmilab.ch предоставляет реальные случайные числа here.

ПЗС-матрицы хранятся в темноте work well.

Lava lamps хорошие.

+0

Благодарим вас за разъяснение, плохо отредактируйте это. – jozefg

+0

Лавовые лампы A nice :-) –

+0

Я думаю, что править неправильно, однако - вы хотите засеять его реальными случайными числами, и вам нужна схема, которая не зависит от какого-либо другого генератора псевдослучайных чисел. Вероятно,/dev/random является только псевдослучайным, и на самом деле время (NULL) не является очень случайным вообще, так как оно автокоррелирует плохо - два раза в секундах, взятых на расстоянии 100 секунд, будет отличаться только самыми низкими двумя цифрами. –

1

В зависимости от вашей системы у вас может быть доступ к источнику действительно случайных данных. Например, /dev/random в Linux предоставит вам криптографически сильный источник случайных бит. Это обычно медленно, поэтому использование его для зарождения PRNG - хороший способ использовать его, когда вам действительно не нужна истинная случайность.

1

Некоторая магия с high-resolution performance counters, вероятно, даст хорошее семя. Особенно, если вы считаете, многоядерная система, разные загрузки ЦП и т. Д.

+0

Вы знаете, как реализовать это, например, в java? – jozefg

+0

Они дают вам примеры того, как использовать 'RTDSC' на нескольких языках. И тогда вы делаете соответствующие манипуляции со значением (побитовый сдвиг и т. Д.). – lapk

0

Как Charlie Martin упоминает, что хороший источник действительно случайных чисел - это камеры (видео или все еще). Если вы используете наименее значимый бит пикселей с цифровой камеры и объединяете их в строку требуемой длины, у вас будет отличный генератор случайных чисел.

+0

Это достаточно хорошо, но есть тенденция к тому, чтобы быть какой-то обвязкой, которая становится автокорреляцией.Ссылка на сайт LavaRnd Landon (вторая ссылка в моем ответе) объясняет, что он делает, чтобы уменьшить эффект. –