【发布时间】:2021-11-10 22:01:50
【问题描述】:
大多数论文要么甚至没有提及它,要么只是说从某个地方获取“初始向量”。
贴在很多地方的方法是使用系统时间。然而,这不是一个严重的漏洞(假设算法是已知的)吗?如果在几秒钟内知道时间,我估计(通过使用QueryPerformanceCounter 进行一些琐碎的测试)实际信息将少于 24 位(非常可悲)。此外,由于时间具有某种可预测性,因此可以提前为假设的攻击生成必要的信息。
有没有办法初始化 PRNG 而不会感到难过?
【问题讨论】:
-
您想到什么应用程序?是用于游戏、模拟还是信息安全应用程序?对于后者,一个相关问题:stackoverflow.com/questions/62375129 对于前两个,一个相关问题:stackoverflow.com/questions/59263562/… 此外,NumPy 使用操作系统的随机器初始化其生成器,而不仅仅是时间戳,默认情况下:stackoverflow.com/questions/66092967
-
我没有做任何特别的事情。只是好奇。对于像游戏或模拟这样的没有对手的情况,时间会很好。您发布的链接(用于加密案例)很有趣。然而,它基本上说的是“更加努力”:D
-
或许
(time(0)*0x10000) ^ getpid()之类的? -
pid 是公开信息。我假设算法是已知的。所以这些修改不会增加信息内容。
-
如果您正在寻找加密安全种子,代码需要像 urandom 这样的东西 - 一个真正的随机源。如果要引起 2 个同时程序调用的不同行为,
^ getpid()很有用。并非所有使用 random() 函数的程序都需要加密安全 PRNG 种子。 “什么应该用作 PRNG 种子?”是程序要求的具体问题,而不是一般问题。
标签: algorithm random cryptography random-seed