как делает случайный (), на самом деле работают?

Вот быстрая сводка того, что она делает:

сторожевая программа пишет в /dev/watchdog каждые десять секунд. Если устройство будет открыто, но не записано в в течение минуты, то машина перезагрузит. Эта функция доступна, когда ядро создается с ‘software watchdog’ поддержка (стандарт в ядрах Debian).

, В то время как это может казаться полезным, это не действительно настолько крайне важно для надежности Вашей системы, кроме того, это имеет тенденцию вызывать ненужные пробуждения, которые в свою очередь могут привести к более короткой производительности батареи/, можно легко отключить его путем добавления nmi_watchdog=0 к параметрам начальной загрузки ядра в /etc/default/grub.

13
задан Scott Harwell 13 January 2012 в 16:38
поделиться

6 ответов

Вся первая глава основополагающей книги Дональда Кнута Работа Получисленные алгоритмы посвящена теме генерации случайных чисел. Я действительно не думаю, что SO-ответ приблизится к описанию затронутых проблем. Прочтите книгу.

12
ответ дан 1 December 2019 в 22:07
поделиться

Оказывается, на удивление легко получить неполноценные псевдослучайные числа. В течение десятилетий золотым стандартом был удивительно простой алгоритм: сохранить состояние x , умножить на константу A (32x32 => 64 бита), затем добавить константу B , затем вернуть младшие 32 бита, которые также станут новыми x . Если тщательно выбрать A и B , это действительно работает довольно хорошо.

Псевдослучайные числа также должны быть повторяемыми, чтобы воспроизводить поведение во время отладки. Таким образом, заполнение генератора (инициализация x , скажем, временем дня) обычно избегается во время отладки.

В последние годы, и с большим количеством вычислительных циклов, доступных для записи, более сложные алгоритмы доступны, некоторые из них были изобретены после публикации весьма авторитетных получисленных алгоритмов . Операционные системы также начинают предоставлять аппаратные и сетевые биты энтропии для специализированных криптографических целей.

4
ответ дан 1 December 2019 в 22:07
поделиться

Страница Википедии - хороший справочник.

Фактический используемый алгоритм будет зависеть от языка и реализации языка.

4
ответ дан 1 December 2019 в 22:07
поделиться

Чтобы точно ответить на ваш ответ, случайная функция предоставляется операционной системой ( обычно).

Но то, как операционная система создает эти случайные числа, является специализированной областью компьютерных наук. См., Например, страницу вики, опубликованную в ответах выше.

0
ответ дан 1 December 2019 в 22:07
поделиться

random () - это так называемый генератор псевдослучайных чисел (PRNG). random () в основном реализован как линейный конгруэнтный генератор. Это функция вида X (n + 1) (aXn + c) по модулю m. Xn - это последовательность сгенерированных псевдослучайных чисел. Генаратированную последовательность чисел легко угадать. Этот алгоритм нельзя использовать в качестве криптографически безопасного ГПСЧ.

Википедия: Линейный конгруэнтный генератор

И взгляните на несгибаемые тесты для ГПСЧ Генаратированную последовательность чисел легко угадать. Этот алгоритм нельзя использовать в качестве криптографически безопасного ГПСЧ.

Википедия: Линейный конгруэнтный генератор

И взгляните на несгибаемые тесты для ГПСЧ Генаратированную последовательность чисел легко угадать. Этот алгоритм нельзя использовать в качестве криптографически безопасного ГПСЧ.

Википедия: Линейный конгруэнтный генератор

И взгляните на несгибаемые тесты для ГПСЧ PRNG Diehard Tests

3
ответ дан 1 December 2019 в 22:07
поделиться

Одна вещь, которую вы, возможно, захотите изучить, - это семейство случайных устройств, доступных в некоторых Unix-подобных ОС, таких как Linux и Mac OSX. Например, в Linux ядро ​​собирает энтропию из различных источников в пул, который затем использует для заполнения своего генератора псевдослучайных чисел. Энтропия может поступать из множества источников, наиболее заметным из которых является дрожание драйвера устройства из-за нажатия клавиш, сетевых событий, активности жесткого диска и (чаще всего) движений мыши. Помимо этого, существуют и другие методы сбора энтропии, некоторые из них даже полностью реализованы аппаратно. Есть два символьных устройства, с которых вы можете получать случайные байты из Linux и в Linux, они ведут себя следующим образом:

  • / dev / urandom дает вам постоянный поток байтов, который является очень случайным, но не криптографически безопасным, потому что он повторно использует любую энтропию, доступную в пуле.
  • / dev / random дает вам криптографически безопасные случайные числа, но он выиграл » t дает вам постоянный поток, поскольку он использует энтропию, доступную в пуле, а затем блокируется, пока собирается больше энтропии.

Обратите внимание, что хотя Mac OSX использует другой метод для своего PRNG и, следовательно, не блокирует, мои личные тесты (выполнено в колледже) показали, что оно чуть менее случайное, чем ядро ​​Linux. Хотя, конечно, достаточно хорошо.

Итак, в моих проектах, когда мне нужна случайность, я обычно использую чтение с одного из случайных устройств, по крайней мере, для начального числа для алгоритма в моей программе.

  • / dev / random дает вам криптографически безопасные случайные числа, но не дает постоянного потока, так как использует энтропию, доступную в пуле, а затем блокирует, пока собирается больше энтропии.
  • Обратите внимание, что в то время как Mac OSX использует это другой метод для ГПСЧ и, следовательно, не блокирует, мои личные тесты (сделанные в колледже) показали, что он почти менее случайный, чем ядро ​​Linux. Хотя, конечно, достаточно хорошо.

    Итак, в моих проектах, когда мне нужна случайность, я обычно использую чтение с одного из случайных устройств, по крайней мере, для начального числа для алгоритма в моей программе.

  • / dev / random дает вам криптографически безопасные случайные числа, но не дает постоянного потока, так как использует энтропию, доступную в пуле, а затем блокирует, пока собирается больше энтропии.
  • Обратите внимание, что в то время как Mac OSX использует это другой метод для ГПСЧ и, следовательно, не блокирует, мои личные тесты (сделанные в колледже) показали, что он почти менее случайный, чем ядро ​​Linux. Хотя, конечно, достаточно хорошо.

    Итак, в моих проектах, когда мне нужна случайность, я обычно использую чтение с одного из случайных устройств, по крайней мере, для начального числа для алгоритма в моей программе.

    s PRNG и, следовательно, не блокируется, мои личные тесты (проведенные в колледже) показали, что он чуть менее случайный, чем ядро ​​Linux. Хотя, конечно, достаточно хорошо.

    Итак, в моих проектах, когда мне нужна случайность, я обычно использую чтение с одного из случайных устройств, по крайней мере, для начального числа для алгоритма в моей программе.

    s PRNG и, следовательно, не блокируется, мои личные тесты (проведенные в колледже) показали, что он чуть менее случайный, чем ядро ​​Linux. Хотя, конечно, достаточно хорошо.

    Итак, в моих проектах, когда мне нужна случайность, я обычно использую чтение с одного из случайных устройств, по крайней мере, для начального числа для алгоритма в моей программе.

    0
    ответ дан 1 December 2019 в 22:07
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: