专栏首页包罗万想GCAC31 8.13 A fun application: proofs of work

GCAC31 8.13 A fun application: proofs of work

参考资料:https://zh.wikipedia.org/zh-cn/%E5%B7%A5%E4%BD%9C%E9%87%8F%E8%AD%89%E6%98%8E

8.13 Another fun application: proofs of work

工作量证明(Proof-of-Work,PoW)是一种对应服务与资源滥用、或是拒服务攻击的经济对策。一般是要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。此一概念最早由Cynthia Dwork和Moni Naor于1993年的学术论文提出,而工作量证明一词则是在1999年由Markus Jakobsson与Ari Juels.所发表。现时此一技术成为了加密货币的主流共识机制之一,如比特币所采用的技术。

技术原理

工作量证明最常用的技术原理是散列函数。由于输入散列函数h()的任意值n,会对应到一个h(n)结果,而n只要变动一个比特,就会引起雪崩效应,所以几乎无法从h(n)反推回n,因此借由指定查找h(n)的特征,让用户进行大量的穷举运算,就可以达成工作量证明。

我们若指定h(n)的16进制值的前四值,求n,这样统计上平均约要运行216次h(n)散列运算,才会得到答案,但验算只要进行一次就可以了。如果想要增加难度,那就增加指定的位数即可。以SHA256函数举例,假设我们要处理数据Hello World,并找出h(n)前四值为0000的n,如果从Hello World0开始加上一个十进制数ASCII进行穷举猜测,到Hello World107105时才会得到符合条件的h(n):

0000BFE6AF4232F78B0C8EBA37A6BA6C17B9B8671473B0B82305880BE077EDD9

验算时只要将Hello World107105代入SHA256函数一次即可。

加密货币的应用

由于加密货币多由区块链所建构,而区块链本来就要依赖散列函数来做为数据正确无误的担保,所以在加密货币上使用工作量证明,是非常简明的设计。由分散在各处的计算机,竞赛谁能最早找出,搭配原本要打包的数据的穷举猜测值(nonce),谁就等同获得该区块的打包权(记账权)。此猜测值被找出后,与数据、散列值一起打包成块后广播,经多数节点确认与承认,打包者就能获得打包该区块所提供的奖励。[3]一般采用工作量证明的加密货币,好比比特币,会设置成随着参与竞赛的算力增减,而调整找寻猜测值的难度,以维持合理的运作速度。

优点

• 架构简明扼要、有效可靠。

• 由于要获得多数节点承认,那攻击者必须投入超过总体一半的运算量(51%攻击),才能保证篡改结果。这使得攻击成功的成本变得非常高昂,难以实现。

• 某种程度上是公平的,你投入越多的算力,你获得打包权的几率也等比增加。

缺点

  • 非常浪费能源。投入在一种加密货币上的能源,可能会超过一个小型国家的总使用量。
  • 由于加密货币在世界上已成为一种投资标的,所以有技术者或富有者,可以开发出由ASIC组成的特制计算机,垄断算力。这与加密货币的去中心化思想背道而驰。
  • 也因此,后期开发的加密货币有针对抗ASIC的算法设计,例如以太坊采用的Ethash(Dagger-Hashimoto)算法。
  • 后期开发的加密货币陆续使用了POS机制(例如以太坊)或DPOS机制(例如比特股﹑EOS)。

本文分享自微信公众号 - 包罗万想(An-mind),作者:安包

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GCAC23 6.12 A fun application: searching on encrypted data ​

    6.12 A fun application: searching on encrypted data

    安包
  • GCAC52 12.2 Understanding CCA security

    12.2.1 CCA security and ciphertext malleability 可延展性

    安包
  • Dan Boneh密码学笔记8

    3.Deterministic Encryption Constructions:SIV and wide PRP

    安包
  • Maven简单方式将所有依赖打包到一个jar

    飞奔去旅行
  • Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

    在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章宏哥主要介绍了jmeter连接和创建数据库测试计划的过...

    北京-宏哥
  • 「入门须知」网站优化过程中都需要做些什么?推荐入门阅读

    今天就根据自己的SEO经验与大家分享一下,“网站优化过程中都需要做些什么?”这个问题希望能对刚开始做SEO的SEOer有所帮助。

    大脸猫
  • Spring中的事件驱动模型(二)

    前文回顾 前一篇文章讲了Spring中的事件驱动模型相关概念。重点篇幅介绍了Spring的事件机制,Spring的事件驱动模型由事件、发布者和订阅者三部分组成,...

    aoho求索
  • python:datetime用法

    py3study
  • 对称加密和解密

    .NET提供了一组类型来实现对称加密和解密。这些类型拥有共同的基类SymmetricAlgorithm,如图所示。

    小蜜蜂
  • 浅析软件项目成本估算之间接人力成本估算

    一个软件项目在开发过程中,它的研发成本包含直接成本和间接成本。而间接成本又分为间接人力成本和间接非人力成本。如何估算间接人力成本呢?下面我们举例来说明间接人力成...

    软件成本造价评估

扫码关注云+社区

领取腾讯云代金券