Scrypt是一个刚性内存的哈希函数,最早是为了加密密码而不容易被暴力破解(比如,反复试错破解),所以挖矿解谜与
比特币用的“不完全哈希函数原像解谜”是一样的,只不过用Scrypt取代了SHA-256。
Scrypt在比特币被发明出来之前就已经存在,而且它是用来加密个人密码,这一点让我们对它的安全性有一定信心。密码的哈希函数化其实与反ASIC有着相似的目的。出于安全性考虑,我们期待,一个有着定制化设备的攻击者不能够比使用一般电脑或者服务器的用户更快地计算密码的函数值【4】。
Scrypt基本上有两个步骤:第一个步骤是在用随机数据填充随机存取存储器(Random Acess Memory,简称RAM)里面的缓存空间;第二个步骤是从这块内存区域里虚拟随机地读取(或者更新)数据,同时要求整个缓存都存储在RAM里面【5】。
在时间和内存之间的权衡。如果没有一个较大的内存缓存,计算Scrypt会变得很慢,但是用较少的内存来增加相对较少的计算还是有可能的。假设我们使用一个大小约N/2的缓存(而不是N的大小),现在,我们只在j是偶数的情况储存V【j】的值,丢掉那些j是奇数的值。而在第二次循环里,一半的情况下j为奇数的值将会被选到,但这种情况还是很容易被计算的。我们只需要简单地计算SHA-256(V【j-1】),因为V【j-1】在我们的缓存里。在一半的时间内会产生这种情况,所以它增加了N/2个额外的SHA-256计算。
因此,对内存要求量的减半只会增加1/4的SHA-256计算量(从2N到5N/2)。总体来说,我们可储存缓存区域V里的每个k排数据,即使用N/k的内存和计算(k+3)N/2次的SHA-256迭代计算。在这个限制下,如果我们设定k=N,我们就回到先前运算时间为O(N的平方)的计算。这些数字不一定非常准确地适用于Scrypt算法本身,但是渐进预测的方式确实是适用的。
除此之外,还有其他的设计可以弱化用时间来换取内存地能力。举例来说,如果一个缓存持续地在第二次循环中被更新,它可以让时间与内存之间的互换不是那么有效,因为这些更新必须被储存在内存中。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。