【发布时间】:2013-12-18 12:57:15
【问题描述】:
我正在为学校使用 C++ 进行密码学项目,我需要一种方法来生成其他人(谁“猜到”了种子)无法重新生成的随机数。
准确地说,我需要一个纯随机生成器,或者一种获得 100%“安全”种子的方法。我已经做了一些研究和思考,我找到了两种方法可以做到这一点,第一种方法是用当前时间初始化种子,但这让我担心“黑客”可能会发现密钥生成的时刻,然后他们将拥有种子,因此将能够预测下一个生成的数字。我发现的第二种方法是向用户询问种子。
现在,如果我不希望用户生成密钥怎么办?我对基于时间的种子的担忧是成立还是纯粹的偏执狂?有没有人可以获得代码的执行时刻?或者还有其他我错过的方法吗?
旁注:我正在使用来自<random> 的random_default_engine
【问题讨论】:
-
您可以要求用户输入一些内容,然后将其中的内容用作您的种子。另外,请检查
::std::random_device。 -
使用系统时间是一个弱种子,因为知道消息何时被加密的攻击者可以很容易地使用该时间段内窗口中的每个时间戳进行暴力攻击——比如说,在半个他们认为事情发生的时间。为伪 RNG 生成熵的问题是一个非常活跃的研究领域。应该有很多文章和研究论文描述您考虑过的不同方法的优缺点。
-
你不知道,但你的问题涉及到宇宙中最大的难题之一!是否存在任何真正随机的东西??! (我不这么认为,但有些人认为是的,他们有很好的论据)。我认为您对这篇文章感兴趣:engineering.mit.edu/ask/…
-
@user1095108 我已经考虑过这样做,我实际上认为这是最好的答案,特别是感谢另一个答案,它说 is 可以破解它轻松
-
@qwrrty 谢谢,我只是向用户询问种子(或者我会添加一种生成种子的方法,但我会告诉用户它不安全)