我已经重新编译了我的操作系统(基于FreeBSD的“FreeBSD”),以使用Argon2i作为加密/libcrypt中的默认密码散列算法。
我想知道推荐的迭代次数是多少?
例如,OpenBSD使用默认情况下bcrypt的8次迭代。
发布于 2018-08-01 19:27:17
正如前面提到的,加密和散列需要在安全性和可用性之间取得平衡。如果您设置的安全性太高,用户将被推迟,并避免使用您的操作系统。如果你把它设得太低,黑客就很容易破解这个系统。
由于argon2与您的bcrypt示例有很大不同,所以明智的做法是遵循Otus推荐的策略。根据系统的目标,您可能希望拥有动态值而不是静态值。
安装操作系统时,用户可以为可用性和安全性选择一个值,该值表示您的最大t值。
然后,操作系统可以检测可用的RAM,并为m值指定一部分RAM : m=x*RAM。
您还可以询问或检测CPU、内核、线程等的数量,并将其中的一部分用作h值:h=x* You线程。
然后,在t值范围内运行时间测试,直到确定可用性/安全性的神奇阈值为止。
将结果值保存在某个配置文件中。并在将来添加一个脚本来调整它们。
为了登录到一个高度安全的系统,用户可能愿意等待超过一秒钟的验证,但是在高可用性系统中,用户需要即时的满足,因此可能需要1到50毫秒的时间来保持他们的快乐。
对于m来说,一个很好的起点是0.75 *( RAM / number_of_users )--一个高安全的系统可能需要大于0.75的倍数,但是您不想检查RAM,因为这会大大减慢速度。
对于h来说,最好的起点是核的数目。
然后根据生成或验证散列所需的时间计算t。
发布于 2018-10-10 11:03:43
您在这个主题上经常看到的建议似乎是基于找到适用于给定主机的最大设置。然而,大多数答案似乎忽略了这样一个事实,即系统实际上除了使用argon2 (或其他类似函数)哈希密码之外,还必须做一些有用的事情。
因此,与其假设Argon2可以使用所有CPU的核心、所有可用的内存,而且在最大的CPU负载下运行,还不如通过使用Argon2进行密码散列来确定系统上的服务能够承受多少中断或停滞。
您可能会发现,在拥有16 GB内存的16核系统上,使用128 Mb内存是很好的,但是使用超过2个最大负载为10%的内核可能会有问题。
只有你才能做那些计算。
https://crypto.stackexchange.com/questions/37137
复制相似问题