我正在寻找一种方法来保护使用SHA256的半弱密码系统,防止使用ASIC级别的散列能力的暴力攻击,理想的方法是设计一个抗ASIC攻击的系统。
下面的场景本质上是理论性的,并总结为一个关于ASIC如何在硬件级别工作的问题。
假设我有一个平台,其中的资金由一个12个字符的密码保护,即A-Z,a-z,0-9
密码上使用的哈希是SHA256,并使用足够的salt来防止彩虹表的攻击。
假设有GPU可以在2000 MH/s左右强行使用SHA256,而攻击者有一个昂贵的这些GPU堆栈。如果单个密码的哈希被泄露,攻击者需要平均250年才能找到泄漏的哈希的密码。
现在,假设ASIC开始以野蛮的方式强迫SHA256,并且可以在大约100/S(类似于我们看到比特币挖掘ASIC用比特币的SHA256d完成的那样)时出现,那么如果这些ASIC中的一个被应用到我泄漏的盐渍散列中,现在就需要平均2天来破解了。
(注意:这里的主要缺陷是,我的平台使用的密码很弱,因为它们必须有12个字符长,增加长度显然可以解决这个问题,但在我的场景中,长度必须是12个字符)
我开始设计一种抗ASIC的方案,我建议我们使用一个变量,我们称之为“糖”,它将是添加到盐渍散列中的一些数据,然后再对其进行散列,例如SHA256(sugar+SHA256(salt+weakPassword))。这背后的理论是,如果一个ASIC是用来蛮力我的平台,我可以简单地改变‘糖’,现在整个ASIC被设计成蛮力旧的设置在一个硬件水平。
这是否有效,或者我是否误解了ASIC是如何构建的,对于ASIC来说,更新提议的“糖”变量将是微不足道的?
发布于 2020-09-02 11:06:37
SHA256的一个问题是它速度快,这使得每秒钟可以验证许多可能的密码。使密码散列函数变慢的一种标准方法是执行基础散列函数的多次迭代。例如,PBKDF2或多或少是一个哈希计算的循环。当对一个密码执行10,000个散列计算时,破解速度也会慢10,000倍。
ASICs计算哈希的速度可能更快,但它们不同于普通计算机,因为它们缺少内存。氪石试图利用这一点,要求哈希函数的内存。通过需要几MB内存,哈希在计算机上仍然很容易计算,但是在ASIC中实现它变得更加困难和昂贵。
最后,我建议使用Argon2作为密码哈希函数。另一个密码哈希函数,如bcrypt、scrypt或PBKDF2也很好。但是使用一轮SHA256哈希密码是不够的,特别是当您担心攻击者使用自定义硬件和无限预算时。
我建议我们使用一个变量,我们称之为“砂糖”,它将是添加到盐渍散列中的一些数据。
这通常被称为胡椒粉,我想说,从安全的角度来看,对于使用胡椒粉是否是一个好主意,还没有达成共识。
https://security.stackexchange.com/questions/237862
复制相似问题