许多加密库对PBKDF2-HMAC-SHA256的实现进行了高度优化,但很少有SHA512可以做到。 PBKDF2的烦恼之一就是存在这样的事实,即优化意味着您不能只将一种哈希算法代入另一种哈希算法,而又不会导致性能的重大下降,这不仅超出了哈希算法本身之间的差异。自己尝试建立这种优化绝对属于“滚动自己的加密货币”。
在这里至关重要的是,我们不想让防御者陷入缓慢的实施过程中,而攻击者会针对其实施高度优化的实施过程。攻击者在这方面将具有一些优势,但是我们不想让他们比防御者拥有更多优势。
WebASM似乎是在最麻烦的环境中获取Argon2的最佳途径。但是wasm破坏了浏览器针对不安全评估而构建的一些非常好的安全性保证。而且它的表现仍然参差不齐。我显然不会也不能为Bitwarden说话,但是我们不会在wasm中部署argon2,直到我们知道它已经准备好并且了解所有问题为止。 (同样,PBKDF2有很多陷阱,您需要解决,但是现在这些都是众所周知的。)
例如,如果您要调整台式机设备的KDF内存和时间强度,那么当您需要在较旧的,价格较低的Android设备上解锁相同数据时会发生什么情况?当然,您可以忍受更长的解锁时间,但是安全性提升确实值得您付出电池成本吗?
从10,000到100,000发子弹,强度增加了10倍,而额外的成本为90,000发子弹。但是,当我们再次这样做时会发生什么。第二次将您的费用增加90,000发,使您达到190,000发(让我四舍五入为200,000)。因此,相同的成本增加只会使您的实力翻倍。通过增加100,000发使您达到300,000发,再次执行此操作。您获得的额外力量不到1位。 (我在2015年的博客文章中对此进行了更多讨论。)
假设我们从100,000回合开始。在密码末尾添加一个随机选择的数字将使其强度提高10倍。要通过增加回合数来获得相同的效果,您需要从100,000回合增加到1,000.000回合。如果再加上第二个随机选择的数字,则会增加到10,000,000发回合的效果。
使用慢速/难以存储的哈希非常关键,但是过度使用它是很愚蠢的,并且在一定程度上,这是极客的安全区,他们希望在价格便宜得多的情况下为获得额外的安全性而感到痛苦获得更好安全性的方法。
最想控制参数的人是最不了解上一点的人。