Программная реализация генератора случайных чисел по стандарту А5

Криптографические генераторы случайных чисел производят случайные
числа, которые используются в криптографических приложениях, например -
для генерации ключей. Обычные генераторы случайных чисел, имеющиеся во
многих языках программирования и программных средах, не подходят для
нужд криптографии (они создавались с целью получить статистически
случайное распределение, криптоаналитики могут предсказать поведение таких
случайных генераторов).
В идеале случайные числа должны основываться на настоящем
физическом источнике случайной информации, которую невозможно
предсказать. Примеры таких источников включают шумящие
полупроводниковые приборы, младшие биты оцифрованного звука, интервалы
между прерываниями устройств или нажатиями клавиш. Полученный от
физического источника шум затем "дистиллируется" криптографической хэш-
функцией так, чтобы каждый бит зависел от каждого бита. Достаточно часто
для хранения случайной информации используется довольно большой пул
(несколько тысяч бит) и каждый бит пула делается зависимым от каждого бита
шумовой информации и каждого другого бита пула криптографический
надежным (strong) способом.
Когда нет настоящего физического источника шума, приходится
пользоваться псевдослучайными числами. Такая ситуация нежелательна, но
часто возникает на компьютерах общего назначения. Всегда желательно
получить некий шум окружения - скажем от величины задержек в устройствах,
цифры статистики использования ресурсов, сетевой статистики, прерываний от
клавиатуры или чего-то иного. Задачей является получить данные,
непредсказуемые для внешнего наблюдателя. Для достижения этого случайный
пул должен содержать как минимум 128 бит настоящей энтропии.
Криптографические генераторы псевдослучайных чисел обычно
используют большой пул (seed-значение), содержащий случайную
информацию. Биты генерируется путем выборки из пула с возможным
прогоном через криптографическую хэш-функцию, чтобы спрятать содержимое
пула от внешнего наблюдателя. Когда требуется новая порция бит, пул
перемешивается путем шифровки со случайным ключом (его можно взять из
неиспользованной пока части пула) так, чтобы каждый бит пула зависел от
каждого другого бита. Новый шум окружения должен добавляться к пулу перед
перемешиваниям, дабы сделать предсказание новых значений пула еще более
сложным.....
Дипломная работа (бесплатно)
Толық