Skycoin白皮书中文版:什么是Skycoin Skycoin创新 Skycoin IPO
时间:2014-08-27 来源:冷月 作者:冷月
Skycoin: 一种新的分布式共识系统 英文原版地址:https://github.com/skycoin/whitepapers 中文翻译地址:https://github.com/zccoin/skycoinwhitepapers 译者:招财币冷月 新浪微博 @招财币冷月 BTC捐赠地址:1HLnkctB8dN4AcorjsJK493pHL7rUSVfzm ZCC捐赠地址:ZVX7namJi8CinMQbFruzHA27eW53qTznXW ================== 摘要: 本文介绍了一种称之为公开广播频道的加密原语,并引入一种新的共识算法,Obelisk以及基于Obelisk的Skycoin。Obelisk并不是一种单一算法,而是一整套采用多种技术来实现特定安全保证的方法论。 Bitcoin ================== 比特币的概述-一种拜占庭将军问题的解决方案。 新的交易被放入区块,然后附加到区块链上。比特币网络的任意节点都能创建区块。每个块因此有一个单一的父节点,但是一个或多个合法的后继(子区块)。多个链形成一棵树,并且比特币解决的核心问题是让网络中的每个节点认同到底区块树的哪个潜在链成为共识的区块链。 比特币使用一种称之为工作量证明的技术来决定唯一的区块链。一个合法的区块要求一个低于特定值的哈希值。节点们添加交易到新的区块并且随机的尝试notch直到发现一个具有正确哈希值的区块。 一个函数被用来创建区块树中链的总体排序。拥有最高难度并且要求最多哈希运算才能创建的链称为“最长链”和共识链。采用一种包含“区块深度”和“难度”的标识来创建一个对区块树中所有线性链的总体排序,并且我们接受消耗资源最密集的链作为共识链。 比特币节点们互相之间随机连接,并且每个节点传递它所知道的难度最大的块链到其它节点。如果一个节点拥有一个比其它节点所知道的产生难度更大的链,其它节点接下来将会接受该链。节点将对函数进行求值,来验证接收到的块链的难度更大,并且随后切换到接收到的该链。节点会随后广播它的新链到其他节点。通过这种方式,通过网络来传播共识,并且所有节点达到同一个共识。 比特币并不假定节点拥有标识,并且不假定节点是诚实的。节点能够发送任何数据到其它节点,并且它不能影响共识结果,因为难度是一种能够自己单独验证的设计机制。 比特币的创新 ================== 比特币已经完成多种需要我们继承的创新: - 一种每个人都有一份拷贝的单一数据结构 - 存储金融交易在区块链中(公开的交易总帐) - 使用PoW和重置难度来实现恒定的区块产生速度 - 使用公钥哈希作为地址(公钥直到使用时才会披露) - 使用“输出”表示余额。放弃创建可划分的数字现金的尝试:为了从$25的输出中支付$20,发送$20到其它人,同时$5到自己。 - 第一次使用函数(PoW难度函数和区块深度)来定义区块树的总体排序 - 公开的记账规避了传统数字现金双花问题 比特币系统中的缺陷 ================== 比特币系统有如下局限性: - 比特币中的共识结果并不是最终的,并且能被撤回。一个能够租赁或者买到足够哈希计算能力的人或者组织能够撤销交易。 - 比特币获得了网络共识,但是通过控制通过路由的数据包,每个比特币节点非常容易受到控制。一个控制路由器的攻击者有绝对的控制力并且能够任意影响节点的共识结果:攻击一个银行使用的比特币节点比通过攻击整个网络来实现一次双花攻击更加容易。 - 比特币网络的安全基于,对于一个想要攻击网络的个人或者组织,获得绝大多数哈希速率的成本太过于昂贵。这并不是一个正确的假定。随着比特币获得成功和价值增长,攻击网络的动机会越来越强。 - 成功攻击能够从交易平台偷取巨量的数额(最近MtGox攻击事件中价值$400 million)。一个有经验的攻击者能够从交易平台以比特币购买alt coins,并且51%攻击来撤销比特币充值交易。用户因此同时获得了比特币和alt coins,并且交易平台将因为不能兑现破产。 - 攻击者能够从银行和赌博网站偷取大量数额。一个攻击者存储比特币然后提取出来。攻击者通过51%攻击来撤销存储交易,同时保留提取交易。这种类型的攻击会很突然,并且非常有利可图,从而影响比特币的整个服务,这种可能性并不能被排除。 - 随着比特币的成熟,买空比特币或者攻击网络的犯罪行为能够获利很多。在将来,对比特币的成功攻击能够导致数以百万美元计的买空收益。 - 获得绝大多数哈希算力的成本可能并没有高到足够防止特定攻击者。KNC miner已经一万美元单价发售了200个批次,加起来可以获得绝大多数算力。攻击比特币网络的成本低于两百万美金。 - 攻击比特币网络的成本在某些为了抹黑比特币安全性的国家或者公司的资源能力范围之内。对资本控制性强的国家和竞争公司能直接攻击比特币网络来网络他们的经济利益。 - “云挖矿”和第三方算力租赁服务正变的越来越成功。很多大的矿池现在拥有租用算力完成绝大多数攻击的能力。 - 黑客们可以使用路由器和网络设备中的各种安全漏洞来从银行和交易平台窃取比特币。一个攻击者能够控制一个比特币节点连接到的节点,并且确保它连接到黑客控制的节点。一个攻击者可能引入一个存储交易到银行的所在侧链,并且让银行发送一个提取交易到主交易网络。 - 比特币不能低成本的提供安全性。运行比特币网络的成本非常高昂。比特币网络正在使用非常大并且指数增加的电能,并且对环境不负责任。比特币的安全性故意的建立在制造尽可能多的电能浪费之上。一个安全的系统应该让攻击花费多于防守。在比特币中,这个比例是1:1。 - 比特币交易需要平均10分钟时间来打包进入一个区块,并且为了更高的安全性需要的时间更多。比特币基本上不能降低交易时间的同时又不降低安全性。这一点从推广角度上妨碍了比特币的接受度。 这些问题必须被解决。通过这些问题,比特币应该被视为加密货币的胚胎而不是最终形式。未来的货币将显著的改善比特币并且在很多方面超过它。 分布式共识的金融记账系统需要具备的属性 ================== 比特币能够被改善的几点是: 1. 安全性 2. 效率 3. 速度 4. 透明度 1. 一旦一个交易被执行,它应该是不可能被撤销共识的。共识应该尽可能的不可逆。(没有双花,安全性) 2. 运行一个完美的安全的账本的成本应该是极低的。(效率) 3. 系统应该允许交易在几秒级被确认 (速度) 4. 应该很容易审计和识别恶意节点 (透明度) 5. 节点应该能够检测他们的共识是否不同于网络 (路由攻击,安全性) 6. 一些安全属性应该保证完好,即使网络中的绝大多数节点是恶意和勾结的。 我们引入一个称之为Obelisk的系统来达成这些目标。 现实世界中的拜占庭将军问题 ================== 拜占庭将军问题是一个学术界用来设计算法来保证计算机网络达成共识的模型。一个成功的共识算法要求所有的诚实节点达到同一个共识。 在拜占庭将军问题中,你有N个将军围困一个城市。将军们仅仅能通过通信渠道来通信,并且所有人必须达到同一个决定。他们必须在同一天同时攻击。为了征服这个城市,所有的将军必须同时进攻或者等待。如果一个将军进攻,所有将军应该进攻,并且如果一个等待,所有将军应该等待。如果一个将军进攻并且其他将军们按兵不动,围攻就会失败。将军们仅仅能通过信件通信,并且有可能不到达或者晚到达。 在拜占庭将军问题的学术版本中,失败是良性的。可能一个将军没有得到信。表述失败但是良性的计算机服务器应该同时到达相同的状态。真实世界的拜占庭将军问题被称之为“对抗拜占庭将军问题”。 对抗拜占庭将军问题发生在当有人能通过攻击网络来获利情况下。 存在一些不诚实的将军,并且他们将不惜一切代价来确保不能达成共识。不诚实的将军们可能撒谎。他们可能告诉一个将军一件事情,对另外一个将军则是不同的事情。不诚实的将军可能杀死另外一个将军的信使,让一个发送的消息不能被接收到。不诚实的将军们可能假冒其他将军的信息。不诚实的将军们能够改变一个诚实将军的信息。不诚实的将军们会互相勾结。 在比特币中,他们甚至走的更远,进行贿赂和破解。他们将猎取你的雇员并且黑进承包商的电脑来获取你的服务器权限。他们将改变系统时钟,攻击路由,使用哈希碰撞,使用数以千计的僵尸网络来拥堵网络并且破解签名延展性。 一个安全的系统必须不仅保护每个已知的攻击,还要足够鲁棒性来进化并且在未来攻击中存活下来。比特币中的一些问题可以被修正,比如签名延展性。其他问题则是基础性的,并且不能被解决,除非定义一个全新的框架,比如对于工作量证明和矿工的依赖性。 Skycoin的安全哲学: ================== 安全性是一种针对威胁进行连续识别和加强的过程。一个良好的系统获得“深度防卫”,拥有多个冗余系统,并且能够在任何单一测度下的完全失效中存活下来。 良好的安全性不仅来自保护来自每个可能的不可预测的威胁的悖论,并且依赖于了解哪些威胁是切实存在的,哪些是仅仅是干扰性的。 良好安全性具有乘数效应。需要花费攻击者10美元才能窃取的一美元才是安全的一美元。 没有一个单一的系统能够获得比特币后继者需要的所有目标。Skycoin采用一个模块化层级的方式,并且使用不同的系统来加强特定的要求。Skycoin被设计为一个具有多层交迭防御的要塞。 Skycoin安全性重点在于保护所有比特币已知的威胁,并且之后每天使用该系统的用户遇到的威胁。Skycoin安全性试图对于可能造成用户,股份持有者和机构,最大损失的攻击类别给予最高界别的保护。这要求对于比特币的完全重新设计,包括钱包生成到区块共识。它需要具有一定视野,这也是我们一直在努力获得的,并且要求在很多领域实现基础性的创新。 比特币中的大多数损失来自于设计中的疏忽,缺乏可用性,以及发生在终端用户而不是对于软件或者数学的基础性技术攻击。一个用户备份了它的钱包,进行了一些交易,并且重新格式化了他的电脑。他认为他的币是安全的,因为他有一个钱包备份 (不同于他因忘记备份而丢失数以千计美金的愚蠢朋友)。 他加载了钱包,同时他一半的币丢失了。比特币对每一个交易生成新的地址并且作为找零发送币到这些地址,但是新的地址并不在钱包备份中,因为在进行备份时他们还并没有被生成。 Skycoin必须同时解决若隐若现的现有的数学威胁,同时解决对日常用户来说,比特币不完善和考虑不周的用户体验造成的安全风险。比较差的可用性和设计迫使用户对安全性妥协,并且甚至让拥有百万美元的重要用户依赖于不安全的在线钱包。尽管每天媒体都有报道频繁和大额的丢失,到今天为止,更多的比特币由于可用性问题丢失,而非偷窃比特币的犯罪行为导致。 全部现存比特币中超过半数的在它们的初始地址上从未移动过,并且将永远不会。他们仅仅是简单的被丢失了。不可恢复的钱包文件,丢失的钱包,对于文件中真正备份的是什么的误解。MtGox近期报告说在一个他们不知道有比特币的钱包中“发现”了二十万比特币。钱包被忽略,并且因为软件由于钱包“太老”而不能加载钱包文件,认为里面没币而被很轻易的删除 (在很多人身上发生过) 。 大多数的安全问题是在于那个层级上。他们是关于可用性,终端用户以及交易安全性。本文余下的部分包含了一些我们创造的新技术来解决网络层级的安全性,并且保护Skycoin的区块链。 我们已经数学意义上证明我们的系统可以获得共识,拥有我们想要的安全性,并且在正常网络状态下工作正常。我们现有的一些数据结构从未在任何虚拟币或者软件中被见到过。现在我们正在进行可供部署的原型系统开发。Skycoin开发流程是迭代性的。随着我们处理一些细节,解决已知问题,测试系统并获得反馈,将会有一些改动,改进以及重新调整。 公开广播频道:个人区块链 ================== 在对抗拜占庭将军问题中,有如下通信假设 - 消息可能乱序到达 - 消息可能不到达 - 不诚实将军们可能对于不同人说不同的事情 - 不诚实将军们可能撒谎 - 不诚实将军们可能伪造其它将军的签名 - 不诚实将军们可能拦截并修改来自其他将军的消息 我们引入一种称之为公开广播频道的新的加密原语并且描述了它的实现。这个原语具有如下属性: - 你不能对A说一件事情,对B说另外一件事情 - 通信是公开的 - 通信不能来自除你之外的其他人(认证过的) - 一旦发布,不能轻易的取消发布 - 你不能回溯一次通信而不被检测到 (链接的时间戳/哈希链) - 消息顺序到达 - 消息在传输中不能被修改 公开广播频道被实现成一个区块链。每一个人可以读取链,但是仅仅拥有者可以对它挖块。为了成为合法的个人链,每个区块必须用拥有者的私钥进行签名。 每个Obelisk节点具有一个个人区块链,并且它是Obelisk系统的核心部分。 公开广播频道强加了几个约束: - 一旦发布一个区块,它不能被取消发布 (区块被点对点的复制到所有订阅者。一旦一个区块已经被发布,它将扩散到所有订阅者。你必须销毁所有已经接收到区块的节点来从网络上擦除它)。 - 一个节点不能发布一个之前区块的不同版本而不被检测到 (区块被编号并且如果节点使用同一个序列号签名了两个不同的区块将被检测到) - 在不延迟区块发布情况下,一个节点对于接收到的区块不能回溯时间戳 (时间戳仅仅增长,时间戳随着区块序列号单调增加) - 链中的一个区块不能在不报废之后区块情况下被修改 (哈希链,每个区块头部包含之前区块的哈希) Obelisk: ================== 每个Obelish节点(Skycoin共识节点)拥有一个公钥(一个标识)和一个个人区块链(一个公开广播频道)。共识决定和通信发生在每个Obelisk节点的个人区块链内。这是一个该节点所有事情的公开记录。这让社区可以审计节点是否欺诈和勾结。它给予了社区一种方法识别正在参与网络上攻击的节点并且公开了网络如何进行决定,并且哪些节点正在影响那些决定。 每个节点具有一个它所订阅节点的列表。具有更多订阅者的节点可以更加被信任并且在网络中产生更大影响。如果社区不相信代表它们的节点,或者感觉网络内的权利太过于集中(或者集中程度不够),社区能够通过集体的改变他们网络内的信任关系来集体移动网络内权利的平衡。 节点订阅关系可以是随机的,并且/或者通过信任网络形成(订阅你知道的人以及社区内你信任的人的节点)。 当一个节点从一个它订阅的链接收到一个新的区块,它发布区块所发布的哈希值。这是一种对接收到区块的公开确认。每个区块加上时间戳并且计数器引用了来自其他链的区块。这创造了一个密集的区块互认的互联链。这些链建立因果关系并且可以作为一种如下节所述的分布式的时间戳系统。这使网络可以证明数据并没有存在,或者没被发布到网络过,或者证明那个特定节点在某一个特定时间间隔内曾经活跃过或者离线过。 当前的Obelisk共识算法基于Ben-Or's随机化共识算法。 一个在随机图中的Sybil攻击(最坏情况下)使得Sybil节点可以控制共识,但是节点不能撤销交易,从而移除了攻击网络的唯一的经济上的激励。在现实世界的图中,网络的Sybil抵抗能力实际上是非常高的,并且运行一个节点在带宽上成本是比较高的,这防止了大的僵尸网络出现。 信任关系是稀缺的,并且可以被撤销。在发生攻击事件时,网络通过断绝到可信度低的节点的链接,并且缩小到一个较小的信任节点核心来进行反应。每个节点的个人区块链留下的公开记录使它非常容易来确认参与攻击的节点。随着攻击节点被识别出来,每个人可以限制和这些节点的关系来降低他们的影响。 - Skycoin共识是民主的,并且节点由社区来运行 - Skycoin节点共识是公开的 - 每个节点对于社区和第三方审计是可问责的 - Skycoin共识系统内的影响是民主和透明的 (但是不平等) 简单的二进制共识算法:在两个区块内选择 ================== 每个投票决定是一个哈希对(A,B)。A是父区块的哈希,同时B是区块的哈希。 每个节点对它认为应该是共识区块的下一个区块投票。如果它所订阅的40%的节点具有同样的共识候选人,节点改变它的共识到那个区块。节点在候选人间随机跳转直到达成共识。 多个并发分支选择的共识: ================== 一个更高级的系统发布(A,B,P),其中P是从0到1的值。block的所有后继者的P值之和为1。这可以实现多个链分支上的并发共识判决。 如果网络内绝大多数节点是诚实的,他们也将收敛到同一个共识。 Skycoin同时具有一定形式的股份证明。我们投票偏向于具有更大交易费用的区块。 如果对于给定的父区块和包含你的交易的区块只有两个可能的共识选项,无论两个区块中的哪个被网络选择,交易将被有效执行。 撤销一个早期共识决定的概率随着区块深度指数衰减。 共识的高级课题 ================== 通过构造网络链接邻接矩阵,我们可以计算测量每个节点影响度的特征值中心量度。我们可以把图聚类并且找到有影响力的子集群节点,然后从子集群中的节点采样从而决定全局共识是否已经达到。 算法的有效性随着每一轮中网络必须从中进行选择的区块数目递减。我们可能使用工作量证明,没有奖励并且难度重新调整控制引入新的候选区块速率。 如果我们可以保证每个判决周期内单一区块,共识会变的很琐细。我们可以在每一个共识周期内引入总体排序,并且只保留顶部区块。举例:在上个区块之后15秒内发布的具有最高转账费用的区块。没有办法完成一个精确的,公平的,每个人都同意的分布式时间戳,但是任何构建总体排序的方式都能工作。 另外一种方法使用一个“公平”的区块彩票方式来选择将挖掘下一个区块的节点。它必须利用图结构来使得受信任的人而非sybil攻击节点获得区块开采权利。如果你有全局图并且为每个节点复制所有链,它是非常容易构建的,但是仅仅利用每个节点的本地信息则将非常困难。 在另外一种框架中,你使用公式来投票成立一个节点委员会来挖掘区块。挖掘下一个区块的权利在一个选举出来的节点列表中循环传递。一旦系统运行起来,你可以尝试不同的方法。节点可以被编程来自动通信和回应。用户可以更新他们节点的程序来把懒人从选举出来的区块矿工委员会中自动剔除。如果足够多的节点添加了那个脚本,它就变成一个强制执行规则。 个人区块链表现为可编程行为的投票。每个人可以添加脚本到他们的节点来检测恶意节点并且和它们断绝联系。网络可以本地化的对攻击获得免疫,通过每个用户选择在他们节点上运行的脚本的行为,而不是采用来自开发者的中心化分发。 我们对于理解个人区块链存在的可能性的理解还处于初级阶段。 攻击类型: ================== 有四种类型的攻击方式: - 区块共识的判决被主导 (潜在的拒绝服务) - 撤销之前已经达到一致的共识(双花) - 延迟共识(拒绝服务) - 通过控制网络的视图来攻击单独节点 控制网络内绝大多数影响力的攻击者控制了网络的共识判决。然而,他们并不能轻易的双花或者51%攻击。一个控制了网络的攻击者可以对仅包含噪声而没有任何交易的区块投票。这种行为能轻易的被检测到(公开行为)并且如果他们变的有破坏性,可以轻易的被节点禁掉。 为了撤销共识,需要绝大多数节点变的恶意和勾结。恶意的大多数必须离线,允许整个网络来到到一个特定的共识,然后恢复和其它网络的通信。任意包含绝大多数攻击节点连接的节点将会成功带入一次51%攻击(原始形式)。尽管如此,如果攻击节点少于绝大多数,这种努力将会失败。 这是撤回交易的唯一方式。这是唯一的攻击并且非常容易被检测到。受信任的节点快速切断和攻击节点的联系。牵扯到攻击内的子图很有可能被密集的链接一起,并且不如紧密集成的子图一样大的影响网络。简单的拥有绝大多数节点并不足以撤销共识。一个攻击者必须控制了控制绝大多数稀缺节点和信任关系的节点。对于Sybil攻击机器人,聚合人类的信任网络具有一定难度。 在信任图网络中,影响力是和被社区信任的节点高度联系的,并且由Skycoin股权持有者控制。绝大多数受信任的社区成员和机构能从中获利,或者甚至组织起一次成功的绝大多数影响力攻击的可能性是非常低的。 即使Skycoin下的双花难度很大,仍有可能分别通过两种方法来完全防止攻击。第一个方法是严格限制投票判决的方式,来极大的增加节点间勾结的难度。第二种方式使用分布式时间采样来识别攻击节点。 攻击单独的比特币节点:比攻击网络更容易 ================== 每个比特币节点容易受到控制网络路由器的攻击者的控制。这种攻击可以插入重置数据包并且控制节点可以连接到谁。受害者节点可能被陷入双花攻击并且通过分叉单个节点的区块链来窃取币,而不用攻击整个比特币网络。随着比特币的价格上升,这些攻击变的可能性更大和更有利可图。 Skycoin引入了一种“共识预报”来保护银行和交易平台防范在特定节点上的目标攻击。Skycoin共识预报采用一个用户选定的信任节点的公钥列表并且根据列表进行验证。结果的不同会触发一个警告提示用户该行为的存在以及防范措施,比如在资金被窃前暂停交易平台提款。 采用分布式判决状态机通信的公开可验证的可信性计算: ================== 我们描述了一个系统,每个节点公开执行一种计算。该计算能被任何第三方验证和重复。这个系统由通过公开广播频道(私有区块链)进行通信的确定性状态机构成。 发布在区块链中的共识结果变为确定状态机的输出,它的输入为公开数据。我们要求,由一个节点在区块链中发布的输出,是一个由它所订阅节点区块数据的确定性函数。任何第三方可以下载一个节点的公开输入并且验证输出和由节点产生和发布的(区块)输出精确匹配。 这种方法被开发用于并受到关于对抗性Paxos的研究的深刻影响。我们将公开广播频道上的Paxos实现称为“Public Paxos”。 一个第三方审计可以产生一个数学证明,并能被第三方独立验证,不诚信节点欺诈证明。这类欺诈可以被禁掉并且导致信任关系的自动撤销。 这类系统的一个实际实现要求: - 一个状态机的实现或者定义良好的虚拟机 - 要求每个区块包含一个有信任关系节点的列表的哈希 - 要求正在运行状态机程序的哈希,决定了它的输出(产生区块) - 要求在反馈中发布从节点所获得区块的哈希 我们采用包含一些很少改变的固定信息的数据结构来增强个人数据链,包括状态机的订阅列表和程序源代码。节点发布它的订阅列表的哈希和每个区块中的虚拟机源代码,并且发布它的订阅列表和程序源代码。 举例: 节点A被节点B和C的私有链订阅。B挖出区块B1。A接收到B1。A发布一个区块,包含了B1的哈希来表示接收到数据。由A产生的区块A1是一个B1的确定性函数。C发布区块C1。A发布区块A1,在它的区块确认列表中包含了区块C1的哈希。A2产生,发布并签名区块A2,必须包含B1,C1的确定性函数。 备注: - 所有输入是公开的,并且对第三方可查的 (信息发布在一个公开的广播频道) - 每个节点产生的输出是公开输入的确定性函数 - 任何第三方都能下载同样数据,执行同样程序并且和节点自身生成同样的输出 - 用于产生输出的状态机的状态可能是由节点确认的最近1024区块的队列 概述: - 你有N个状态机 - 每个状态机通过一个公开广播频道通信 - 每个机器的状态是从其他状态机接收到信息的队列 - 每个被引用的状态机产生一个发布在机器公开广播频道的输出区块 - 输出区块包含接收到信息和数据的哈希 (收据) - 对于有限N,输出区块是最近N个区块接收到信息队列的一个确定性函数 在这个系统中,节点是高度受限的。节点唯一的回旋余地在于摆弄所确认消息的顺序。一个节点在不被检测到情况下可以参与的攻击类型是严格受限的。 关于分布式时间戳的想法: ================== 最简单的分布式时间戳服务是一个受信任的具有已知公钥和一个精确时钟的中心服务器。服务器接到到哈希并且用它的私钥对哈希产生一个签过名的时间戳。如果服务器可以被信任,签名时间戳能被用来证明数据在某一个特定时间存在过。 精确的,可信任的数字时间戳有很多应用。它们能被用来决定一个节点在某个时间是否在线,他们可以用来检测和消除那些要求先扣留数据一段时间,然后再突然公布数据到网络的特定类型的攻击 (比如比特币51%攻击) 并且能被用来建立区块的总体排序。 比如,使用一个可靠的时间戳服务器的分布式区块共识是很琐细的。规则“接受在上个区块之后15秒内产生的具有最高手续费的区块”可以获得区块共识。这个规则唯一的确定了一个唯一的后继区块。事实上,如果一个精确的并且诚实的时间戳服务存在的话,那么这个简单的规则可以不使用挖矿和在非常低操作成本下产生一次51%网络攻击。 原始的Obelish设计是基于构建一个分布式时间戳,但是仅仅在完全连通图中才能工作。仅仅使用对每个节点可用的本地信息,没有分布式时间戳系统能实现可被证明的在网络中所有节点中发生事件的总体排序的共识。每个节点仅仅看到网络的一个子集。比较小数目服务器的完全连通情况是每个节点都有“全局”视野并和其它节点最终到达相同数据和共识的一个特殊情况。公开广播频道和完全连通图让拜占庭将军问题相当琐细。 由于从每个节点可用的本地信息不能实现时间戳共识和完全的时间总体排序,对非病态的拓扑结构图,随机化共识可以从本地信息提供可被证明的全局共识。尽管如此,我们之前能提供一个稍弱一点的结果,使得节点推导出网络中事件的上界和下界(一个时间区间)。这些边界对网络中每个节点或者节点子集是本地化的,并且对于检测和防止某些类型的Sybil攻击非常有用。 分布式时间戳: ================== 我们展示了你能如何使用Obelisk公开广播频道,时间戳区块和区块确认收据来创建一个分布式时间戳授权。 我们想要创建一个系统,它允许我们高确定性的证明 - 一个区块的发布时间 - 证明一个节点曾经在网络上活跃和通信 - 证明数据存在过并且在某一个特定时间段发布 - 证明数据在某个时间不存在,或者它并没有被公开发布过 拥有这些信息使我们可以构建欺诈节点的检测系统。我们希望以很高概率确认一个特定节点正在选择性的拒绝消息,创建不正确的时间,属于一个勾结的网络子图,或者是不可靠和不值得信任的。 每个节点被其他节点列表的区块链所订阅。每几秒钟,每个节点发布一个新的区块。每个区块加上时间戳并且包含一个节点自从它发布上个区块后已经接收到的区块哈希(收据)列表。每个发布的区块通过发布节点的私钥进行加密签名。 每个节点一直持续发布时间戳区块并且发布由其他节点发布区块的收据。这形成了一个密集的,互连的时间戳,收据和计数器收据的网孔,并且使得它很难被恶意节点回溯事件而不被检测到。 公开广播频道强加了几个约束: - 一旦发布一个区块,它不能被取消发布 (区块被点对点的复制到所有订阅者。一旦一个区块已经被发布,它将扩展到所有订阅者。你必须销毁所有已经接收到区块的节点来从网络上擦除它)。 - 一个节点不能发布一个之前区块的不同版本而不被检测到 (区块被编号并且如果节点使用同一个序列号签名了两个不同的区块将被检测到) - 在不延迟区块发布情况下,一个节点对于接收到的区块不能回溯时间戳 (时间戳仅仅增长,时间戳随着区块序列号单调增加) - 链中的一个区块不能在不报废之后区块情况下被修改 (链接的时间链,每个区块头部包含之前区块的哈希) 情况: A发布了一个区块。B发布了一个带有A发布区块收据的区块。然后A发布了一个带有B区块收据的新的区块。 节点A被节点B订阅。节点B被节点A订阅。 举例: 节点A发布带有时间T1的区块A1 节点B接收到区块A1 节点B发布带有时间T2的区块B2。B1包含区块A1的哈希。 节点A接收到区块B2。 节点A发布带有时间T3的区块A3。A3包含区块B2的哈希。 这称之为“2-cycle”。如果A信任它们自己并且相信它们的时钟是诚实的,那么A知道区块B2存在过并且在时间T1和T2之间发布。 如果B2在T1之前发布,那么B2不能包含A1的哈希,因为A1在那时还不存在。靠运气猜中哈希的概率是1比2^256。 如果B2在T3之后发布,那么A3不能包含B2哈希,因为A3不能包含在A3被创建时还不存在的一个区块的哈希。 因此B2必须在A1被发布之后被产生并且在A3被发布之前。因此如果节点A的时钟是精确和诚实的,B2在时间T1和T3之间被创造和发布。 因此,这种构造让我们可以依据节点A的时钟来确定性的证明事件在某个时间间隔内发生。在收据图中有更高的cycles,3-cycles,4-cycles等等。这建立了一种通过计算时间间隔的分布式时间戳系统。
你可以证明,如果一个区块X1在时间T发布,一个cycle起始于一个诚实的节点并且在时间T2终止于同一个诚实节点T2,T 有一些节点是诚实的,并且不撒谎。有些节点试图对时间戳以及消息接收到的顺序撒谎。如在不诚实节点间有一个cycle,时间戳可能是任何值,取决于公开广播频道的约束。尽管如此,如果cycle的接收者包含至少一个诚实节点,那么它就会给时间戳放置一个约束。 假设我们有一个cycle的接收者,A->B,B->C,我们称这两个cycles“互连”。接收者之间的cycles在诚实节点子图内宽广的互连。多个互联的时间戳和收据形成了一个密集的互联网孔。如果你说在时间3存在什么事情,但是直到时间8之前并没有将它发布到网络,网络中的所有诚实节点对你宣布那件事情的区块有时间戳,时间大约等于8。仅仅撒谎和欺诈的子图上的节点才会有更低的时间戳。 收据Cycles对于一个给定节点的时钟建立了一个公平的事件的总体排序: 为了证明一个区块在时间5之前存在,我们可以找到一个通过哈希互相引用的区块序列,X1 -> Y1 -> Z1 -> X2。如果区块X2由一个时钟精确的受信任/诚实的节点发布,区块X2上的时间戳上确界了Z1发布到网络的时间,即使我们不相信发布区块Y的节点或者发布Z的节点。 选择一个节点X。我们希望根据X建立一个区块的时间排序。我们枚举所有起源于X的cycles(假设一个loop的cycles,起始于X并且终止与X,并且不多次经过X)。每个区块将被包含在一个或多个起始并终结于X的cycles中。对于一个特定cycle,我们说根据X一个区块的时间是终结cycle的由X产生的收据的时间。对于每一个事件,我们选择具有最低终结时间戳的cycle,对于每个cycle则是包含该事件的最低。 所以如果我们有cycles X1 (t=1) -> Y1 -> X2 (t=3) (cycle起始于区块X1,终结于区块 X2, x1时间戳是1, x2时间戳是3) X1 (t=1) -> Y1 -> Z1 -> X3 (t=5) 其中, - Y被X订阅 - X被Y订阅 - Z被Y订阅 - X被Z订阅 我们有cycles X->Y->X and X->Y->Z->X. X产生区块X1,时间戳t=1。在区块Y中有区块X1的哈希,以证明Y接收到该区块。 X发布X2包含接收到Y1的收据(其中包含X1的收据) Z发布Z1包含Y1的收据 X发布X3(时间戳t=5)包含Z1收据 在本例中区块Y1被包含在X的两个cycles中。如果我们信任X的时钟,那么我们知道Y1曾经在t=3之前存在和被发布 (我们选择两个cycles中较低的)。如果Y1是区块Y0的后继,那么我们可以降低Y1发布的时间到X确认Y0的区块时间. 对于可以通过起始于X的收据链到达的任意区块,这产生了一个时间的上确界和下确界。对于一个well conditioned图,这将近似包含所有区块。对于区块发布时间的上确界,我们选择任意cycle终结时间的最小值。对于下确界,我们选择前置区块cycle终结时间的最大值。 我们可以泛化“依据节点X的时间”这种表示方法到网络中一个受信任节点的子图。我们选择网络的一个子集。我们假定网络内的节点有同步时钟并且精确报告时间。我们允许一个“cycle”起始于子图中的任意节点并且终结于子图中的任意节点。 如果节点每十五秒或者每分钟发布区块,我们能有信心把一个时间的时间间隔限定在一个合理大小的时间间隔内。我们可以展示事情在一个给定时间要么没有存在,或者没有发布到网络内causally可访问的部分。 在一个N个节点的随机图中,每个节点的区块时间是一个常数k(比如说15秒),假定仅有一个受信任节点,一个随机事件能够可靠的被解析的时间间隔,具有一个增长的上确界k*log(N)。 消除51%攻击的方法: ================== 分布式时间戳系统甚至能够被用来防止绝大多数节点进行的51%攻击,仅仅通过拒绝和断绝和已从网络断开的节点的关系,并且保证在宣称的时间,对于之前被证明过不可被发布到网络的区块,重新出现可被证明的回溯共识决定。 类似的,对于剩余连接到的网络,不需要正当理由,节点能变得自动不受信任并且自发决定尝试撤销之前建立的共识。 在比特币经典的51%攻击中,一个具有绝大多数算力的矿工分叉了区块链,并且秘而不宣。矿工秘密的超过网络并且突然发布他自己更长的链。网络立即切换到攻击者更长的网络上。交易被撤销并且币可能会已经被从交易平台窃取。 邪恶矿工充值比特币到一个交易平台,买了莱特币,提取莱特币并使用51%攻击来撤销充值交易以重新获取他的比特币并且同时保留了莱特比。之后当盗窃事件在媒体发布后,他使用莱特币来便宜买回比特币。矿工甚至可以买空比特币来进一步扩大他的收益。邪恶矿工同时决定来抢劫一个银行,通过存入比特币,提取比特币并且然后撤销充值交易。他现在同时有了提取的币以及他从未充值的币,只要银行没有采取极其困难的安全措施。 在Skycoin中,分布式时间戳系统允许每个节点来本地化的决定之前一个节点是否在51%攻击尝试中通过对网络隐藏信息然后突然发布。每个节点本地评估信息然后选择是否忽略潜在恶意节点的影响。通过这种方式,在随机图中一次成功的攻击要求超过80%到90%的有影响力的网络节点,而不仅仅是大多数。诚实的节点可以简单的检测和忽略51%攻击尝试。 假设每个节点由独立的但是不可靠的oracle通知决定全局共识(每个节点采样一个网络独立随机子图的共识),在几个确认后我们可以使进行一次成功攻击的概率任意接近于0。这种方法结合了本地信息和全局网络状态的独立随机采样。本地状态被用来判定和协商共识,并且采样全局网络的子图来概率意义上判决全局网络共识是否已经达到并且检测网络分叉。 区块中对于全局共识的概率知识可以用来决定对较早区块的分叉尝试是否应该被接受。在原始方法中,如果订阅的绝大多数节点投票赞成对较早区块的分叉,节点将接受这个分叉。 通过全局共识oracle,对分叉的投票被下面的观点所加权,刻意的改变是一个合法过程的结果,指通过网络中哪些节点达成一致(网络仍然到达了全局共识),或者是否一致性在很长时间之前已经无争议的达成,并且这仅仅是一次试图撤销之前共识(如果在活跃节点间全局共识已经无争议之后,这将是不正确的)的攻击尝试。 另外一种可能的方式可使用一种Ben Or随机化共识的混合系统,它基于信任网络来投票受信任主节点委员会从而形成了一个完全互连的公开的Quorum,用来决定区块共识。 我们正在研究几种不同的方式。Skycoin共识将随着我们开发更好的算法和软件框架而改变。 |