Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
208 Часть 11. Программирование микроконтроллеров АVR на ассемблере Генератор случайных чисел Настоящая генерация случайных чисел в МК требуется не так уж часто, потому что, например, достаточно зафиксировать значение счетного регистра таймера (при счете с переполнением) в произвольный момент времени, определяемый действия ми пользователя (например, по нажатию им кнопки) . Случайность здесь определя ется тем, что таймер считает намного быстрее, чем человек успевает подготовиться к нажатию, и при всем желании попасть в определенное число невозможно. Но если отказаться от участия человека с его непредсказуемостью и медленностью реакции, то проблема генерации случайных чисел становится достаточно сложной. Ведь компьютер - система полностью детерминированная, в которой любое со стояние однозначно выводится из предыдущих. ЗАМЕТКИ НА ПОЛЯХ Над созданием хорошего компьютерного генератора случайных чисел бились лучшие математические умы, и эта проблема до сих пор однозначно не решена. Насколько она актуальна, можно судить по такому примеру: в конце 2007 года израильские уче ные из университета Хайфы обнаружили дефект в коде генератора случайных чисел (функция cryptGenRandom ) операционной системы Windows , из-за которого злоумыш ленник при желании может не только просчитать , какие шифровальные ключи будут создаваться системой , но и выяснить, какие из них генерировались ею в прошлом. Обратите внимание - дефект этот существовал со времен Windows 2000, т. е . , по крайней мере, восемь лет до того , как его нашли . В свое время крупнейший математик и теоретик программирования Алан Тьюринг, отчаявшись найти чисто математическое решение проблемы, предложил использо вать для генерации случайных чисел природные процессы, которые имеют истинно случайный характер. Один из таких процессов - тепловой шум, который приводит к небольшим флуктуациям тока в любом проводнике. На практике для этой цели используют резистор или специальный диод, спонтанные колебания тока в котором усиливаются и оцифровываются. Но такой достаточно сложный генератор приме няется лишь в специальной аппаратуре - городить его в составе микроЭВМ, ко нечно, нецелесообразно. Поэтому в компьютерах распространен следующий прием. Есть математические методы, которые позволяют получить т. н. псевдослучайную последовательность чисел. Если начинать счет по такому алгоритму каждый раз с одного и того же чис ла, то полученная последовательность чисел будет детерминированной - одной и той же во всех случаях, но сами числа окажутся случайными, т. е. равномерно рас пределенными по вероятности в заданном диапазоне значений. Этой определен ностью также широко пользуются - например, сигналы со спутника системы навигации GPS имеют именно такой псевдослучайный характер и для «посторон него» выглядят, как случайный шум. При этом каждый приемник «Знает», с какого момента следует начинать отсчет, в результате чего псевдослучайнме последова тельности у приемника и источника совпадут, и сигнал легко расшифровывается. Оказалось, что такая операция служит весьма эффективным средством защиты от помех, позволяющим выделить полезный сигнал на фоне всех остальных источни-
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==