莱特币Scrypt算法

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

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

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