论文总结

顶会论文讲解

参考文档

第一点、题目讲解

Simple Proofs of Sequential Work------简单的连续工作证明

  • 2018年欧密会最佳论文,作者:Krzysztof Pietrzak,密码学家、奥地利科学与技术学院研究员。Bram Cohen,BitTorrent创始人、Chia CEO
  • 内容简介:
    • 试图通过「空间证明」(Proof of Space)来保证比特币及其他加密货币的安全。「空间证明」是Bram Cohen之前提出的一种取代PoW的工作证明方式
  • 报告人 郭永健 李栋

第二点、题目背景

  • 工作量证明机制为比特币的网络提供了基本的安全性,但是这一验证机制却带来了巨大的资源浪费问题。BitTorrent创始人Bram Cohen在分布式系统领域声名远扬,他提出以计算机存储所有权验证作为工作量证明的替代方案,旨在结合空间证明与时间证明机制避免浪费问题

  • 虽然工作量证明(proof of work)为比特币网络提供了基本的安全性,但毫无疑问,使用其作为验证机制需要大量的电力。一旦拥有笔记本电脑的外行也可以挖掘区块,现在的挖矿过程所涉及的充满专门处理器的仓库,或多或少无用于除了比特币挖矿以外的任何目的。

  • 即使忽略浪费的问题,电力密集型挖矿也不可避免地导致了该行业的地理分布趋于集中。由于矿工在电力更便宜的地方获得的回报最大,冰岛、中国西部地区及华盛顿州等地区已成为主要的中心地区。

  • 为寻找一个能够激励与这些特性相反的系统(通用设备、非浪费的工作及低功耗),开发者Bram Cohen提出了计算机存储所有权验证作为工作量证明的替代方案。
    他提出的“空间证明(proof of space)”,认为这个建议是今天强化比特币的理念的自然迭代。

  • 这一概念需要使用的唯一其他资源就是存储。所以,结果就证实了空间证明在理论上的可能性,利用空间证明你便能够分配存储容量去来做这些事情。在空间证明系统下,矿工将一定量未使用的磁盘空间分配给网络,成功挖掘区块的概率与分配的空间量除以网络总容量成比例。

时间因素

  • 增加时间元素能够避免当空间证明是挖矿的唯一要求(就SpaceMint建议而言)时出现潜在漏洞
    • 如果你只拥有空间证明,那么就存在一个问题:你要让挖矿不产生任何额外的花费。这就产生了一个固有问题,有些人拥有大量资源,自创建以来就可以不断重新挖矿——回到起点,创造一个全新的链条,然后将所有的奖励都给自己。
  • 为了防止这种情况发生,使用时间证明结合空间证明,特别是从每个挖矿时期之间将流逝一段时间的专用时间服务器派生的证明。
  • 尽管这一理念无法彻底消除自创建以来就存在的重新挖掘区块的能力,但这也意味着攻击者没有办法到达当前区块链。而他认为这一规定均被其他空间证明的建议所遗漏。

第三点、关键概念

1、工作量证明(Proof Of Work,简称POW)

  • 简单理解就是一份证明,用来确认你做过一定量的工作。工作量证明系统主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中的,对于验证方则是易于验证的

2、“空间证明(proof-of-space)”

  • 依赖于磁盘空间而不是计算力作为挖矿的主要资源,创建了一种声称能够比PoW更加生态友好且经济的替代选择。这份标题为《以空间证明的应用超越赫尔曼的时间记忆折中》概述了通过使用空间证明(proof-of-space)建立一种对能源需求更少的挖矿流程——比特币的能源集约型挖矿模式一直遭受很多人的批评,被很多人认为是一种资源浪费。由于能源要求的降低,以及对现有硬件的依赖,这种方式旨在是任何拥有一台计算机的人都能够进行挖矿。在空间证明体系下,矿工可以将未使用的磁盘空间分配到网络中,而成功挖到区块的概率将与矿工分配的磁盘空间与网络的总能力成比例

3、比特币中的工作量证明

  • 工作量证明的算法可以大概描述为:在一个时间段同时有多台服务器对这一段时间的交易进行打包,打包完成后连带区块Header信息一起经过SHA256算法进行运算。在区块头以及奖励交易coinbase里各有一个变量nonce,如果运算的结果不符合难度要求,那么就调整nonce的值继续运算。如果有某台服务器率先计算出了符合难度值的区块,那么它可以广播这个区块。其他服务器验证没问题后就可以添加到现有区块链上,然后大家再一起竞争下一个区块。这个过程也称为挖矿
  • 比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的工作量证明的迷题。这道题关键的三个要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题的所需要的计算量。
3.1.1工作量证明函数

比特币系统中使用的工作量证明函正是SHA256

3.1.2 区块

比特币的区块由区块头及该区块所包含的交易列表组成。区块头的大小为80字节,由4字节的版本号、32字节的上一个区块的散列值、32字节的Merkle Root Hash、4字节的时间缀(当前时间)、4字节的当前难度值、4字节的随机数组成。区块包含的交易列表则附加在区块头后面,其中的第一笔交易是coinbase交易,这是一笔为了让矿工获得奖励及手续费的特殊交易。

区块的大致结构如图所示:

拥有80字节固定长度的区块头,就是用于比特币工作量证明的输入字符串。因此,为了使区块头能体现区块所包含的所有交易,在区块的构造过程中,需要将该区块要包含的交易列表,通过Merkle Tree算法生成Merkle Root Hash,并以此作为交易列表的摘要存到区块头中。其中Merkle Tree的算法图解如下:

3.1.3难度值

  • 难度值(difficulty)是矿工们在挖矿时候的重要参考指标,它决定了矿工大约需要经过多少次哈希运算才能产生一个合法的区块。比特币的区块大约每10分钟生成一个,如果要在不同的全网算力条件下,新区块的产生保持都基本这个速率,难度值必须根据全网算力的变化进行调整。简单地说,难度值被设定在无论挖矿能力如何,新区块产生速率都保持在10分钟一个。
  • 难度的调整是在每个完整节点中独立自动发生的。每2016个区块,所有节点都会按统一的公式自动调整难度,这个公式是由最新2016个区块的花费时长与期望时长(期望时长为20160分钟即两周,是按每10分钟一个区块的产生速率计算出的总时长)比较得出的,根据实际时长与期望时长的比值,进行相应调整(或变难或变易)。也就是说,如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。
  • 这个公式可以总结为如下形式:
  • 新难度值 = 旧难度值 * ( 过去2016个区块花费时长 / 20160 分钟 )
  • 工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式如下:
  • 目标值 = 最大目标值 / 难度值
  • 其中最大目标值为一个恒定值:
  • 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  • 目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的区块哈希值必须小于目标值。
  • 我们也可以简单理解成,比特币工作量证明的过程,就是通过不停的变换区块头(即尝试不同的nouce值)作为输入进行SHA256哈希运算,找出一个特定格式哈希值的过程(即要求有一定数量的前导0)。而要求的前导0的个数越多,代表难度越大。

3.3.4 工作量证明的过程

我们可以把比特币矿工解这道工作量证明迷题的步骤大致归纳如下:

  • 1、生成Coinbase交易,并与其他所有准备打包进区块的交易组成交易列表,通过Merkle Tree算法生成Merkle Root Hash
  • 2、把Merkle Root Hash及其他相关字段组装成区块头,将区块头的80字节数据(Block Header)作为工作量证明的输入
  • 3、不停的变更区块头中的随机数即nonce的数值,并对每次变更后的的区块头做双重SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。

该过程可以用下图表示

3.1.5 计算量分析
  • Hash值是由数字和大小写字母构成的字符串,每一位有62种可能性(可能为26个大写字母、26个小写字母,10个数字中任一个),假设任何一个字符出现的概率是均等的,那么第一位为0的概率是1/62(其他位出现什么字符先不管),理论上需要尝试62次Hash运算才会出现一次第一位为0的情况,如果前两2位为0,就得尝试62的平方次Hash运算,以n个0开头就需要尝试62的n次方次运算。
3.1.6. 总结
  • 比特币的工作量证明,就是我们俗称“挖矿”所做的主要工作。理解工作量证明机制,将为我们进一步理解比特币区块链的共识机制奠定基础

第四点、POSW

Publicly verifiable proofs of sequential work---公开可验证的公作证明
随机预言机(random oracle,简称RO)。在密码学里面,随机预言是一个预言(简单说像是理论的黑箱),对任何输入都回传一个真正均匀随机的输出(请参考离散型均匀分布),不过对相同的输入,该预言每次都会回传一模一样的输出。因为预言机实际上起到的是一个黑匣子的作用,中间是存在一个固定的算法的,这个算法相当复杂且是保密的,因此相同的输入值在经过了这个算法的运算之后输出的是相同的输出值,就像数学上一个确定的函数,相同的数值代入运算几次都会得到同样的结果一样。预言机存在的目的是为了让你无法知道自己的输入能得到什么样的结果,如果你给出两个输入,预言机同时给定两个输出的话,你不会知道这两个输出分别对应的是哪个输入。

符号O(x)指RO对于输入x的输出, L代表O(x)的长度。(L是安全参数n的函数)

  • 1.RO一开始维护一张空表,表有两列,一列是输入,一列是输出
  • 2.如果访问者第一次的输入为x, 则RO均匀随机从中选一个值O(x), 把x记录在表里。
  • 3.对于第二个以及之后的访问y,如果y没有在输入这一列出现,则RO均匀随机从选出O(y), 反之,即y出现过,则把输出这一列中,y对应的O(y)再次输出。
  • 这也就是“真正均匀随机”和“对重复值输出相同”的意思。

  • N:时间参数 ,即 PoSW(χ,N) ,在收到w位的x 声明后N时间以及过去,计算得到φ。
  • t是一个统计安全参数,较大的t的稳健性越好
  • w是哈希函数的位数
  • 公用输入P 和 V 获得相同的输入两个统计安全参数w, t 和时间参数N 。所有各方都可以访问随机 oracle H : {0,1}∗ → {0,1}w.
  • 语句V 随机抽样χ ← {0,1}w 并将其发送到 P.
  • 计算 PoSW P 计算 (理想情况下, 使N查询 H 顺序) 一个证明 (φ, φP): =PoSWH (χ, N)。P 将φ发送到 V 和本地存储φP.
  • 打开挑战V 采样随机挑战γ ← {0,1}t·w 并将其发送到 P
  • 打开P 计算τ : =打开H (χ、N、φP、γ) 并将其发送到 v.
  • 验证V 计算和输出验证H (χ, N, φ, γ, τ) ∈ {接受,拒绝}.
  • 我们需要完美正确性: 如果 V 与一个诚实的 P 交互, 那么它将输出接受以概率1。稳健属性要求任何潜在的恶意证明人 P , 如果以良好的概率进行 V 接受, 则必须按顺序查询H "几乎" N次数。即使在每一轮 Pe 都可以并行地在许多输入中查询 H, 而诚实 P 只需要使一个小 (在我们的构造1中, 在 [MMV13] 2 中) 每回合查询数.
  • 协议由四个新型组件组成
    • 去中心化存储网络(Decentralized Storage Network)(DSN)
    • 新型的存储证明
    • 可验证市场
    • 有效的工作量证明(Proof-of-Work)

Simple proofs of sequential work ----简单的连续工作证明

  • 主要用于比特币设计,结合空间证明完成工作证明,作为一个更加环保更加经济的工作证明方式。
  • 优点 提出了一个更简单,更有效,并取得更好的具体界限的顺序工作证明。最重要的是,所需的空间只要logn(使用多一些点的内存就会具有更好的健壮性)
  • 改进点:The PoSW,open and verify algorithms

  • 一个Merkle DAG,一个无回路有向图,对象之间的links都是hash加密嵌入在源目标中。这是Git数据结构的一种推广。
    • 1.内容可寻址:所有内容都是被多重hash校验和来唯一识别的,包括links。
    • 2.防止篡改:所有的内容都用它的校验和来验证。如果数据被篡改或损坏,会检测到。
    • 3.重复数据删除:所有的对象都拥有相同的内容并只存储一次。这对于索引对象非常有用,

总结与问题

  • 论文完成了一个连续工作的证明,它比[MMV13]中的原始结构更简单并且参数更好。 并对[MMV13]论文中提出的三个问题有了解答。

  • 1、规划求解的空间复杂性。在我们构建时间戳和时间锁谜题的时候, 求解器保留 n 个顶点图的哈希标签。是否有其他使用 o (N) 存储的解决方案?或者有任何内在的原因, Ω (N) 存储是必要的?

    • 论文中改进后的方案是空间复杂度以及降低至了O(logn)
  • 2、深度稳健图的必要性。 我们构造的效率和安全性与深度文件图结构的参数密切相关:较低度的图给出了更多有效的解,而具有较高鲁棒性的图(在一些顶点之后剩余的最长路径的长度的下界是 移除)给我们带来较小对抗优势的谜题。 一个有趣的开放问题是逆向是否也持有:具有更好参数的时间锁定谜题还意味着存在具有更好参数的深度 - 稳健图表?

    • 同样,深度稳健图也不是必要的。只需要基础图就足以满足要求。
  • 3、一个基于RO模型的POSW可以用于在诸如抛硬币之类的协议中实现公平。

    • 这个问题还在研究中。

第五点,理论应用----Filecoin

1、Filecoin 是什么?

  • filecoin是分布式网络存储系统IPFS的代币,它的底层是由区块链技术所驱动的。

2、IPFS是什么?

  • IPFS是一种分布式的传输协议,下一代的可能颠覆HTTP的互联网传输协议。IPFS不是基于这种域名寻址,而是内容寻址。它会从一个网页的内容计算出一个加密哈希值,这个值直接反应这个网页的内容。当IPFS被请求一个哈希时,它会使用一个分布式哈希表找到其所在的节点,验证数据并回传内容。而如果内容比较大的话,会分片成几部分再分别加密,需要下载的话可以同时从网站中不同的地方获取。相比HTTP,只要在IPFS网络中出现过的内容不用担心会随着时间推移因为服务器稳定性等问题而消失。

3、fliecoin与IPFS联系。

  • FileCoin是IPFS上的一个代币,IPFS是一个点对点的传输网络,每个文件在这个网络上都有一个唯一的hash指纹。通过filecoin这种代币来激励拥有闲置硬盘的用户,能够将硬盘贡献出来,成为IPFS网络上的一名矿工,来以此获得filecoin代币作为回报。在共识算法上,filecoin采用的是proof-of-spacetime(时空证明),时空证明这种全新的共识机制。它带来的结果是矿工拥有的硬盘容量越大,那么获取的filecoin的报酬就越多。

4、机制

  • Filecoin是一种协议令牌,其区块链运行在一种叫“时空证明”的新型证明机制上,其区块被存储数据的矿工所挖。Filecoin协议通过不依赖于单个协调员的独立存储提供商组成的网络提供数据存储服务和数据检索服务。其中:
    • 1、用户为数据存储和检索支付令牌
    • 2、存储矿工通过提供存储空间赚取令牌
    • 3、检索矿工通过提供数据服务赚取令牌

5、复制证明与时空证明两种共识算法

  • 在Filecoin协议中,存储供应商必须让他们的客户相信,客户所付费的数据已经被他们存储。在实践中,存储供应商将生成"存储证明"(POS)给区块链网络(或客户自己)来验证。在本节中,我们介绍和概述在Filecoin中所使用的“复制证明”(PoRep)和“时空证明”(PoSt)实现方案。
5.1 动机
  • 存储证明(POS)方案类似“数据持有性验证”(PDP)[2]和“可恢复性证明”(PoR)[3,4]方案。它允许一个将数据外包给服务器(既证明人P)的用户(既验证者V)可以反复检查服务器是否依然存储数据D。用户可以用比下载数据还高效的方式来验证他外包给服务器的数据的完整性。服务器通过对一组随机数据块进行采样和提交小量数据来生成拥有的概率证明作为给用户的响应协议

  • PDP和PoR方案只保证了证明人在响应的时候拥有某些数据。在Filecoin中,我们需要更强大的保障能阻止作恶矿工利用不提供存储却获得奖励的三种类型攻击:女巫攻击(Sybil attack)、外包攻击(outsourcing attacks)、代攻击(generation attacks)。

    • 女巫攻击:作恶矿工可能通过创建多个女巫身份假装物理存储很多副本(从中获取奖励),但实际上只存储一次。

    • 外包攻击:依赖于可以快速从其他存储提供商获取数据,作恶矿工可能承诺能存储比他们实际物理存储容量更大的数据。

    • 代攻击:作恶矿工可能宣称要存储大量的数据,相反的他们使用小程序有效地生成请求。如果这个小程序小于所宣称要存储的数据,则作恶矿工在Filecoin获取区块奖励的可能性增加了,因为这是和矿工当前使用量成正比的。

5.2 复制证明
  • “复制证明”(PoRep)是一个新型的存储证明。它允许服务器(既证明人P)说服用户(既验证者V)一些数据D已被复制到它唯一的专用物理存储上了。我们的方案是一种交互式协议。当证明人P:(a)承诺存储某数据D的n个不同的副本(独立物理副本),然后(b)通过响应协议来说服验证者V,P确实已经存储了每个副本。据我们所知PoRep改善了PDP和PoR方案,阻止了女巫攻击、外包攻击、代攻击。
定义5.1
  • PoRep方案使得有效的证明人P能说服验证者V,数据D的一个P专用的独立物理副本R已被存储。PoRep协议其特征是多项式时间算法的元组: (Setup, Prove, Verify)

    • 1、PoRep.Setup(1λ, D) → R, SP , SV , 其中SP和SV是P和V的特点方案的设置变量,λ是一个安全参数。PoRep.Setup用来生成副本R,并且给予P和V必要的信息来运行PoRep.Prove 和 PoRep.Verify。一些方案可能要求证明人或者是有互动的第三方去运算PoRep.Setup。

    • 2、PoRep.Prove(SP , R, c) → πc,其中c是验证人V发出的随机验证, πc是证明人产生的可以访问数据D的特定副本R的证明。PoRep.Prove由P(证明人)为V(验证者)运行生成πc。

    • 3、PoRep.Verify(Sv , c, πc) → {0, 1},用来检测证明是否是正确。PoRep.Verify由V运行和说服V相信P已经存储了R。

5.3 时空证明
  • 存储证明方案允许用户请求检查存储提供商当时是否已经存储了外包数据。我们如何使用PoS方案来证明数据在一段时间内都已经被存储了?这个问题的一个自然的答案是要求用户重复(例如每分钟)对存储提供商发送请求。然而每次交互所需要的通信复杂度会成为类似Filecoin这样的系统的瓶颈,因为存储提供商被要求提交他们的证明到区块链网络。

  • 为了回答这个问题,我们介绍了新的证明,“时空证明”,它可以让验证者检查存储提供商是否在一段时间内存储了他/她的外包数据。这对提供商的直接要求是:

    • (1)生成顺序的存储证明(在我们的例子里是“复制证明”)来作为确定时间的一种方法
    • (2)组成递归执行来生成简单的证明。
定义5.2
  • (时空证明)Post方案使得有效的证明人P能够说服一个验证者V相信P在一段时间内已经存储了一些数据D。PoSt其特征是多项式时间算法的元组: (Setup, Prove, Verify)

    • 1、PoSt.Setup(1λ,D)->Sp,Sv,其中SP和SV是P和V的特点方案的设置变量,λ是一个安全参数。PoSt.Setup用来给予P和V必要的信息来运行PoSt.Prove 和 PoSt.Prove。一些方案可能要求证明人或者是有互动的第三方去运算PoSt.Setup。

    • 2、PoSt.Prove(Sp , D, c, t) → πc,其中c是验证人V发出的随机验证, πc是证明人在一段时间内可以访问数据D的的证明。PoSt.Prove由P(证明人)为V(验证者)运行生成πc。

    • 3、PoSt.Verify(Sv , c, t, πc) → {0, 1},用来检测证明是否是正确。PoSt.Verify由V运行和说服V相信P在一段时间内已经存储了R。

6、特性

  • 1、实现完整性 数据碎片以加密哈希命名。一个Put请求后,客户只需要存储哈希即可通过Get操作来检索数据,并可以验证收到的数据的完整性。
  • 2、实现可恢复性 在Put请求中,客户指定副本因子和代码期望擦除类型。假设给定的m个存储矿工存储数据,可以容忍最多f个故障,则该方式是(f, m)-tolerant存储。通过在不同的存储提供商存储数据,客户端可以增加恢复的机会,以防存储矿工下线或者消失。
  • 3、实现公开可验证和可审核性 存储矿工需要提交其存储 (πSEAL, πPOST)的证明到区块链。网络中的任意用户都可以在不访问外包数据的情况下验证这些证明的有效性。另外由于这些证明都是存储在区块链上的,所以操作痕迹可以随时审核。

6、未来展望

Filecoin是一个去中心化存储网络,它让云存储变成一个算法市场。随着云盘服务商的纷纷停摆,我们看到,中心化的云存储是多么的不靠谱。去中心化的存储是一个非常大的市场,也是刚需,如果能够很好的解决带宽的问题,它的价值将是巨大的,但同时这是一个新项目,还有很长的路要走。

心得体会

第一次接触到顶会的文章,而且还是密码学的文章,理解英文论文并要理解着实下了一番功夫,但总体收获还是很大的,不仅仅是知识的提升,阅读论文方法和能力都得到了很大提升。
区块链是科研的很好的方向,无论是算法研究还是应用研究都是具有很广阔的前景。在自己研二的科研生涯中,准备从区块链的应用着手对区块链进一步的深入研究。

posted @ 2018-06-07 22:12  2017dong  阅读(1728)  评论(1编辑  收藏  举报