Scrypt算法
Scrypt算法简介
Scrypt是内存依赖型的POW算法,莱特币采用此算法。第一个使用Scrypt算法的数字货币是Tenebrix,而后该算法被莱特币使用。莱特币创始人在莱特币创世帖中介绍了莱特币采用的共识机制,挖矿算法,发行总量,挖矿难度等相关重要信息。李启威说明了莱特币所使用的挖矿算法为数字货币Tenebrix所使用的Scrypt算法,是一种符合PoW共识机制的算法。Scrypt算法过程中也需要计算哈希值,但是,Scrypt计算过程中需要使用较多的内存资源。
其它使用Scrypt算法的数字货币还有数码币(DigitalCoin)、狗狗币(DogeCoin)、幸运币(LuckyCoin)、世界币(WorldCoin)等。
Scrypt的诞生
由于比特币将hash算法作为pow工作量证明的重要手段,后续的各种采用pow的数字货币也延续了这个设计,以SHA256、MD5(MD5后来被证明不具备强碰撞性数字货币一般不用)为代表算法在设计之初属于算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的 CPU 进行 Hash 的速度也越快。这个设计直接导致后来的矿机出现,采用ASIC芯片的矿机更是将这种运算能力成倍提升,更多矿场的出现使得当时的比特币面临算力中心化的威胁(关于矿场这个争论现在依旧)
为了限制计算能力的依赖,人们开始寻求新的算法,我们说过现代计算机是“存储转发结构”,既然要限制转发CPU的能力,目光自然投向存储依赖,也就是内存依赖,莱特币率先使用内存依赖型的scrypt算法作为pow核心,因此奠定了第一山寨币的地位。
scrpyt算法是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的,当初的设计是为了降低CPU负荷,尽量少的依赖cpu计算,利用CPU闲置时间进行计算,因此scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。所以scrpyt一直没有推广开,但是由于其内存依赖的设计特别符合当时对抗专业矿机的设计,成为数字货币算法发展的一个主要应用方向。
后来有人在SCRYPT的基础上稍作修改形成Scrypt –N算法,改进思路都一样,都是追求更大的内存消耗和计算时间,以有效阻止ASIC专用矿机。
Scrpyt后续影响
虽然后来诞生的FPGA矿机可以有效运行scrpyt算法进行大规模挖矿,(FPGA和ASIC类似,FGPA板每块有高达24.8GB/s或以上的内存带宽,属于专用可编程芯片,其实显卡挖矿也是利用了显卡GPU计算能力和内存带宽能力),但是scrpyt算法的使用开启了人们对于hash计算去中心化安全的探索。
后来诞生过串行算法,并行算法等等,其中X11就是使用了11种加密算法(BLAKE, BMW, GROESTL, JH, KECCAK, SKEIN, LUFFA, CUBEHASH, SHAVITE, SIMD, ECHO)
不要被这些算法吓到,其实就是对一段数据进行了11次不同算法的运算,通过运算复杂度增强安全性和加大计算资源消耗,一方面更安全,另一方面抵抗专业硬件编程矿机。后来认为这种串行方式一个算法被攻破实际上会导致整个体系安全性受到攻击,又发展出并行算法。
所谓并行就是将数据进行分块,比如切分成11份,每一份使用不同算法计算,再拼接不同的结算结果而已。
由于pow算法依赖计算资源,不论是CPU或者是内存依赖,到后期总会有更专门的硬件出现,这是计算机体系结构决定的,后期诞生的币种或相关项目将目光投向pos证明机制,不再依赖算力,这也是发展的必然结果,虽然目前pos机制还在发展中,但是未来这是抵御中心化算力更好的方式。
scrpyt的价值在于提醒了人们对于算力中心化的认识,促进了区块链系统向更好的方向发展,我认为这是一个里程碑式的算法,估计该算法的发明人也没有想到scrpyt在区块链世界是那么的重要。