一段时间前我想知道为什么没有技术可以在不同的cpu/gpu上均衡哈希创建速度,我不知道这是否可行,这就是为什么我在这里问这个问题。这背后的想法是让工作证明只在两方之间进行,每一方都有50%的机会创建获胜的散列(散列速度相等!)。与更容易找到的现时值相结合,该解决方案比现有的工作证明技术更节能,同时仍能满足预期目标。
发布于 2018-04-01 23:44:03
这或多或少是不可能的,原因很简单,更快的机器就是…再快点。如果双方中的一方买了一台更快的机器,那么他们计算哈希的速度就会更快。事情就是这样的。
然而,我们可以做一些事情。例如,比特币基于SHA-256 (SHA-2的256位长版本)。SHA-2是专门设计为快速的,并且很容易通过专门的硬件来加速。这正是我们在比特币挖掘领域所看到的,从纯基于软件的挖掘转移到具有内置加速功能的CPU,从SHA-2到GPU,再到FPGA,再到ASIC。
这是因为SHA-2被设计为通用加密散列函数,并且加密散列的主要用途之一是作为TLS/SSL和数字签名的基础,其中需要在短时间内对大量数据进行散列。
但是,密码散列函数还有其他用例,特别是口令散列。对于密码散列,我们希望散列函数慢且难以加速,因为合法用户只需要散列一次非常少量的数据(密码)一次(登录时),而攻击者需要一次又一次地散列大量密码,以进行暴力破解攻击。
这类散列函数的示例有PBKDF2、bcrypt、scrypt、Catena、Lyra2、yescrypt、Makwa和Argon2 (后者是2013年密码散列竞赛的获胜者)。特别是Scrypt被设计成使用GPU、FPGA和ASIC以及通过时空或时空权衡来提高速度。Scrypt使用加密安全的伪随机数生成器来初始化内存中的大量伪随机数组,然后使用另一个CSPRNG生成用于访问该数组的索引,从而使内存内容和内存访问模式都是伪随机的。
当然,从理论上讲,预计算结果是可能的,毕竟,以某种特定顺序访问数组与以线性顺序访问更大的数组是相同的,然而,scrypt的设计方式使得这个预计算数组非常大。此外,如果内存容量增加,scrypt有一个简单的功因数参数,可用于以指数方式增加此数组的大小。因此,用空间换取时间是不可能的。
同样,可以创建一个PRNG,它将两个伪随机过程组合成一个进程,并在运行时计算结果。然而,scrypt被设计为这样一种方式,即计算时间将非常长,并且同样存在指数功因数,它可以用于在不改变算法的情况下大幅增加计算时间。因此,用时间换取空间是不可能的。
对存储器的伪随机访问模式还破坏了CPU的任何类型的分支预测、存储器预取或高速缓存方案。
最后,由于大数组是一个共享的全局可变状态,并且没有办法合理地将工作划分为独立的单元,因此算法不能合理地并行化,这意味着您不能使用GPU来加速。
事实上,一些较新的加密货币、智能合约、区块链等使用基于scrypt的工作证明方案。
但是,请注意,在速度较快的计算机上运行scrypt仍然比在速度较慢的计算机上运行scrypt更快。没有办法绕过这一点。例如,这只是意味着我们无法获得使用SHA-2专用硬件所获得的可笑的加速比。但是,设计加密算法很难,而且确实有基于ASIC的Litecoin加密挖掘器,确实获得了显着的加速,但仍然不如我们在SHA-2 /比特币上看到的令人印象深刻的那些。
https://stackoverflow.com/questions/49597829
复制相似问题