我已经重新编译了操作系统(基于FreeBSD的“ LionBSD”),以将Argon2i用作crypt / libcrypt中的默认密码哈希算法。

我想知道建议的迭代次数是多少?

例如,OpenBSD默认使用8次bcrypt迭代。

评论

IIRC的启发式方法是“尽可能地调整内存参数,然后尽可能地调整(线性)时间参数”。 IIRC的内存参数应线性增加运行时间和内存成本

出于好奇,您从哪里获得LionBSD?诸如此类的“站点”没有下载或存储库链接。还是您/背后的人?

请注意,bcrypt中的工作因素不是迭代次数。将工作因子增加1会使迭代次数加倍。

@otus是的,我是LionBSD背后的人。我已将代码上传到GitHub上的LionBSD / lionbsd。

#1 楼


我想知道建议的迭代次数是多少?


与bcrypt或传统crypt不同,argon2没有单个迭代计数,但是三个参数会影响计算cost:


迭代次数$ t $,影响时间成本。
已用内存大小$ m $,影响内存成本。
线程数$ h $,会影响并行度。此外,还有两种版本的argon2:argon2d使用数据相关的访问来获得更强的权衡抵抗力,而argon2i避开它们以避免侧通道攻击。建议使用后者进行密码散列。您可以使用多个线程,相应地选择$ h $。
弄清楚可以使用多少内存,相应地选择$ m $。
确定可以花费的最大时间$ x $,选择最大的$ t $,这样您的系统和其他参数选择所需的费用将少于$ x $。

即他们建议您在系统上运行它,并确定与您的内存和处理器使用时间限制相匹配的最大参数。

评论


$ \ begingroup $
@Shackrock,就像上面概述的过程一样,您应该首先选择最大数量的线程和内存,然后才进行这些设置所花费的时间。
$ \ endgroup $
–otus
17年1月11日在15:49

$ \ begingroup $
对于任何现实世界中的szenario,这都无法解决问题。真正的问题不是“参数在我的计算机上产生了什么”,而是“可能的攻击者掌握了什么计算能力,以及我应该如何选择Argon2参数来使攻击在经济上不可行”。归根结底,一旦我的加密文件被盗,攻击者很可能不会使用我的硬件对其进行暴力破解。所以恕我直言,这个问题仍然没有得到回答。
$ \ endgroup $
–omni
17年1月14日在13:32

$ \ begingroup $
@masi,攻击者的计算能力对于选择参数并不重要。密码越多,破解密码的比例就越大–不管您使用什么参数,“ 123456”这样的密码都会被破解。因此,您应该选择系统(或将在其上运行软件的目标系统)可行支持的最大参数,以便攻击者可以破解尽可能少的密码。
$ \ endgroup $
–otus
17年1月14日在14:18

$ \ begingroup $
@otus我知道这一点,但是当您选择参数时仍然是一个问题。例如。如果您是爱德华·斯诺登(Edward Snowden)并且保护文件,则很可能不会使用在笔记本电脑上“方便”使用的参数。而是以一种您想要保护数据的方式选择参数-例如NSA-尽其所能。强大的功能无法轻松地访问数据,即使这意味着现在加密/解密笔记本电脑上的数据也将花费不便的时间。您根据攻击者的能力而不是您的能力来选择参数。
$ \ endgroup $
–omni
17年1月15日在7:55

$ \ begingroup $
@masi,如果您是唯一的用户并可以选择密码,则不需要大参数。只需生成具有足够熵的真正随机密码即可。密码散列对于保护中等复杂的密码非常重要,但是如果您知道例如您不需要128位熵-密码系统的其他部分将更容易破解。
$ \ endgroup $
–otus
17年1月15日在8:06

#2 楼

如前所述,加密和散列要求在安全性和可用性之间取得平衡。如果您将安全性设置得太高,则会推迟用户,并避免使用您的操作系统。如果将其设置得太低,黑客将很容易破解系统。

由于argon2与您的bcrypt示例完全不同,因此明智的做法是遵循Otus建议的策略。
根据系统的目标,您可能希望使用动态值而不是静态值。

安装操作系统后,用户可以为可用性与安全性选择一个值,该值代表您的最大t值。

然后操作系统可以检测可用的RAM并为m值指定RAM的一部分:m = x * RAM。

您还可以询问或检测数字CPU,核心,线程等的数量,并将其中一部分用作h值:h = x * maxthreads。

然后,您将在一系列t值上运行时间测试,直到确定了可用性/安全性的不可思议的阈值。并添加脚本以在将来进行调整。

对于登录高安全性系统,用户可能愿意等待一秒钟的时间进行验证,但是在高可用性系统中,用户希望即时满足,因此大约需要1-50

m的一个好的起点是0.75 *(RAM / number_of_users)一个高安全性的系统可能需要大于0.75的倍数,但是您不想超过RAM,因为这会大大降低速度。

对于h来说,最好的起点是核数。

t应该基于多长时间来计算制作或验证哈希值需要花费。

#3 楼

您最常在此主题上看到的建议似乎基于找到适用于给定主机的最大设置。但是,大多数答案似乎都忽略了这样一个事实,即除了使用argon2(或其他类似函数)对密码进行哈希处理之外,系统实际上还必须做一些有用的事情。 CPU的核心,所有可用的RAM并以最大的CPU负载运行-您还确定了一个基线,该基线确定了使用Argon2进行密码哈希处理可以中断或停止系统上的服务的数量。

您可能会发现,在具有16 GB内存的16核系统上,使用128 Mb的内存是可以的,但是使用2个以上的核且最大负载为10%可能会出现问题。

没有其他人,但是您可以进行这些计算。