tag 标签: 区块链技术

相关博文
  • 2022-9-15 17:16
    3 次阅读|
    0 个评论
    区块链被认为是继蒸汽机、电力、互联网之后的第四类最有潜力的颠覆性变革技术,一直受社会各界广泛关注,最开始广为关注的是在金融的数字 coin 领域。 区块链的核心优势在于它在共享信息的同时,也在各个利益方之间建立了信任,共享的信息被加密为块的电子列表,不能被篡改,有助于增加用户之间的信任。一旦记录了信息,就不能在不更改所有记录的情况下进行更改,这也为用户之间的安全交 Y 提供了保障。 在当前的数字信息化时代中,许多产业开始用到了数字技术,甚至是传统工业也离不开数字化转型。区块链技术能做到安全有效的处理海量数据,区块链系统开√发技术搭√建源码;同时在区块链网络中,各部门之间、企业之间的数据是可以被共享的,加密且秒级同步,这样能够大大的提高供应链的效益。 很多企业在不断探索关于区块链技术应用场景和商业模式。区块链技术是相对高端的、复杂的,如果想要开 √发一个区块链系统,没有开发经验是很难驾驭的,可以去找专 / 业的 提供更好区块链系统搭建服务 / 公 / 司。 区块链技术,作为一门渗透性极强的底层应用技术,现已在跨境金融、税务管理、供应链管理、司法仲裁、社会治理等经济社会场景中得到了快速的应用与传播。
  • 2022-2-8 15:55
    0 个评论
    NFT 的全称是 Non-fungible-token ,即非同质化 token ,对应的是 FT( 同质化 token ,比如 BTC 。非同质化 token 是指有唯一标识的、不可互换的 token ,而且是不可拆分的。 He~fei 元宇宙 NFT 商城 | 艾数 | 定制。 何为 NFT 商城? NFT 商城就是将 NFT 交易模式与传统零售模式相结合的全新零售模式,让更多的产品能够与区块链技术、 NFT 相结合,打造全新的销售平台。 NFT 商城买卖过程记录在链上,不可更改,全程留痕,可追溯。买卖中无需实名,保证了用户的隐私性。 NFT 商城可以卖什么? 万物皆可 NFT ! 游戏、票务等等都是它的应用范围。游戏中的道具、现实世界的房屋等实体资产、金融发票、一幅画、一张照片、一段音乐、一张门票等等,都可以用 NFT 来标记,并在商城中售卖。 我们的优势 独特的 NFT+ 盲盒售卖模式能够吸引更多的用户; 简单的 NFT 铸造方式让创作者也能够在商城内自行铸造 NFT 作品; 买卖结合,用户购买的 NFT 可以在平台内一键转卖; 登录签名,保证用户资产安全; 页面简洁,操作简单。 现在,很多大厂都在推出自己的 NFT 商品, NFT 商品一经推出就大卖,甚至“上线即售空”, NFT 正在成为一种火爆的新销售形势。区块链 NFT 商城紧随潮流,把握当下的好时机,搭建 NFT 商城!
  • 热度 2
    2019-12-11 17:34
    2731 次阅读|
    1 个评论
    本文分析了Docker最新发布的软件“Notary”,该软件集成了Docker Content Trust (DCT)功能。我们研究了两个领域:1)DCT如何是一个可行的解决方案,2)DCT中的威胁。提出了一种基于区块链的分布式Docker信任(DDT)系统的Notary解决方案。Docker是一项新技术,目前仍在快速发展,最新的文献通常以在线文章的形式出现。据我们所知,本文是第一个提出Docker图像分布式内容信任的研究。与会议版本相比,本文提出了分布式Docker信任(DDT)的概念验证系统原型,并在多个数据中心的Amazon Web Services (AWS)上对其进行了实证评估 在物联网设备中可以部署Docker容器,因为它的运行时开销几乎为零。默认Docker安装不会验证图像的真实性。要让用户相信图像没有被恶意篡改,身份验证至关重要。Docker目前是开发人员的热门选择,因此加强其安全性是系统管理员和DevOps工程师的首要工作。Docker最近部署了Notary作为一种解决方案来验证图像的真实性。Notary是一个可行的解决方案,但也存在一些潜在的威胁。本文针对其易受DoS攻击的弱点,提出了一种基于区块链的分布式Docker信任(DDT)解决方案。该解决方案大大降低了DoS的风险,同时为Docker图像提供了签名验证服务。通过性能评估,验证了所提出的基于区块链的解决方案的可扩展性和效率。同时,还实现了分布式Docker 信任(DDT)的系统原型,并在多个数据中心的Amazon Web Services (AWS)上对其进行了性能评估。 34.3 技术介绍 Docker是一种新兴的容器技术,其目标是提供一种解决方案,在称为容器的自包含环境中自动部署应用程序和依赖项。它是一个轻量级应用程序,允许快速部署容器。容器彼此隔离,并提供单独的网络接口。隔离提供了一个类似于虚拟机(VM)的解决方案,但是没有在主机操作系统之上运行客户操作系统(OS)的开销。Docker通过与主机操作系统共享内核来实现最小的开销,这与在管理程序上运行客户操作系统内核的VM不同。Docker容器是运行多媒体应用程序的有效工具,它比虚拟机更好地运行多媒体应用程序。Docker容器对于构建多媒体云至关重要。容器化是通过Linux内核名称空间和控制组实现的,允许进程被隔离,资源被限制,开销可以忽略不计。在容器中运行的进程被认为是在一个单独的操作系统中运行,而不是在主机上运行,主机有自己分配的资源,比如CPU和内存。 当Docker提取签名图像时,它会与Notary服务器进行检查,以确保图像的完整性并验证图像的发布者。如果无法验证这些,Docker命令将产生硬故障。但是,需要注意的是,默认情况下,DCT在第一次使用时采用信任。因此,如果用户第一次提取图像,并对其进行了篡改,并指向另一个根元数据,该命令仍然会成功。当攻击者不能篡改文件时,可能尝试的另一种攻击是发送一个以前有效的有效负载,以欺骗客户端不更新到最新的映像,该映像有针对已知漏洞的补丁。同样,也可能尝试将映像降级到包含漏洞的旧版本。 在Notary实现中,Notary服务器负责对每次生成的时间戳元数据文件进行签名。当提取Docker映像时,需要验证文件的完整性。时间戳元数据包含一个表示元数据有效性的expires字段。因此,攻击者无法重播以前的有效负载,因为数据新鲜度也是在数据文件完整性的基础上验证的。尽管可以进行键旋转,但它是一种机制,用于在服务器受到攻击而不是受到保护的情况下从攻击中恢复。如果服务器受到威胁,现有用户将受到保护,如果他们已经在本地拥有公钥,而新用户试图建立到服务器的连接将成功连接,假设用户在第一次使用时没有关闭trust,认为它是可信的。成功攻击和恢复之间的窗口仍然可能导致大量用户盲目信任和接受攻击者的流氓密钥和元数据。一个适当协调的有针对性的攻击仍然可能是致命的。 原型实现需要安装并运行比特币软件,DDT才能正常运行。比特币区块链提供了一个RPC(远程过程调用)API,允许其他软件与它通信。例如,软件可以查询块或事务细节。不幸的是,当网络接收到一个新块时,RPC API不会执行实时通知,这对解决方案的实现至关重要。此外,与访问原始块文件相比,使用RPC API要慢一些。基于这些原因,我们构建了一个简单的块解析器供Carbonchain组件使用。在block文件中,通过扫描比特币区块链中的MagicId字段,可以找到block的开始。然后,通过研究比特币的源代码,解析器可以解析以下数据结构。 区块链解析器还公开了一些比特币区块链RPC接口。库中只包含了基本的RPC命令。原型只使用将事务发送到比特币区块链所需的RPC命令。区块链解析器还可以读取由比特币软件创建的LevelDB1数据库。该功能在第一个原型迭代中使用,但后来发现并不有用,因为读取的数据已经过期,因为只有当比特币区块链退出时,数据库才由比特币软件更新。为了弥补这一点,Carbonchain还负责维护一个功能类似于Bitcoin的LevelDB数据库的元数据数据库,以便有效地遍历块文件中的块。 Carbonchain主要负责完成以下任务:1)检测网络中添加的新块;2)记录块和事务在块文件中的位置(存入元数据数据库);3)对块体进行验证,并将其连接在一起形成链;4)检测链叉并解决(如果可能);5)提取OP返回数据(数据包),如果数据包在添加到块之前被拆分,则进行合并;6)将组装好的数据包提供给程序(即DDT)。此外,Carbonchain还提供了将数据格式化为数据包并将其存储在区块链上的方法。使用这个库,使用它的程序将不必直接与区块链接口。它抽象出区块链概念,只公开接收和使用组装包的方法。如果需要,程序仍然可以访问底层的区块链以及通过Carbonchain生成的元数据。整个过程如图34-1所示。 Carbonchain主要负责完成以下任务:1)检测网络中添加的新块;2)记录块和事务在块文件中的位置(存入元数据数据库);3)对块体进行验证,并将其连接在一起形成链;4)检测链叉并解决(如果可能);5)提取OP返回数据(数据包),如果数据包在添加到块之前被拆分,则进行合并;6)将组装好的数据包提供给程序(即DDT)。此外,Carbonchain还提供了将数据格式化为数据包并将其存储在区块链上的方法。使用这个库,使用它的程序将不必直接与区块链接口。它抽象出区块链概念,只公开接收和使用组装包的方法。如果需要,程序仍然可以访问底层的区块链以及通过Carbonchain生成的元数据。整个过程如图34-2所示。 Carbonchain的主要任务之一是不断地扫描到达的新区块。当块到达时,它将处理这些块。我们使用多个流程图来提高工作的质量。使用库时的主要流程如图34-3所示。该过程循环,直到用户退出程序。如果存在未处理的块,则在处理新块的步骤中处理这些块,包括1)扫描新块,2)读取块数据,3)保存到数据库中。 图34-1 区块链数据使用可视化 Carbonchain扫描块中的每个事务。然后,它记录下块的位置和引用块文件的每个事务,以便以后高效地查找。在这一步中,它还在OP返回脚本中查找用户可定义的前缀。这个前缀在库中称为包Id。如果找到了这个,并且校验和是有效的,这意味着在OP返回脚本中存储了一个包。它通过查看包Id来检查相关的负载。在包中,Id是包标识符。使用碳链库的程序需要指定这个Id,并确保它是惟一的。版本用于确定如何解析包。数据包的序列号从0开始。字段校验和是包中所有字段的CRC-64校验和,该字段设置为零字节。字段nextChecksum是下一个包的CRC-64校验和(如果没有下一个包,则设置为零字节)。字段数据是数据包的有效载荷。 当所有新块都被处理完后,Carbonchain将在存储到区块链之前被拆分的包组装成一个包,并将其缓存到其数据库中。然后,Carbonchain宣布这些新包对程序的可用性,然后程序可以对这些包做它想做的任何事情。Carbonchain不会从缓存中删除已组装好的数据包,而是让程序在使用时删除。需要注意的是,这些包是按照区块链中最后一个包的高度排序的。它确保以后以正确的顺序执行命令。包11在包34之后,因为它的底层事务属于区块链中较高位置的一个块。 基于TUF的分散实现具有防止单点故障和DoS攻击的优点。在某种程度上,它还消除了中央管理机构管理信任的需要,因此用户将不需要信任单个中央管理机构,而是将管理信任的任务留给分布式系统。分布式系统不仅可以用于验证Docker图像和任何其他数据类型。本文提出了一种基于区块链的分布式Docker信任模型。建议的解决方案包括基于区块链的分布式信任。该解决方案大大降低了DoS的风险,并为Docker图像提供了签名验证服务。通过大量的跟踪驱动仿真进行性能评估,实验结果表明了基于区块链的解决方案的可扩展性和效率。此外,还实现了分布式Docker信任(DDT)系统原型,并对其进行了性能评估。 图34-2 Carbonchain主要流程图 图34-3处理新块流程图
  • 热度 3
    2019-12-4 15:31
    2143 次阅读|
    2 个评论
    比特币已成为历史上最成功的加密货币。在20031年安静发布后的两年内,尽管只是粗略地分析了系统的设计,但比特币的经济价值仍高达数十亿美元。从那时起,越来越多的文献论证了该系统的属性,发现了对其的攻击行为,随后提出了有希望的替代方案,并指出了未来的困难挑战。与此同时,一个庞大而充满活力的开源社区提出并部署了大量修改和扩展。 我们提供了第一个系统的阐述,关于比特币和许多相关的加密货币或“Altcoins”。从零散的知识体系中,我们确定了比特币设计中可以解耦的三个关键组成部分。这使得对比特币特性和未来稳定性的分析更加深入。我们为许多提议的修改绘制了设计空间图,为其他共识机制、货币分配机制、计算难题和关键管理工具提供了比较分析。我们调查了比特币中的匿名问题,并提供了一个评估框架来分析各种增强隐私的建议。最后,我们提供了关于我们所称的非中介协议的新见解,它免除了在一组有趣的应用程序中对可信中介的需要。我们确定了三种普遍的非中介策略,并提供了详细的比较。 31.3 为什么比特币很值得研究 考虑一下关于稻草人形式的比特币的两种对立观点。第一个是,“比特币在实践中行得通,但在理论上行不通。”第二种观点是,比特币的稳定依赖于一种未知的社会经济因素组合,而这一组合难以用足够精确的模型进行建模,无法为比特币体系的健全提供令人信服的论据。 我们将说明这些简单观点的不足之处。首先,我们认为,尽管比特币迄今在实践中取得了令人惊讶的良好效果,但研究仍要确定为什么这是可能的。此外,要了解比特币是否仍将在实践中发挥作用。 对于第二种观点,我们认为,比特币正在填补一个重要的利基市场,它提供了一个虚拟货币系统,没有任何可信方,参与者之间也没有预先假定的身份。然而,在实践中,无论是在哲学上还是技术上,这些约束都很重要,比特币在这个模型中达成共识的方式令人深感意外,而且是一种根本性的贡献。简而言之,尽管比特币不容易建模,但它可能成为解决极其困难和重要问题的实际解决方案的基础,因此值得相当多的研究关注。 31.4 比特币的稳定性 A.交易有效性规则的稳定性 比特币生态系统的参与者是如何在交易有效性规则上达成共识的,目前还没有得到充分的分析。基本的哲学是这些规则是由Satoshi所定的,我们可以称之为规范主义。然而,规范主义无法完全解释比特币的当前规则,因为已经实现了添加新功能的更改。 在比特币内部,没有为更新交易验证规则指定流程。如果没有矿工之间的一致意见,任何变化都可能永久地分叉系统。因此,尽管人们普遍认为比特币是一个完全分散化的系统,但规则更改的需要意味着,要想在哪些区块链被视为比特币的问题上保持现实世界的共识,就必然需要某种程度的治理。目前,事实上的治理是由维护bitcoind的核心比特币开发者提供的,比特币基金会提供了一个基本的组织结构,并通过捐款筹集少量资金来支持开发团队。 B.共识协议的稳定性 假设对交易有效性规则达成共识,人们已经进行了各种尝试来描述区块链稳定的共识协议的特性。我们将各种分析提出的性质系统化为五个基本稳定性属性。 •最终达成共识。在任何时候,所有兼容节点都将同意将成为最终有效区块链的前缀。我们不能要求任何时刻最长的链完全是最终区块链的前缀,因为由于临时分叉,块可能被丢弃。 •指数收敛。深度为n的叉的概率为O()。这使用户高度放心,简单的“k确认”规则将确保他们的交易永久包含在高可信度中。 •活力。将继续增加新区块,并在合理的时间内将具有适当费用的有效交易包含在区块链中。 •正确性。最长链中的所有块只包含有效的事务。 •公平。在期望中,具有总计算能力的比例α的矿工将挖掘块的α比例(假设它们选择有效块)。 如果所有这些属性都成立,我们就可以说系统是稳定的,但不清楚是否都需要这些属性。 令人惊讶的是,实际货币并不需要正确性,因为参与者可以简单地忽略最长链中的任何无效交易。但是,正确性能够以SPV客户端的形式实现重要的性能优势,仅验证工作证明而非交易。 激励兼容性和博弈论。中本聪最初认为,只要所有矿工都遵循他们自己的经济激励措施,比特币就会保持稳定,这种财产称为激励兼容性。激励相容性从未在比特币或加密货币的背景下正式定义;它作为一个术语的流行可能源于其直观的吸引力和营销价值。在游戏理论术语中,如果普遍合规被证明是纳什均衡,那么这意味着比特币的激励兼容性,因为没有矿工会有任何单方面改变战略的动机。如果存在其他均衡,那么这意味着稳定性较弱的概念,如果普遍遵守是唯一的均衡,则意味着强稳定性。另一方面,如果非合规策略主导合规性,我们必须询问由此产生的策略均衡是否会导致共识协议的稳定性。 1)比特币计价效用的稳定性:我们讨论比特币稳定性的已知结果,假设矿工的目标纯粹是获得名义比特币。 简单的多数合规可能无法确保公平。一个有趣的不合规挖掘策略是临时阻止,其中矿工最初在找到它们之后保持密码。如果矿工发现自己在最长的公知链之前发现了两个区块,那么它可以有效地挖掘无对手,直到网络的其余部分赶上一个区块,此时可以发布保留的区块。 大多数合规性是完美信息的均衡。 Kroll等人分析了一个简化的模型,其中矿工拥有关于所有发现的块的完美信息(排除任何扣留)。在这个模型中,普遍服从是纳什均衡(虽然不是唯一的),这意味着比特币(弱)稳定。 多数遵守意味着趋同,共识和活跃。可以证明,大多数矿工表现得很顺从,一条最长的链条会迅速出现。如果大多数矿工遵循合规策略并且通信延迟与发现区块的预期时间相比较小,那么矿工最终会同意不断增长的交易历史前缀,无论如何不合规矿工的战略。这足以确保所有稳定性属性,除了公平性(由于潜在的临时扣留),所需的大多数的确切大小取决于网络和其他假设。 如果矿工可以勾结,稳定性是未知的。即使在没有多数矿工的情况下,较小的矿工也可能串通形成一个控制大部分采矿权的卡特尔,并模仿单一多数矿工可用的任何策略。 2)以外部计价效用的稳定性:实际上,矿工显然不仅仅对获得名义比特币感兴趣,而是获取现实世界的利润。对此进行建模需要为矿工开发效用函数,不仅包含他们赚取多少比特币,还包括他们如何有效地将比特币转换为实际价值或其他货币。由于三个相关因素,矿工的策略可能会影响他们将比特币计价的财富转换为实际价值的能力: 流动性限制。目前,以外币交易比特币的交易所通常流动性较低。因此,攻击者可能获得大量比特币,但无法将它们全部转换为外部值,或者只能以极低的汇率进行转换。 面对攻击时的汇率。一些不合规的策略,特别是那些以可见方式影响稳定性的策略,可能会破坏公众信心,从而在短期内削弱对比特币的需求。事实上,在实践中,人们发现汇率在系统面临技术故障时会下降。因此,在汇率能够做出反应之前,一个很快就能获得许多名义比特币但很可能会使汇率崩溃的策略可能难以兑现,特别是考虑到上述流动性限制。 以比特币计价的采矿业的长期股权回归。大多数大型矿业公司对维持比特币的汇率有额外的兴趣,因为他们在非流动性采矿硬件中拥有大量资金,如果汇率下降,它将失去价值。如果矿工期望他们将以低边际成本保持他们在未来的矿业份额,那么他们可能会避免采用比特币赚更多比特币的策略他们未来采矿奖励的预期价值。 不幸的是,汇率很难被纳入一个易于处理的博弈论模型,因为它本质上依赖于人类的判断和市场信心。更正式地对汇率和实际效用函数的影响进行建模是一个重大的开放问题。 3)除采矿收入外的其他激励措施的稳定性:至少分析了两种策略,对于效用并非纯粹来自采矿奖励的矿工来说,这两种策略可能是有利的。 金手指攻击。如果多数矿工的目标显然是破坏比特币的稳定性,从而破坏其作为货币的效用,他们可以很容易地做到这一点。例如,一个国家希望破坏比特币,以避免与本国货币的竞争,或者一个个人大量投资于一种竞争货币,可能会有动机尝试这样的攻击。在这些攻击中,比特币矿工成功地发起了针对采矿能力较低的新竞争货币的深度分支攻击。如果成熟的期货市场出现,矿工可以在比特币汇率上做空大量头寸,那么“金手指”式的攻击可能会直接获利。 羽毛分叉。 Miller提出了羽毛分叉策略,其中矿工试图通过公开承诺,如果列入链中包含列入黑名单的交易来审查交易黑名单,则攻击者将通过忽略包含目标交易的块,来进行报复并试图分叉区块链。攻击者的分叉将继续,直到它要么超过主分支并获胜,要么落后于k块,此时攻击者将承认目标交易的发布。 α<50%的采矿能力的攻击者将会在预期中赔钱,但会以正概率成功阻止黑名单交易。 但是,如果攻击者能够令人信服地表明他们认真对待报复性分叉,那么其他矿工将被激励避开目标交易,因为如果攻击者进行报复,他们也会失去预期。因此,只要所有其他矿工认为攻击者如果经过测试就会执行代价高昂的羽毛式报复,攻击者就可以执行他们的黑名单而无需实际成本。 C.采矿池的稳定性 采矿池依赖于参与者在发现有效区块时提交有效区块,并且易于向参与者提交部分股票以换取补偿,但扣留有效区块以降低池的盈利能力。虽然这种攻击早已为人所知,但看起来具有自我破坏性,因为除了降低池中其他成员的收入外,还降低了自己的收入。然而,已经证明大型采矿者(或池)实际上可以通过提交部分股份,但保留有效块,利用其采矿能力渗透到另一个池中,从而获利。好处是,用于渗透的能力不会增加采矿难题的难度(因为区块没有公布),但仍然可以赚取利润。这种策略对于大型采矿池是有利的,它跨越了攻击者和渗透池的一系列采掘能力。 D.对等层的稳定性 几乎所有比特币分析都假设对等层按照规定运行,并且一般来说,大多数参与者将在合理的时间范围内学习几乎所有可用的协议状态信息。但是,Babaioff等人证明了点对点层的信息传播并不总是相容的。目前尚不清楚参与者是否将来自对等网络的足够价值作为一种公共产品来内化,以证明传播信息的机会成本是合理的,或者在外部观察到的信息传播平衡是不稳定的,并最终可能会崩溃。 31.5 客户端安全 A.简化支付验证(SPV)安全性 尽管参考比特币客户端维护整个区块链的有效副本,但这将给移动设备带来难以承受的负担。一个简单的观察引出了一个轻量级的替代方案:假设大多数节点只在有效链上开采,那么客户机只需要验证工作证明,并且相信最长链只包含有效的交易。这样的SPV证明使不受信任的节点能够有效地向轻量级客户机证明交易已包含在商定的历史记录中。 SPV是在BitcoinJ库中实现的,它位于大多数移动比特币客户端之下。SPV验证需要处理不断增长的工作证明解决方案链,尽管可以进行优化,比如从硬编码检查点开始。SPV还带有隐私保护措施,因为它要求向第三方披露客户感兴趣的地址集。 B.密钥管理 比特币依靠公钥加密技术进行用户自动识别,而如今几乎所有其他形式的在线商务都依赖密码或机密信用卡信息。比特币软件的开发人员尝试了多种方法来解决密钥存储和管理方面的长期可用性问题。 存储在设备上的密钥。将密钥池直接存储在磁盘上是最简单的模型,但是密钥可能被专门设计的恶意软件窃取。 分离控制。为了避免单点故障并提高安全性,可以使用k-of-n多签名脚本存储比特币,该脚本指定n个公钥。要赎回脚本,必须从这n个键中提供k个有效签名。 有密码保护的钱包。比特币客户端可能允许使用来自用户选择密码的密钥对存储的密钥池文件(称为钱包)进行加密。 密码衍生的钱包。密钥池可以确定地从单个用户选择的秘密派生而来,如果秘密被提交到内存中,则允许跨设备使用。 离线存储。钱包离线存储在被动式便携媒体中,如纸张或USB的 u盘,增强了防盗功能,免受基于恶意软件的威胁,并提供了一种熟悉的心理安全模型。但是,必须在密钥池耗尽时更新它们。 气隙和硬件存储。气隙存储是离线存储的一种特殊情况,持有密钥的设备可以执行计算,比如为其持有的密钥签署事务。有气隙的设备可以防止某些类型的盗窃,因为它从不将钥匙直接暴露给联网设备 托管的钱包。第三方web服务通过标准的web身份验证机制(如密码或双因素身份验证)提供密钥存储、管理和事务功能。这提供了最接近传统网上银行的体验,但它需要信任主机。 31.6 比特币的改进 A.升级比特币本身 我们可以从以下几个层面来区分变化: •硬分叉。如果协议更改启用了事务或块,则需要硬分叉,而这些事务或块在前面的规则下是无效的,例如增加块奖励、更改固定块大小限制或添加新的操作码。如果矿机更新到新协议,它们可能会生成被其他节点拒绝的块,从而导致永久(因此是“硬”)分叉。因此,涉及硬分叉的变更需要在实践中几乎取得一致。 •软分叉。与硬分叉相反,软分叉更改是与现有客户机向后兼容的更改;通常,这涉及到哪些块或事务被认为是有效的限制。这样的改变只需要大多数矿工的支持就可以升级,因为老客户将继续认为他们的区块是有效的。不升级的矿机可能会生成其他网络认为无效和忽略的块,从而浪费计算工作,但它总是会重新加入大多数矿机找到的最长的链。 •转发策略更新。节点在它们将要传递的内容中实施了比它们实际接受的有效内容更严格的策略。更改此策略或者通信网络的其他方面需要最少的协调,因为通常可以采用向后兼容的方式,并使用节点发布其协议版本号。 B.Altcoins 由于不使用硬分支就能改变比特币的种种限制,数百种被称为“Altcoins”的衍生系统出现了,它们采用了不同的设计方法。Altcoins必须引导货币的初始分配来吸引用户参与,这可以通过以下几种方式实现: •新的成因块。 Altcoins可能只是从头开始一个新的区块链,就像比特币在早期那样为初始矿工分配资金。 •分叉比特币。为了避免让创始人享有特权,Altcoin可能会有意选择在某个时间点使用比特币,接受之前的交易历史和资金所有权。 从技术上讲,这就像硬分叉一样,只是没有声称该分叉是合法的比特币区块链。有趣的是,这种方法似乎没有被认真对待过。 •烧钱证明。继承比特币分配的一种比较流行的方法是烧钱证明,其中用户必须可证明地销毁一定数量的比特币,通常是通过将比特币中的资金转移到其私钥无法找到的特殊地址,比如散列为所有零的密钥。这种方法具有永久降低比特币的流通数量。 •挂钩侧链。最近,一些有影响力的比特币开发商提出了侧链,比特币可以转移到侧链上,并最终兑换成比特币。添加验证规则来从侧链中赎回货币,至少需要一个软的比特币分支。 31.7 可替代的共识协议 比特币的共识协议一直是其争议最激烈的组成部分,原因包括对稳定性的公开质疑、对协议性能和可伸缩性的担忧,以及对其计算难题浪费资源的担忧。在本节中,我们评估了共识的备选提案,并指出在每种情况下,拟议变更的稳定性影响都是未知的,而备选提案很少定义它们声称提供的任何特定稳定性属性。 A.参数变化 比特币的共识协议包含许多参数,几乎每一种Altcoin都至少改变了其中的一些参数,然而这些修改常常是有争议的,对于如何选择这些参数以及它们如何影响稳定性,我们仍然只有几个明确的指导方针。 块间时间和难度调整窗口。比特币会自动调整其对抗性难题的难度,以便(平均)在10分钟内找到解决方案。这种设置主要受网络延迟的限制;如果解决方案的速率过高,那么采掘者通常会在它们被传播之前找到冗余块。另一方面,较慢的块速率直接增加了用户等待事务确认所需的时间。 限制块和交易的大小。最具争议的提议之一是增加块大小的1MB限制。随着交易量持续稳步增长,这一极限可能很快就会达到。一旦达到这一限制,交易将需要有效地使用他们的费用来竞标稀缺资源。这可能会提高使用比特币的成本,可能会减缓比特币的普及,但会增加矿商的收入。它还可能导致用户依赖于聚合和结算场外交易的中介机构。 货币政策。比特币的共识协议有效地规定了一种货币政策,通过新货币的铸造速度和这一速度变化的时间表。通过强制规定货币数量的上限,比特币实际上具有通货紧缩的货币政策,这导致多位经济学家预测,比特币体系最终将被通货紧缩螺旋式上升破坏稳定,在这种螺旋式上升中,没有人愿意花钱购买比特币,因为囤积比特币被认为更有利可图。 B.可替代的计算难题 Miller等人提出了一种难题,它本质上必须分解成单独的尝试。此属性通常被称为“无进程”的难题。“这就保证了每个方块的创造者都是由计算能力的加权随机样本选出的,即使是小参与者也能因他们的贡献获得(成比例的)奖励,而且连续的拼图解决方案之间的间隔时间足够大,可以传播拼图解决方案。” 抗ASIC难题。虽然比特币开采最初是使用通用处理器进行的,但开采的竞争性质已导致向更强大和更节能的定制硬件的稳步发展。如今,ASICs占据了比特币计算能力的大部分。Taylor提供了一个很好的关于大规模高效计算SHA-256的技术挑战的调查,并估计今天的ASIC已经在理论效率限制的数量级之内。理想情况下,使用商用硬件可以有效地解决抗ASIC难题,而定制硬件只能获得较小的性能提升。到目前为止,主要的方法是设计“难以记忆”的谜题,这些谜题旨在要求有效地访问大容量存储器。 有用的谜题。从计算消耗的能源和用于制造采矿设备的能源和资源来看,通过竞争性难题达成共识似乎都是浪费。Becker等人还假设,比特币最终可能会被控制世界能源供应的现实实体所主导。一个常见的建议是将搜索功能应用于科学研究,比如流行的Folding@Home项目。对于有用的谜题,一个挑战是它们必须在没有可信方的情况下自动生成和验证,否则该方可以选择他们已经领先的谜题。 不可外包的谜题。大型采矿池的增长及其促进共谋和卡特尔形成的潜力,推动了难以外包的谜题的设计。“不可外包”的谜题确保执行挖掘工作的人可以在找到区块时为自己申请奖励,从而阻碍池的执行机制,并断绝了大型池匿名参与者之间的可能性。 C.虚拟挖掘和股权证明 与其让参与者用他们的财富交换计算资源来“开采”(这些计算资源随后被交换为开采奖励),不如让他们直接用财富交换选择区块的能力,通过当前的财富分配加权随机样本。我们可以将这种方法称为虚拟挖掘,有时也被称为“股权证明”。 虚拟挖掘提供了两个主要好处:首先,对于攻击者来说,获得足够多的数字货币可能比获得足够强大的计算设备更困难。第二,避免消耗实际资源,没有实际的资源被浪费。 •货币年龄的证明。Peercoin建议通过发布交易来证明拥有一定数量的货币,从而进行采矿。每一种货币的数量都以其“货币年龄”(最后一次移动的时间)来加权。 •存款证明。参与采矿需要在时间锁定的债券账户中存入货币,在此期间他们不能被移动。 •烧钱证明。Stewart提出通过破坏货币进行挖掘(将它们发送到一个不可靠的地址)。 •活动证明。 Bentov等建议,默认情况下,让每个硬币所有者都隐式地参与矿业彩票;定期使用信标的随机值从系统中的所有硬币中随机选择;中奖硬币的当前拥有者必须在一段时间间隔内回复一条签名信息。 目前还没有任何模型假设的形式化,Poelstra认为消费外部资源是区块链安全所必需的,因此虚拟开采方案在本质上是不可行的。核心论点是,虚拟采矿容易受到成本低廉的模拟攻击;构建一种不同的历史观(其中货币配置的演变是不同的)并不需要任何成本。 D.指定机构 尽管比特币的分散性已被证明是一个有效的卖点,但如果我们能够依赖少量指定的权威机构接收、顺序订购和签署交易,达成共识将会更加简单。这将使稳定性假设更容易推理,同时消除对浪费计算的担忧。Laurie首先提出使用指定的权威名单和标准的拜占庭协议协议。类似的观点是,大型比特币矿工不会受到攻击的激励,因为它们与未来汇率息息相关。 31.8 匿名和隐私 比特币提供了一种有限形式的不可链接性:用户可以在任何时候创建新的假名(地址)。但是假名很可能由同一个人控制。在本节中,我们将讨论对比特币用户隐私的威胁,并提出增强隐私的设计。 A.去匿名化 不可链接性的实际水平在很大程度上取决于实现细节,我们将这些实现细节称为习惯用法。链接可以过渡地应用于产生地址簇;这是交易图分析的一个实例。对手的一个主要挑战是这些习惯用法是脆弱的:随着实现的发展,它们可能产生误报并随着时间的推移而失去准确性。新的链接技术也可能出现。为了消除匿名,对手必须采取进一步的步骤,将地址集群链接到真实身份。 网络去匿名化。反匿名工作的另一个主要目标是点对点网络。节点在广播事务时泄漏IP地址。因此,匿名网络对隐私至关重要。然而,Biryukov等人指出,DoS攻击是为了断开Tor出口节点与比特币网络的连接。比特币的P2P层是否会进化到更好地利用Tor,或者是否会开发一个专用的匿名网络,这些都还有待观察。最后,由于难以私下检索客户端感兴趣的事务列表,当前SPV实现提供的匿名性很少。 B.改进匿名性的建议 匿名提议主要有三类。表31-1提供了关于五个安全性和部署属性的比较。 表31-1 匿名技术的比较评价 点对点。在P2P混合协议中,一组比特币持有者共同创建一系列交易,这些交易(私下)置换了他们的比特币所有权,使得每个参与者在这组交易中都是匿名的。 实现这一目标的直接机制是Coin-Join,在一组标准的用户形成一个比特币交易从每个用户一个输入和一个新的输出地址控制每个用户,没有外部方检查事务知道哪些输入对应的输出(提供外部不可链接性)。任何用户都可以拒绝签署交易,如果他们想要的输出地址不包括在内,防止盗窃,但使其易受DoS的任何个人。在普通的CoinJoin中,用户向其他用户声明他们的输出地址(不提供内部不可链接性)。这可以通过切换一个新的Tor电路或其他特殊的方法来解决。为了获得健壮的内部不可链接性,CoinShuffle是一种覆盖协议,用于通过加密混合协议形成CoinJoin事务。它也部分通过识别哪些参与方中止来防止DoS。 分布式混合网络。在Mixcoin中,用户向第三方mix发送标准大小的交易,并从其他相同mix的用户提交的硬币中收取相同的金额。这提供了对外部实体的匿名性和部分内部匿名性,因为组合将知道用户和输出之间的链接,但其他用户不会。其他用户也不能破坏协议。 具有集成不可链接性的Altcoins。Zerocoin是一种集成了不可链接性的Altcoin,它使用一种类似比特币的基础货币和一种名为Zerocoins的匿名影子货币。用户只使用基本货币进行交易,但是可以使用相对于所有零硬币的集合的匿名性将基本货币循环进零硬币和出零硬币。然而,它与比特币不兼容,必须实现为Altcoin(或硬分叉)。PinnochioCoin是一个使用不同密码结构的类似方案。 Zerocash是一种更强大的匿名Altcoin方案。零现金交易是一种特殊类型的零知识证明,称为SNARKs,它完全不显示关于金额或接收者的任何信息,从而支持一个完全不可追踪的分类账,其中没有公开披露任何信息。SNARKs是一种新的密码原语,迄今没有任何实际部署,需要可信方生成初始的秘密参数;然而,最近的工作表明,这种初始设置可以分布在一组互不信任的参与方中。 CryptoNote是一种使用环签名的密码混合协议,它已经被用作几个关注隐私的Altcoins的基础。与Zerocoin或Zerocash相比,该方案具有更好的性能,但较弱的匿名性。 31.9 比特币的功能扩展 我们使用“非中介化”这个术语来指代设计事务的一般过程,这些事务不再需要可信的中介。 A.如今比特币的非中介化 原子性。在许多情况下,可以使用区块链提供的功能和事务可以是原子性的这一事实直接强制执行所需的安全性属性,直到多方签名才生效。CoinJoin是一个简单的例子,在所有参与者签名之前,没有人交换硬币。 抵押品。在其他情况下,当所需的安全支持不能直接执行时,比特币可以通过张贴存款或债券提供一个可接受的补救措施,只有在行为正确的情况下才能退还。 可审核性。即使比特币不是用来对不诚实的一方立即采取补救措施,它仍然可以在提供证据证明不诚实的一方有罪方面发挥关键作用。 B.比特币作为一种数据存储 扩展比特币的另一种方法是只将其用作任何人都可以写入的全局仅追加日志。 安全时间戳。因为区块链是(模块化分支)仅追加的,所以它可以立即作为安全时间戳服务使用,这在各种安全协议中都很有用。 数字令牌:彩色硬币。彩色硬币使用区块链的历史跟踪功能作为一个功能。总的来说,我们已经观察到,每一笔交易输出都有一个独特的追溯历史,这可能对不同的用户有意义,这意味着从长远来看,比特币并不能保证具有可替代性。 覆盖协议:Mastercoin,一个更灵活的解决方案是使用比特币的共识机制,但定义完全不同的交易语法(使用任意有效的规则),可以作为区块链上的任意数据编写。这种设计去掉了比特币共识机制通常提供的正确性属性,因为比特币矿工不会知道新的交易类型。因此,无效的覆盖事务可能会被发布,需要覆盖系统中的参与者忽略。 C.扩展比特币的交易语义 比特币脚本语言是故意限制的;事实上,最初的源代码包含了一种更加通用的语言,但是大多数操作码都被标记为不可用。 31.10 结论 我们基于学术和在线文献对比特币进行了广泛的分析,这表明在设计一个实用的加密货币方面出现了新想法的复兴,这是计算机安全社区面临的一个长期挑战。创新并不仅限于新的加密货币协议设计,而是涉及计算机安全,分布式系统,硬件设计和经济学等许多领域。 然而,我们的认识仍有不足。如果有机会从头设计一个货币体系,我们不清楚与比特币有什么明显的偏离是可取的,也不清楚它们在实际中会产生什么影响。这并不是说比特币就像它的许多设计怪癖所显示的那样完美无缺。在一些领域,如匿名性,也有明显的优秀设计被提出。然而,就比特币的基本稳定性和效率而言,目前尚不清楚是否有可能设计出另一种分散的共识系统来改进比特币。文献甚至没有提供足够的工具来评估比特币本身在何种经济和社会假设下会保持稳定。同样,在设计具有新功能的非中介协议时,我们也不清楚如何在不破坏比特币的稳定性的前提下扩展比特币的功能。 总的来说,我们只是没有一个科学的模型,具有足够的预测能力来回答有关比特币或相关系统在不同参数或不同环境下可能如何运行的问题。尽管比特币社区偶尔会对学术计算机科学研究产生疑虑,但我们主张在研究中扮演重要角色,而不是简单地“让市场来决定”。如今,很难评估比特币相对于Altcoins的成功在多大程度上是由于其特定的设计选择,而不是它的先发优势。 比特币是一个实践似乎领先于理论的罕见案例。我们认为,这对研究领域来说是一个巨大的机会,可以解决我们提出的许多关于比特币的公开问题。
  • 热度 2
    2019-12-4 15:25
    2960 次阅读|
    1 个评论
    创建分布式一致性的方法已经产生了一系列用于构建复制事务日志(区块链)的分布式协议。这些技术进步使得分散加密货币的诞生成为可能,比如比特币。比特币最著名的实现之一Ethereum在复制分布式存储中加入了图灵(turing)技术——与基金相关的完整状态计算——即所谓的智能合约交易。 智能合约是存储在区块链中的小程序,可以由协议相关方发起的事务调用它们,并作为自动和可信的中介执行一些业务逻辑。智能合同的典型应用包括多方统计、投票和仲裁机制、拍卖以及带有奖励分配的解谜游戏的实现。为了保持区块链的全局一致性,涉及与智能合约交互的每个事务都在系统中进行复制。Ethereum,复制执行实现通过一个统一的执行后端Ethereum虚拟机(EVM)基于堆栈的操作形式,富含大量的原语,允许合同给对方,指全球区块链状态,启动sub-transactions,甚至创造新的合同动态实例。也就是说,EVM为实现基于以太符的智能合约的多种高级编程语言提供了一个方便的编译目标。与之前低层次的智能合约编写语言不同,在合约的生命周期,以太坊有一个可变的可修改的合约状态。最后,为了解决可能的拒绝服务攻击问题,EVM提出了gas的概念——虚拟机指令的成本字段。 所有这些特性使EVM与一个非常强大的执行形式,同时使它很难正式分析的字节码可能效率低下和漏洞的挑战加剧了智能的关键任务性质的合同,,被部署后,不能修改或采取区块链。 贡献。在这项工作中,我们进一步完善和自动化推理的高级属性的以太坊智能合同。 为此,我们提供了一个开源工具EthIR,用于将EVM字节码精确地反编译为基于规则的高级表示形式;EthIR可以通过GitHub访问:: https://github.com/costa-group/ethIR 我们的表示法从Oyente生成的CFGs中提供的低层编码为EVM字节码重构了高层控制和数据流。它允许应用为高级语言开发的最先进的分析工具来推断字节码的属性。 我们通过对来自区块链的现有合约进行自动资源分析来展示这个应用程序,从而推断它们的循环边界。 27.3从EVM到基于规则的表示 反编译作为其他字节码的目的语言(见,例如,gas分析和优化框架)是在传递一个明确表示程序的控制流标明的延续(通过规则执行)和数据流(通过显式变量,代表了数据存储在堆栈中,在合同领域,在局部变量,以及区块链),因此,分析或转换工具可以直接获得此控制流信息。 27.3.1扩展Oyente生成CFG 给定一些EVM代码,Oyente工具生成一组块,这些块存储表示此类EVM代码的CFG所需的信息。然而,当一个块的跳转地址不是惟一的(取决于程序的流)时,Oyente生成的块有时只存储跳转地址的最后一个值。我们修改了Oyente块的结构,以便包含所有可能的跳转地址,从而重构整个CFG。例如,图27-1显示了合约片段的可靠源代码(左),以及从中生成的CFG(右)。观察到在Oyente CFG生成的扩展,说明SSTORE或SLOAD注释与合同领域他们操作的标识符(例如,SSTORE操作存储一个值在合同领域被SSTORE 0)。同样,EVM与指令MSTORE和MLOAD说明注释与他们操作的内存地址(地址将被转换成变量尽可能RBR)。如果内存地址不是静态已知的,就不能生成这些注释,在这种情况下,我们用“?”标注相应的指令。 图 27-1 solability代码(左)和EVM代码用于CFG中的process_payment(右)。 最后,当我们有了可靠的代码可用时,我们就能够从散列代码中检索调用的函数的名称(参见Block 152,其中我们在第二个字节码kingBlock中注释了要调用的函数的名称)。这允许我们静态地知道延续块。 27.3.2从CFG到保护规则 将EVM转换为基于规则的表示是通过将Def. 1中的转换应用于CFG中的每个块来完成的。给定给规则-block.x或jump_x-use x的标识符使用的是正在翻译的块中第一个字节码的PC 。我们区分三种情况:(1)如果最后一个字节码块无条件jump(JUMP),我们生成一个单一的规则,与延续调用块,(2)如果是条件转移(JUMPI)我们生产两个额外的保护规则代表了延续条件成立时,它不,(3)否则,我们继续执行块x + s (s是EVM的大小字节码的块被翻译)。关于变量,我们区分了以下类型。 堆栈变量:转换的一个关键因素是将堆栈平铺成变量,即,当它被转换成规则时,块使用的堆栈部分由显式变量s0、s1……表示,其中s1在s0之上,以此类推。得到初始堆栈变量作为参数s0, s1,…, sn,记为。 局部变量:代码中出现的以数字地址表示的本地内存的内容,通过给定地址的MSTORE和MLOAD访问,使用变量l0、l1、…, lr,表示为lr,并作为参数传递。对于转换,我们假设有一个表 lmap,它将不同的本地变量关联到代码中使用的每个数字地址内存。当地址不是数字时,我们使用规则的新变量local表示它,以表明我们没有关于此内存位置的信息。 合约字段:我们用变量g0对字段建模……, gk,表示为gk,作为参数传递。由于这些字段是使用SSTORE访问的,而SLOAD使用的是字段的数量,所以我们将gi与第i字段关联起来。对于本地内存,如果字段的数量不是数字,因为它是未知的(注释为?)我们使用一个新的局部变量来表示它。 区块链数据:我们用变量bc对该数据建模,这些变量要么用md0索引,要么…如果它们是调用的精确信息,比如使用操作码GAS访问的gas,或者是关于区块链的,比如使用操作码number访问的当前块号。所有这些数据都是通过专用的操作码访问的,这些操作码可能会消耗堆栈的一些偏移量,并通常将结果放在堆栈的顶部(尽管其中一些操作码,如CALLDATACOPY,可以在本地内存中存储信息)。 翻译使用一个辅助函数τ每个字节码翻译成相应的高层指令(和更新堆栈的大小m)和τG翻译条件转移的限制。将EVM翻译成的RBR语言的语法如图2所示。我们可以选择将原始字节码指令保存在RBR中,通过简单地将它们封装在nop方法(例如nop(DUPN))中,就可以从原始字节码指令中获得更高级的字节码指令。这与gas分析器将精确的gas消耗分配给转换字节码的高级指令有关。 定义 1. 给定一个带有b1指令的block B,…, bi在CFG中从PC x开始,与局部变量表 lmap,生成的规则是: 方法τ和τG对于一些代表性的字节码: 图27-2 用于翻译EVM的RBR语法 -c 是指令的索引,条件跳转的保护从该索引开始。注意,该条件在索引i-2处结束,并且总是在i-1处有一个PUSH。由于push地址(我们已经在p中有了)和条件的结果被JUMPI使用,所以我们不将它们存储在堆栈变量中。 m 表示块的堆栈大小。一开始我们有m:= n。 变量gs1、gs2和gl、ls1、ls2和ll是每个规则的局部变量,用于表示SLOAD和SSTORE、MLOAD和MSTORE在给定地址不是具体数字时的使用情况。对于SLOAD和MLOAD,我们还使用fresh()来表示新变量的生成器,以安全地表示加载地址的未知值。 例 1. 。例如,通过翻译图27-1右侧的三个块获得的RBR摘录如下(所选指令始终使用nop注释获取它们的字节码): 27.4案例研究:使用SACO所在EVM中进行边界循环 为了说明我们的框架的适用性,我们分析了EVM代码的数量特性,将其转换为我们的中间表示形式,并使用高级静态分析器SACO对其进行分析。中美合作所能够推断出循环迭代次数的上限。请注意,这是推断智能合同(一个非常有趣的属性)的gas消耗量的第一个关键步骤。SACO的内部表示匹配图27-2的语法在小的语法翻译之后(我们已经解决了实现github中可用的一个名为saco.py的简单翻译程序的问题)。由于SACO所没有位操作(即and、or、xor和not),我们的翻译器用新的变量替换这些操作,以便分析器忘记关于位变量的信息。在此之后,对于我们的运行示例,我们证明了它包含的6个循环的终止,并为这些循环生成一个线性边界。我们在github中包含了其他智能合约,以及SACO所为它们推断的循环边界。其他高水平的分析程序,如整数转换系统或霍恩子句(如,AproVe, T2, VeryMax, co絮凝)的工作,可以很容易地适应,以及对我们的RBR翻译程序。 27.5相关方法和工具 在过去的两年中,有几种方法通过在最先进的证明助手中建模Ethereum的严格语义,解决了直接在EVM字节码中实现的关于Ethereum合约的完全形式推理的挑战。虽然这些机制支持EVM合约的各种安全性和安全性特性的正式机器辅助证明,但是它们都没有提供对EVM字节码进行完全自动化分析的方法。 同时,其他几种确保Ethereum合约正确性和安全性的方法采用了一种更激进的方法,通过象征性地执行EVM字节码来实现用于检测bug的自动化工具链。然而,低层EVM表示在应用这些工具立即分析更高层的属性时遇到了困难。例如,在Oyente中表示EVM,这是一个流行的分析Ethereum智能合约的工具,它的级别太低,无法实现对高级属性的分析,例如循环复杂度或交换性条件。宙斯,一个通过符号执行wrt分析以太智能合同的工具。客户提供的策略,直接操作可靠的来源。因此,宙斯作为一种分析方法的合理性,依赖于没有正式定义的Solidity语义。