В настоящее время я занимаюсь некоторыми проблемами компьютерной безопасности в школе, и меня интересует общее программирование общественных предпочтений, обычаев, идей и т. Д. Если вам нужно использовать генератор или экстрактор случайных чисел, какой из них вы выберете? Почему вы его выбрали? Математические свойства, уже реализованные в виде пакета или по какой причине? Вы пишете свой собственный или используете какой-то пакет?
Почему вы используете генератор / экстрактор случайных чисел?
Ответы (5)
Если вычислительное время не является объектом, то вы не ошибетесь с Blum Blum Shub (http://en.wikipedia.org/wiki/Blum_blum_shub). Неформально говоря, это по крайней мере так же безопасно (трудно предсказать), как целочисленная факторизация.
dev/random
или аналогичный на вашей платформе.
Он возвращает биты из пула энтропии, подаваемого драйверами устройств. Не нужно беспокоиться о математических свойствах.
Если вам нужен криптографически безопасный ГПСЧ, то обычно лучше всего использовать повторное применение безопасного хэша к большому начальному массиву. Однако не изобретайте свой собственный алгоритм, выберите версию Fortuna или что-то еще достаточно хорошо рассмотренное.
Ключи для шифрования телефонных разговоров между президентами США и СССР были созданы из космических лучей. Мы проверили это в физической лаборатории нашего университета - их энергии дают истинное гауссово распределение. ;-) Так что для наилучшего шифрования вы должны использовать их, потому что такая случайная последовательность не может быть воспроизведена. Если, конечно, ваш противник не построит тайно ускоритель частиц рядом с вашим генератором случайных чисел.
Ах ... насчет компьютеров ... Хорошо, приобретите поток, который исходит от чего-то физического, а не вычисляемого. / dev / random - самое простое решение, но ваш ручной счетчик Гейгера, подключенный к USB, даст лучшую случайность.
Для небольшого школьного проекта я бы использовал все, что есть в ОС для генерации случайных чисел.
Для серьезного приложения безопасности (например: COMSEC -уровневое шифрование) я использую аппаратное случайное число генератор. Чистые алгоритмы без доступа к оборудованию по определению не производят случайных чисел.