>科技>>正文

scrypt算法的前世今生(从零开始学区块链 192)

原标题:scrypt算法的前世今生(从零开始学区块链 192)

当我们谈论某某币使用某算法时,大部分是指其使用的hash算法,hash算法在工作量证明中是核心算法,工作量证明是维护公链免于中心化倾向的重要保证,今天介绍一下scrypt这种内存依赖型hash算法

hash算法想必大家都不陌生,以前的文章有介绍,也称为散列算法,是信息技术领域非常基础也非常重要的技术。它能将任意长度的二进制值(明文)映射为较短的固定长度的二进制值(Hash 值),并且不同的明文很难映射为相同的 Hash 值。

hash算法最早的用途是将一段数据进行签名,并公布hash运算后的值,接受者通过对收到的数据进行同样hash操作,对比hash后的值以证明该数据在传递过程中是否被修改过,比较常见的算法有MD5,SHA等,我们经常会在正规的官方下载网站发现某个下载文件的MD5值,这就是告诉用户自行验证你从其他网站下载的文件是否有没有被动过手脚

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在区块链世界是那么的重要。

关于本文

scrpyt算法的论文我没有找到,莱特币官网关于scrpyt的介绍也非常少,可以查看原文链接,喜欢就关注吧,您也可以转发到群和朋友圈中让更多人了解,您的支持和鼓励是我最大的动力返回搜狐,查看更多

责任编辑:

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()
投诉
免费获取
今日推荐