/dev/random
В комментариях мне вопрос задали — откуда в компьютере взяться случайным числам. Казалось бы — там же всё детерминированно. С одной стороны — да, с другой стороны…
Помню, в «Спектруме» (это компьютер, на котором я работал больше всего в детстве), в Бейсике, был оператор RANDOMIZE — инициализация генератора случайных чисел. Если вызвать его
bolk@Bolk /$ php -r 'mt_srand(1); echo mt_rand();'
1244335972
bolk@Bolk /$ php -r 'mt_srand(1); echo mt_rand();'
1244335972Если же вызывать RANDOMIZE без параметров, то его значение инициализируется текущим временем. Это уже лучше, потому что в данном случае элемент случайности вносит сам пользователь — как просчитать когда он запустит программу? Какое будет время на часах? На «Спектруме» отследить запуск программы не получится, а без этого нельзя ответить на вопрос какое значение выдаст генератор случайных чисел.
Но на компьютерах посложнее, например, на том, с которого вы сейчас это читаете, отследить запуск проще простого, посмотреть в этот момент на часы — ещё проще. Что делать? Значит надо собирать больше «шумов» окружающего мира.
Какие «шумы» может собирать компьютер вокруг себя?
Как уже было сказано, сильную сумятицу в стройность машинной логики вносит пользователь, грех не пользоваться: нажатия клавиш, движения мышкой, запуск программ, управление ими. Ещё можно, например, снимать значения с загрузки процессора, со списка процессов, занимаемой процессами память и расходуемого время (при условии, что на машине работает сейчас пользователь), вполне источник случайных данных. Ведь эти значения зависят от действий пользователя.
Что делать, когда пользователь пошёл налить себе кофе? Вполне можно использовать шумы внешнего мира. Шумы в прямом смысле, с микрофона послушать что там снаружи происходит — окружающие звуки или просто шумы аудиотракта в отсутствие микрофона. Можно глянуть, что там бегает по сети — широковещательную активность других пользователей. Что ещё? Мало ли у компьютера датчиков? Например, можно смотреть что у нас там на с температурой на процессоре, которая зависит и от температуры в комнате, и от собственных шумов схемотехники датчиков.
Вот как выглядят показания температурных датчиков на моём ноуте, снимаемые каждую секунду:

Если присмотреться внимательно, можно увидеть колебания в градус, не очень много, но температурных датчиков у меня 13 штук.
Если время от времени снимать этот цифровой хаос, скапливать
Под занавес, наверное нужно прояснить — для чего нужны такие «суперслучайные» числа. Ну, казалось бы, инициализируем временем и все дела, для чего использовать
Ведь сертификаты для защиты генерируются вполне определённым образом на основании случайных чисел. Стоит ввести в тот же алгоритм те же числа и получим тот же сертификат.
Интернетизация Татарстана
Слушаю прямой эфир c Коллегии Мининформсвязи РТ по итогам 2012г. и задачам на 2013г. Интересную цифру услышал: 2,6 миллиона человек в нашей республике имеют доступ к интернету. При этом население у нас 3,8 миллиона. Это неплохой показатель, мне кажется.