一个人应该始终应用一个缓慢的,单向功能的用户输入.虽然它对可能输出的数量没有影响,但是应用这样的函数(像迭代的哈希)确实有助于抵御攻击。

想象一下,您要求用户单击随机位置。每次单击时,都会记录光标的位置。在第三次单击之后,在1920x1080的空间内有三个点(例如,在全高清屏幕上)。这是您对随机性的上限,正如Daan已经描述的那样。

现在发布了一些新的研究,描述了用户如何选择这样的位置。结果可能会发现,很少有人会在同一个地方互相点击两次。这使得攻击者能够以更高的概率预测下两个点,并且这样的攻击者可以开始破解基于这个熵源的任何密钥。

如果一个缓慢的单向函数,如Scrypt或Argon2 (或者,以更基本的形式,任何迭代哈希)已应用于用户输入,攻击者只能在此函数允许的范围内进行猜测。例如,我查看了一些生成私钥的源代码,它只基于鼠标移动输入的键。RSA密钥生成过程仍然很慢,因此对用户来说是幸运的,但是派生密钥可能与磁盘加密的对称密钥类似。这些都是非常快的产生,可以猜测在非常高的速度,如果没有缓慢的函数是适用于随机性。