2013-12-18 5 views
1

Я работаю над криптографическим проектом на C++ для школы, и мне понадобится способ генерации случайных чисел, которые не могут быть восстановлены кем-то другим (кто «догадывался» о семени) ,
Чтобы быть точным, мне нужен либо чистый случайный генератор, либо способ получить 100% «безопасное» семя. Я уже сделал некоторые исследования и размышления, и я нашел два способа: может сделать это, первый способ сделать это будет инициализировать семя с текущим временем, но это оставляет мне беспокойство, что «хакер «может узнать момент генерации ключа, а потом у них будет семя и, следовательно, сможет предсказать следующие сгенерированные числа. Второй способ сделать это, я нашел, - попросить у пользователя семя.
Теперь, если я не хочу, чтобы пользователь генерировал ключ? И мои заботы о основанных на времени семенах основаны или это просто чистая паранойя? Есть ли шанс, что кто-то может получить момент выполнения кода? Или могут быть другие способы сделать это, что я пропустил?
Sidenote: Я использую random_default_engine от <random>Непредсказуемый псевдо-RNG

+1

Вы можете попросить пользователя ввести что-то, а затем использовать что-то из этого как ваше семя. Кроме того, проверьте ':: std :: random_device'. – user1095108

+0

Использование системного времени - это слабое семя, потому что злоумышленник, который примерно знает, когда сообщение было зашифровано, может легко нападать на атаку, используя каждую временную метку в окне вокруг этого периода - скажем, в течение получаса, когда они думают, что это произошло , Проблема генерации энтропии для псевдо-RNG является очень активной областью исследования; должно быть много статей и научных статей, описывающих плюсы и минусы различных методов, которые вы рассмотрели. –

+0

Вы не знаете, но ваш вопрос включает в себя одну из самых больших дилемм вселенной! Существует ли что-нибудь действительно случайное?! (Я так не думаю, но есть люди, которые думают ДА, и у них есть хорошие аргументы). Я думаю, эта статья вас интересует: http://engineering.mit.edu/ask/can-computer-generate-truly-random-number –

ответ

2

user1095108 была правильная идея, но комментарий, вероятно, был слишком коротким.

Попросите пользователя ввести что-нибудь наугад. Каждый символ имеет около 1 бит случайности. Пользователи довольно плохо выбирают случайные символы. Тем не менее, вам понадобится около 40-50 бит.

Однако пользователи также очень плохо печатают в точном ритме. время каждого нажатия клавиши добавляет несколько бит случайности, в зависимости от того, насколько точно ваша ОС может сообщить об этом. При миллисекундном разрешении должно быть достаточно 10 нажатий клавиш.

+0

Интересно. Как я могу нажимать клавиши? Также random_device, похоже, соответствует моим потребностям, но я уверен, что он также имеет недостатки (например, он не будет работать в системе без возможности получить этот случайный бит информации) – Rudy132

+0

Не в переносном C++, в основном. Стандартный вход ориентирован по строкам. – MSalters

+0

Так что мне придется программировать другую функцию для каждой ОС. Я хочу, чтобы программа работала. Есть ли какой-либо другой способ генерации чего-либо от пользовательского ввода? Кроме того, я просто проверил, мой компьютер не поддерживает истинный RNG, поэтому мне придется его кодировать таким образом. – Rudy132

Смежные вопросы