Использование таймера компьютера

Если вам нужен один случайный бит (или даже несколько), воспользуйтесь младшим значащим битом лю­бого регистра таймера. В системе UNIX он может быть не слишком случайным из-за различной возможной синхронизации, но на некоторых персональных компьютерах это работает .

Не стоит извлекать таким образом слишком много битов . Выполнение много раз одной и той же процедуры последовательно может легко сместить биты, генерированные этим способом . Например, если выполнение каж­дой процедуры генерации бита занимает четное число тиков таймера, на выходе вашего генератора будет бе с-конечная последовательность одинаковых битов. Если выполнение каждой процедуры генерации бита занимает нечетное число тиков таймера, на выходе вашего генератора будет бесконечная последовательность череду ю-щихся битов. Даже если зависимость не так очевидна, получающийся битовый поток будет далек от случайного . Один генератор случайных чисел работает следующим образом [918]:

Наш генератор действительно случайных чисел . . . работает, устанавливая будильник и затем быстро инкрементируя р е-гистр счетчика процессора до тех пор, пока не произойдет прерывание . Далее выполняется XOR содержимого регистра и со­держимого байта выходного буфера (данные регистра усекаются до 8 битов). После того, как будет заполнен каждый байт выходного буфера, буфер подвергается дальнейшей обработке циклическим сдвигом каждого символа вправо на два бита . Это приводит к эффекту перемещения наиболее активных (и случайных) младших значащих битов в старшие значащие п о-зиции. Затем весь процесс повторяется три раза. Наконец после прерываний два самых случайных бита регистра счетчика п о-влияют на каждый символ буфера. То есть происходит An прерываний, где и - число нужных случайных битов.

Этот метод очень чувствителен к случайности системных прерываний и квантованности таймера . При тести­ровании на реальных UNIX-машинах результат был очень неплох.