Я работаю над криптографическим проектом на C++ для школы, и мне понадобится способ генерации случайных чисел, которые не могут быть восстановлены кем-то другим (кто «догадывался» о семени) ,
Чтобы быть точным, мне нужен либо чистый случайный генератор, либо способ получить 100% «безопасное» семя. Я уже сделал некоторые исследования и размышления, и я нашел два способа: может сделать это, первый способ сделать это будет инициализировать семя с текущим временем, но это оставляет мне беспокойство, что «хакер «может узнать момент генерации ключа, а потом у них будет семя и, следовательно, сможет предсказать следующие сгенерированные числа. Второй способ сделать это, я нашел, - попросить у пользователя семя.
Теперь, если я не хочу, чтобы пользователь генерировал ключ? И мои заботы о основанных на времени семенах основаны или это просто чистая паранойя? Есть ли шанс, что кто-то может получить момент выполнения кода? Или могут быть другие способы сделать это, что я пропустил?
Sidenote: Я использую random_default_engine
от <random>
Непредсказуемый псевдо-RNG
ответ
user1095108 была правильная идея, но комментарий, вероятно, был слишком коротким.
Попросите пользователя ввести что-нибудь наугад. Каждый символ имеет около 1 бит случайности. Пользователи довольно плохо выбирают случайные символы. Тем не менее, вам понадобится около 40-50 бит.
Однако пользователи также очень плохо печатают в точном ритме. время каждого нажатия клавиши добавляет несколько бит случайности, в зависимости от того, насколько точно ваша ОС может сообщить об этом. При миллисекундном разрешении должно быть достаточно 10 нажатий клавиш.
Интересно. Как я могу нажимать клавиши? Также random_device, похоже, соответствует моим потребностям, но я уверен, что он также имеет недостатки (например, он не будет работать в системе без возможности получить этот случайный бит информации) – Rudy132
Не в переносном C++, в основном. Стандартный вход ориентирован по строкам. – MSalters
Так что мне придется программировать другую функцию для каждой ОС. Я хочу, чтобы программа работала. Есть ли какой-либо другой способ генерации чего-либо от пользовательского ввода? Кроме того, я просто проверил, мой компьютер не поддерживает истинный RNG, поэтому мне придется его кодировать таким образом. – Rudy132
- 1. Непредсказуемый FileWriter
- 2. Непредсказуемый выход
- 3. Непредсказуемый результат
- 4. Непредсказуемый двойной
- 5. Непредсказуемый выход
- 6. Непредсказуемый проверка нулевой результат
- 7. Непредсказуемый выход рекурсии main()
- 8. Непредсказуемый выход в C++
- 9. Непредсказуемый EXC_BAD_ACCESS и objc_msgSend_vtable5
- 10. wxWidgets непредсказуемый Seg fault
- 11. Непредсказуемый шум пуассонов
- 12. Lumen непредсказуемый выход
- 13. Непредсказуемый подсчет числа
- 14. LINQ непредсказуемый вывод
- 15. CCSprite дает непредсказуемый результат?
- 16. Cygwin простак получить непредсказуемый результат
- 17. Непредсказуемый z-индекс в титане
- 18. Непредсказуемый заказ файла в глотке
- 19. Непредсказуемый показ Facebook og: image
- 20. Непредсказуемый SIGSEGV (ошибка времени выполнения) в коде
- 21. VBA sort decending не сортировка, непредсказуемый цикл
- 22. Непредсказуемый вывод в простой программе вилки
- 23. OpenSSL Non-Blocking Socket SSL_read() непредсказуемый
- 24. Непредсказуемый Access-Control-Allow-Origin поведение
- 25. Непредсказуемый вызов между принятым событием и BasicConsume
- 26. Ruby sort_by help непредсказуемый атрибут объекта
- 27. stat_sum и stat_identity дать непредсказуемый результат
- 28. Непредсказуемый текст Sublime-text для двух файлов
- 29. Джанго .save() непредсказуемый обработка update_fields вход
- 30. Непредсказуемый вывод из Excel Index-Match
Вы можете попросить пользователя ввести что-то, а затем использовать что-то из этого как ваше семя. Кроме того, проверьте ':: std :: random_device'. – user1095108
Использование системного времени - это слабое семя, потому что злоумышленник, который примерно знает, когда сообщение было зашифровано, может легко нападать на атаку, используя каждую временную метку в окне вокруг этого периода - скажем, в течение получаса, когда они думают, что это произошло , Проблема генерации энтропии для псевдо-RNG является очень активной областью исследования; должно быть много статей и научных статей, описывающих плюсы и минусы различных методов, которые вы рассмотрели. –
Вы не знаете, но ваш вопрос включает в себя одну из самых больших дилемм вселенной! Существует ли что-нибудь действительно случайное?! (Я так не думаю, но есть люди, которые думают ДА, и у них есть хорошие аргументы). Я думаю, эта статья вас интересует: http://engineering.mit.edu/ask/can-computer-generate-truly-random-number –