我正在为学校的 C++ 密码学项目工作,我需要一种方法来生成不能由其他人(“猜到”种子)重新生成的随机数。
准确地说,我需要一个纯随机生成器,或者一种获得 100%“安全”种子的方法。我已经做了一些研究和思考,并且找到了两种可以做到这一点的方法,第一种方法是用当前时间初始化种子,但这让我不得不担心“黑客”可能会发现 key 生成的时刻,然后他们就会有种子,因此能够预测下一个生成的数字。我发现的第二种方法是向用户索取种子。
现在,如果我不想让用户生成 key 怎么办?我对基于时间的种子的担忧是成立的还是纯粹的偏执狂?有没有人可以获得代码的执行时刻?还是有其他我错过的方法?
旁注:我正在使用 random_default_engine
来自 <random>
最佳答案
user1095108 的想法是正确的,但评论可能太短了。
要求用户随机输入一些内容。每个字符大约有 1 位的随机性。用户非常不擅长选择随机字符。然而,您将需要大约 40-50 位。
但是,用户也很不擅长以精确的节奏打字。每次击键的时间会增加一些额外的随机性,具体取决于您的操作系统能够报告的准确程度。对于毫秒分辨率,10 次击键应该足够了。
关于c++ - 不可预测的伪RNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658859/