60

莱特币背后的秘密 - 白话Scrypt密码算法

 6 years ago
source link: https://zhuanlan.zhihu.com/p/32484253?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

莱特币背后的秘密 - 白话Scrypt密码算法

莱特币背后的秘密 - 白话Scrypt密码算法

日期:2017年12月30日
地点:南京
作者:老宋 (送客在线 http://songke.online )

现在是2017年12月30日,最近比特币很火呀,比特现金很火,以太坊很火,莱特币也很火,而当莱特币之父李启威先生(Charlie Lee,美籍华人,麻省理工毕业,原Google员工)宣称已清空他持有的所有莱特币后,莱特币更火了,真是火火火火火啊。

v2-4b44a326f2e30d86155137a468bf6887_720w.webp

与比特币相比,莱特币的不同之处关键在于,比特币采用了SHA-256哈希算法,而莱特币采用的是Scrypt哈希算法。老宋对其很感兴趣,但关于Scrypt算法原理没有中文资料可查,老宋翻遍百度贴吧,也没有找到关于Scrypt的一纸片言,只好自己去litecoin、tarsnap、wikipedia查资料论文源码,才搞明白其可能的初步原理。

首先,比特币采用SHA-256、RIPEMD-160哈希算法生成密钥,使用SHA-256作nonce碰撞以挖矿。SHA-256与MD5类似,是一种将比特位洗牌、置换的算法,它的性能与内存空间没有关系,只与CPU处理速度有关;SHA-256算法简单,导致GPU矿机、FPGA矿机、ASIC矿机在比特币领域大行其道,矿厂、矿池完全垄断了比特币挖矿领域,个人用户想挖到比特币~嗯,想都别想。

莱特币创始人李启威先生认为,比特币这种矿厂矿池集中挖矿的行为,对个人用户而言有失公平,这可能导致某些组织或机构利用廉价的硬件控制整个比特币网络,这违背了比特币的去中心化的初衷。于是,他在莱特币中引入了Scrypt算法,在挖矿中代替SHA-256算法,采用了Scrypt算法后,nonce碰撞对CPU性能消耗极大、也需要极大的内存空间,因此大大拉升了挖矿的成本,让矿厂矿池无法低成本挖到莱特币,从而让莱特币较比特币更为公平。

我们先来看看SHA256算法(如下右图),当然SHA-256算法对老宋来说也够复杂的了,所以还是先来看看MD5算法(如下左图)吧。

MD5算法是由4轮运算组成,每轮运算16次,也就是说64次运算。可以理解成,用固定的手法洗牌,洗64次牌,运算量较小。而SHA-256如上右图,提高了复杂度和运算量,但是也没有太大的提高,因此CPU、GPU、FPGA、专用ASIC可以非常快速地计算出SHA-256的结果,这让矿厂矿池可以用极低地成本部署大量矿机并行挖取比特币。

而莱特币所使用的Scrypt算法,是程序员兼密码学家COLIN PERCIVAL先生在其2009年的论文《STRONGER KEY DERIVATION VIA SEQUENTIAL MEMORY-HARD FUNCTIONS》中提出的。COLIN PERCIVAL先生2005年牛津博士毕业,发明Scrypt算法时不过30多岁,厉害!

Scrypt是一种KDF算法,KDF是密钥导出功能的意思,主要适用于生成密钥,目的是为了避免黑客低成本地大量产生密钥去试探密码,而Scrypt的这个效果正好被用在莱特币nonce碰撞中,避免了矿厂矿池低成本挖矿。

Scrypt算法运行中会占用大量内存,而内存的硬件层本较高,使得矿厂矿池不可能低成本大量挖矿。请看RFC 7914《The scrypt Password-Based Key Derivation Function》中关于算法的描述:

Scrypt算法会产生一个p个块元素的数组,p的值大概比2^31(42亿)小几个数量级,实际使用中可能是十万~百万级别吧?对于每个块元素,都是进行一系列复杂运算生成的哈希值,最后对整个数组再进行PBKDF2-HMAC-SHA256运算得到最终结果。

Scrypt算法保证只有将每个元素都存放在内存中,最后才能算出正确的结果,从算法层面保证了对大量内存空间的硬需求,从而提高了运算成本。

2011年,李启威先生受到比特币启发创建莱特币,并将Scrypt算法应用于莱特币。

而Scrypt算法的发明人COLIN PERCIVAL先生,在2006年创建了一个Tarsnap网站,提供高度安全的在线文件备份服务,其安全性就是由Scrypt算法提供的。Scrypt算法可以很好的抵抗黑客大规模密钥生成试探密码。Tarsnap与百度网盘等其它在线备份服务不同之处在于,其网络中存储的内容是加密的,而只有用户本人才能解密看到,Tarsnap网站是看不到用户文件的内容的。感兴趣的读者可以访问 https://www.tarsnap.com/ 以进一步了解,注意Tarsnap是收费服务。

Reference:

0. 老宋的独家号 ( 送客在线 http://songke.online )

1.Open source P2P digital currency

2.Online backups for the truly paranoid

3. barrysteyn/node-scrypt

4.Key derivation function

5.scrypt - Wikipedia

6.Litecoin - Wikipedia

7.The scrypt Password-Based Key Derivation Function

8.Not a IOTA: The Trouble With IOTA and How to Fix It - Cryptovest

9.http://www.tarsnap.com/scrypt/scrypt.pdf

10.US Secure Hash Algorithms (SHA and SHA based HMAC and HKDF)

11.SHA-2 - Wikipedia

12.MD5 - Wikipedia

13.https://www.linkedin.com/in/colin-percival-8269672

14.https://github.com/openssl/openssl/blob/master/crypto/evp/pbe_scrypt.c

15.https://github.com/litecoin-project/litecoin/blob/master/src/crypto/scrypt.cpp

注:本文为老宋原创文章,欢迎随意转载,有任何疑问请至【知乎专栏-老宋的独家号】评论区讨论交流。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK