CN112019586B - 用于区块链的验证的方法和系统 - Google Patents

用于区块链的验证的方法和系统 Download PDF

Info

Publication number
CN112019586B
CN112019586B CN202010469705.3A CN202010469705A CN112019586B CN 112019586 B CN112019586 B CN 112019586B CN 202010469705 A CN202010469705 A CN 202010469705A CN 112019586 B CN112019586 B CN 112019586B
Authority
CN
China
Prior art keywords
hash
blockchain
sequence
blocks
reduced step
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010469705.3A
Other languages
English (en)
Other versions
CN112019586A (zh
Inventor
P·嘉雅昌德兰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/424,765 external-priority patent/US11711202B2/en
Priority claimed from US16/424,706 external-priority patent/US11429738B2/en
Priority claimed from US16/424,612 external-priority patent/US11539527B2/en
Priority claimed from US16/424,671 external-priority patent/US11570002B2/en
Priority claimed from US16/424,588 external-priority patent/US20200382309A1/en
Priority claimed from US16/424,644 external-priority patent/US11516000B2/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN112019586A publication Critical patent/CN112019586A/zh
Application granted granted Critical
Publication of CN112019586B publication Critical patent/CN112019586B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及用于区块链的近似哈希验证。示例操作可以包括以下各项中的一项或多项:从客户端应用向一个或多个区块链节点发送在区块链上对存储请求进行存储的消息,该消息包括存储请求的完整步数哈希和存储请求的缩减步数哈希,从区块链节点接收指示存储请求的缩减步数哈希被存储在区块链上的记录确认,以及由客户端应用基于存储请求的缩减步数哈希的近似哈希验证来验证存储请求的记录是否正确。

Description

用于区块链的验证的方法和系统
技术领域
本申请一般地涉及区块链的过程,并且更特定地涉及用于区块链的验证的方法和系统并由此减少了区块链网络内验证所需的计算量。
背景技术
集中式数据库在一个位置处的单个数据库(例如,数据库服务器)中存储和维护数据。此位置通常是中央计算机,例如,台式机中央处理单元(CPU)、服务器CPU或大型计算机。通常可以从多个不同点访问存储在集中式数据库上的信息。例如,基于客户端/服务器配置,多个用户或客户端工作站可以在集中式数据库上同时工作。集中式数据库由于其单个位置而易于管理、维护和控制,特别是出于安全目的。在集中式数据库内,数据冗余最小化,因为所有数据的单个存储位置还意味着给定的一组数据只有一个主记录。
然而,集中式数据库遭受重大缺陷。例如,集中式数据库具有单点故障。特别地,如果没有容错考虑并且发生硬件故障(例如,硬件、固件和/或软件故障),则数据库内的所有数据都会丢失,并且所有用户的工作都会中断。此外,集中式数据库高度依赖于网络连接。因此,连接越慢,每次数据库访问所需的时间量就会增加。另一个缺陷是当集中式数据库由于单个位置而遇到高流量时,会出现瓶颈。此外,由于数据库仅维护数据的一个副本,因此集中式数据库提供了对数据的有限访问。因此,多个设备无法在不会产生重大的问题或覆盖已存储数据的风险的情况下同时访问同一块数据。此外,由于数据库存储系统具有最小的数据冗余甚至没有数据冗余,因此,除了通过手动操作从备份存储中恢复之外,很难取回意外丢失的数据。
区块链存储解决了传统存储系统的缺陷中的一些缺陷。区块链的好处之一是它是去中心化的,因此是高度容错的,这意味着甚至当组件中的一个或一些组件发生故障时,区块链也可以继续正常运行。区块链支持的附加的好处包括不可变的记录、缺乏中央授权、安全性、智能合约等,这些好处在传统数据库中是不常见的。为了强制执行这些属性,区块链系统依靠哈希来保护在各方之间发送并存储在区块链上的数据。但是,典型的区块链哈希会消耗大量资源。因此,需要一种用于保护区块链内的数据的改进的机制。
发明内容
一个示例实施例提供了一种系统,该系统包括:网络接口,网络接口被配置为执行以下各项中的一项或多项:经由客户端应用向一个或多个区块链节点发送用于在区块链上对存储请求进行存储的消息,其中该消息包括存储请求的完整步数哈希和存储请求的缩减步数哈希,并且从区块链节点接收指示存储请求的缩减步数哈希被存储在区块链上的记录确认;以及处理器,处理器被配置为经由客户端应用基于存储请求的缩减步数哈希的近似哈希验证来验证存储请求的记录是否正确。
另一示例实施例提供了一种方法,该方法包括以下各项中的一项或多项:从客户端应用向一个或多个区块链节点发送用于在区块链上对存储请求进行存储的消息,该消息包括存储请求的完整步数哈希和存储请求的缩减步数哈希,从区块链节点接收指示存储请求的缩减步数哈希被存储在区块链上的记录确认,以及由客户端应用基于存储请求的缩减步数哈希的近似哈希验证来验证存储请求的记录是否正确。
又一示例实施例提供了一种非暂时性计算机可读介质,包括指令,当指令由处理器读取时,使处理器执行以下各项中的一项或多项:从客户端应用向一个或多个区块链节点发送用于在区块链上对存储请求进行存储的消息,该消息包括存储请求的完整步数哈希和存储请求的缩减步数哈希,从区块链节点接收指示存储请求的缩减步数哈希被存储在区块链上的记录确认,以及由客户端应用基于存储请求的缩减步数哈希的近似哈希验证来验证存储请求的记录是否正确。
另一示例实施例提供一种系统,该系统包括:网络接口,网络接口被配置为从客户端应用接收具有用于在区块链上存储的存储请求的消息,其中该消息包括存储请求的完整步数哈希和存储请求的缩减步数哈希;以及处理器,处理器被配置为执行以下各项中的一项或多项:确定是将存储请求存储为缩减步数哈希还是完整步数哈希,以及响应于确定将存储请求存储为缩减步数哈希,将存储请求的缩减步数哈希提交至在哈希链接的区块的链中包括的区块。
另一示例实施例提供了一种方法,该方法包括以下各项中的一项或多项:从客户端应用接收具有用于在区块链上存储的存储请求的消息,该消息包括存储请求的完整步数哈希和存储请求的缩减步数哈希,由区块链对等节点确定是将存储请求存储为缩减步数哈希还是完整步数哈希,以及响应于确定将存储请求存储为缩减步数哈希,将存储请求的缩减步数哈希提交至在哈希链接的区块的链中包括的区块。
附图说明
图1是示出了根据示例实施例的用于生成完整步数哈希和缩减步数哈希的哈希过程的图。
图2A是示出了根据示例实施例的示例区块链体系结构配置的图。
图2B是示出了根据示例实施例的节点之间的区块链交易流程的图。
图3A是示出了根据示例实施例的许可网络的图。
图3B是示出了根据示例实施例的另一许可网络的图。
图3C是示出了根据示例实施例的无需许可的网络的图。
图4A-图4B是示出了根据示例实施例的存储数据并执行所存储的数据的近似哈希验证的过程的图。
图4C是示出了根据示例实施例的经由近似哈希验证执行恢复操作的区块链节点的图。
图4D是示出了根据示例实施例的经由近似哈希验证来验证未花费的交易的过程的图。
图4E是示出了根据示例实施例的基于缩减步数哈希将数据文件存储在区块链上的过程的图。
图4F是示出了根据示例实施例的基于近似验证将数据提交至区块链的过程的图。
图4G是示出了根据示例实施例的包括近似哈希验证的背书过程的图。
图5A是示出了根据示例实施例的在区块链上存储交易的缩减步数哈希的方法的图。
图5B是示出了根据示例实施例的执行存储在区块链上的交易的近似哈希验证的方法的图。
图5C是示出了根据示例实施例的故障区块链节点基于近似哈希验证执行恢复的方法的图。
图5D是示出了根据示例实施例的发送具有缩减步数哈希的区块序列的方法的图。
图5E是示出了根据示例实施例的基于近似哈希验证来确定交易是否未花费的方法的图。
图5F是示出了根据示例实施例的基于近似哈希验证来确定交易是否未花费的另一方法的图。
图5G是示出了根据示例实施例的在区块链上存储媒体文件的缩减步数哈希的方法的图。
图5H是示出了根据示例实施例的对存储在区块链上的媒体文件执行近似哈希验证的方法的图。
图5I是示出了根据示例实施例的背书者节点之间的近似哈希验证的方法的图。
图5J是示出了根据示例实施例的使用缩减步数哈希验证来背书交易的方法的图。
图5K是示出了根据示例实施例的对数据区块执行近似哈希验证的方法的图。
图5L是示出了根据示例实施例的对数据区块中的交易的缩减步数哈希进行排序的方法的图。
图6A是示出了根据示例实施例的被配置为执行本文所述的一个或多个操作的示例系统的图。
图6B是示出了根据示例实施例的被配置为执行本文所述的一个或多个操作的另一示例系统的图。
图6C是示出了根据示例实施例的被配置为利用智能合约的又一示例系统的图。
图6D是示出了根据示例实施例的被配置为利用区块链的另一示例系统的图。
图7A是示出了根据示例实施例的新区块被添加到分布式账本的过程的图。
图7B是示出了根据示例实施例的新数据区块的数据内容的图。
图7C是示出了根据示例实施例的用于数字内容的区块链的图。
图7D是示出了根据示例实施例的可以表示区块链中的区块结构的区块的图。
图8A是示出了根据示例实施例的存储机器学习(人工智能)数据的示例区块链的图。
图8B是示出了根据示例实施例的示例量子安全区块链的图。
图9是示出了支持示例实施例中的一个或多个实施例的示例系统的图。
具体实施方式
将容易理解,如本文的附图中一般性描述和示出的,本组件可以以各种各样不同的配置来布置和设计。因此,如附图所示,对方法、装置、非暂时性计算机可读介质和系统中的至少一个的实施例的以下详细描述并非旨在限制如要求保护的本申请的范围,而仅仅是代表所选实施例。
可以在一个或多个实施例中以任何合适的方式组合或移除如贯穿本说明书描述的即时特征、结构或特性。例如,贯穿本说明书,短语“示例实施例”、“一些实施例”或其他类似语言的使用是指结合该实施例描述的特定特征、结构或特性可以被包括在至少一个实施例中的事实。因此,贯穿本说明书,短语“示例实施例”、“在一些实施例中”、“在其他实施例中”或其他类似语言的出现不一定全部是指同一组实施例,并且在一个或多个实施例中,可以以任何合适的方式组合或移除所描述的特征、结构或特性。此外,在图中,即使所示的连接是单向或双向箭头,元素之间的任何连接也可以允许单向和/或双向通信。而且,附图中描绘的任何设备可以是不同的设备。例如,如果移动设备被示为正在发送信息,则有线设备也可以用于发送该信息。
另外,尽管在实施例的描述中可能已经使用术语“消息”,但是可以将本申请应用于多种类型的网络和数据。此外,尽管在示例性实施例中可能描绘了某些类型的连接、消息和信令,但是本申请不限于某一类型的连接、消息和信令。
示例实施例提供了方法、系统、组件、非暂时性计算机可读介质、设备和/或网络,其提供了用于区块链的近似哈希验证。
在一个实施例中,系统利用去中心化数据库(诸如区块链),该去中心化数据库是包括彼此通信的多个节点的分布式存储系统。去中心化数据库包括类似于分布式账本的仅可追加的不可变数据结构,该不可变数据结构能够维护互不信任的各方之间的记录。不信任的各方在本文中被称为对等体或对等节点。每个对等体维护数据库记录的副本,并且在分布式对等体之间未达成共识的情况下,单个对等体不可以修改数据库记录。例如,对等体可以执行共识协议以验证区块链存储交易,将存储交易分组为区块,并在这些区块上构建哈希链。为了一致性,该过程通过对存储交易进行必要的排序来形成账本(ledger)。在各种实施例中,可以使用许可的和/或无需许可的(permissionless)区块链。在公共或无需许可的区块链中,任何人都可以在没有特定身份的情况下参与。公共区块链可以涉及本地加密货币,并使用基于各种协议(诸如工作量证明(PoW))的共识。另一方面,许可的区块链数据库在一组实体之间提供安全的交互,该组实体共享共同目标但彼此之间并不完全信任,诸如交换资金、商品、信息等的企业。
系统可以利用区块链,该区块链操作任意的可编程逻辑,该可编程逻辑针对去中心化存储方案被定制,并被称为“智能合约”或“链码”。在一些情况下,可能存在用于管理功能和参数的专用链码,其被称为系统链码。本申请还可以利用智能合约,这些智能合约是受信任的分布式应用,这些分布式应用利用区块链数据库的防篡改属性和节点之间的被称为背书或背书策略的底层协议。与该应用相关联的区块链交易可以在被提交给区块链之前被“背书”,而未被背书的交易则被忽略。背书策略允许链码以背书所必需的一组对等节点的形式来指定交易的背书者。当客户端将交易发送给背书策略中指定的对等体时,交易被执行以验证交易。在验证之后,交易进入排序阶段,在排序阶段中,使用共识协议来产生被分组为区块的已被背书的交易的已排序的序列。
系统可以利用作为区块链系统的通信实体的节点。在不同类型的多个节点可以在同一物理服务器上运行的意义上,“节点”可以执行逻辑功能。节点在信任域中分组,并与以各种方式控制它们的逻辑实体相关联。节点可以包括不同类型,诸如客户端或提交客户端节点,其向背书者(例如,对等体)提交交易调用,并且将交易提议广播到排序服务(例如,排序节点)。另一类型的节点是对等节点,其可以接收客户端提交的交易、提交交易并维护区块链交易的账本的状态和副本。尽管不是必需的,但是对等体也可以具有背书者的角色。排序服务节点或排序者是针对所有节点运行通信服务的节点,并且该节点实现递送保证,诸如在提交交易和修改区块链的世界状态时向系统中的每个对等节点广播,其是通常包含控制和设置信息的初始区块链交易的另一个名称。
系统可以利用账本,账本是区块链的所有状态转换的有序的、防篡改的记录。状态转换可以由参与方(例如,客户端节点、排序节点、背书者节点、对等节点等)提交的链码调用(即,交易)引起。每个参与方(诸如对等节点)都可以维护账户的副本。交易可以导致一组资产键值对作为一个或多个操作数(诸如创建、更新、删除等)被提交给账本。账本包括用于将不可变的、有序的记录存储在区块中的区块链(也被称为链)。账本还包括维护区块链的当前状态的状态数据库。
系统可以利用作为交易日志的链,其被构造为哈希链接的区块,并且每个区块包含N个交易的序列,其中N等于或大于1。区块头部包括该区块的交易的哈希,以及前一个区块的头部的哈希。以这种方式,账本上的所有交易都可以被排序并以加密的方式链接在一起。因此,在不破坏哈希链接的情况下不可能篡改账本数据。最近添加的区块链区块的哈希(hash)表示在它之前已发生的链上的每个交易,使得可以确保所有对等节点处于一致且可信的状态。该链可以被存储在对等节点文件系统(即,本地、附加存储、云等)上,从而有效地支持区块链工作负载的仅可追加性质。
不可变账本的当前状态表示链交易日志中包括的所有键的最新值。由于当前状态表示通道已知的最新键值,因此有时它被称为世界状态。链码调用针对账本的当前状态数据执行交易。为了使这些链码交互有效,可以将键的最新值存储在状态数据库中。状态数据库可能仅仅是链的交易日志的索引视图,因此它可以随时从链中重新生成。一旦对等节点启动并且在接受交易之前,可以自动恢复(或如有需要时生成)状态数据库。
密码哈希计算(hashing)是在区块链系统中广泛使用的基本构建块。例如,区块哈希(当前区块的哈希)被包括在下一个区块中。作为另一个示例,交易被哈希并存储在区块内的数据结构(例如,Merkle树)上。作为另一个示例,数字签名涉及用私钥对消息的哈希进行签名,其又被广泛用在所有通信、背书、客户端交易提交等中。作为另一个示例,文档哈希可以被存储为智能合约状态的一部分,并在检索时被验证。作为另一个示例,区块链结构(blockchain fabric)可以将实际数据存储在链下的数据存储装置(侧存储装置)内,同时将数据的哈希保持在公共区块链中。
区块链被构建为非常具有容错性。例如,数据和智能合约计算被复制,并且多个节点验证交易。此外,消息的所有数字签名都由多个节点验证。作为另一个示例,交易和区块哈希由所有对等节点检查。背书策略可用来确保足够多的节点同意客户端的授权以及交易的正确性。由于区块链支持的容错性,即使某些节点发生故障,正确的节点也将继续确保系统正常工作。
示例实施例将近似哈希验证的概念引入了区块链。当数据项(交易、消息、文件等)的哈希时,创建者可以生成数据项的完整步数哈希和缩减步数哈希。在此,缩减步数哈希可以是与完整步数哈希相同的被应用的哈希函数,但是可以被应用于比完整步数哈希更少的步数。作为非限制性示例,完整步数哈希可以被应用于64步,而缩减步数哈希可以被应用于仅48步。因此,验证实体可以选择是验证完整步数哈希(用于完全验证)还是验证缩减步数哈希(用于近似验证)。此决定可以是随机的、由策略决定的、预定的、周期性的等。近似验证可以为所涉及的节点节省大量计算。
与完整哈希验证相比,近似验证的潜在阻碍是可能生成不正确结果/计算的可能性略微增加。但是,由于区块链的容错属性,任何错误(尽管很罕见)都可以被区块链上不执行近似验证的其他节点纠正。
区块链中的哈希计算(hashing)是指使任何长度的输入项反映固定长度的输出项的过程。作为一个示例,不同长度的交易可以运行通过给定的哈希算法,该给定的哈希算法生成具有固定长度的输出。也就是说,无论输入交易的长度如何,输出都是相同长度。该输出被称为哈希。在区块链上使用的常见哈希算法是安全哈希算法256(通常被缩写为SHA-256),然而,许多其他算法是可能的,诸如MD5(消息摘要算法)等。在SHA-256中,哈希计算给出固定长度(即256位长度或32个字节)的输出结果。无论交易只是单个词还是具有大量数据的复杂交易,情况总是如此。这意味着当可以召回(recall)/跟踪该哈希时,跟踪交易变得更加容易。哈希的大小将取决于所利用的哈希函数,但是使用特定哈希算法的输出将具有特定大小。
为了使密码哈希函数被认为是安全的,它必须具备某些特性或属性。例如,哈希函数可以具有固定或特定的输出(确定性的)。不管使用哈希函数处理给定输入的次数如何;结果应始终具有相同的长度。哈希将是随机的并且具有不同的模式,但是具有相同的大小/长度。作为另一示例,哈希函数可以是为每个数据输入执行快速计算的函数。可能难以找到哈希的输入数据,但是理想情况下,计算或演算该哈希理想情况下应当非常快。作为另一个示例,哈希函数可以是单向的(抗原像的)。在此,给定特定交易的哈希,使用此输出确定原始输入数据应该是几乎不可能的或实际上是不可行的。作为另一个示例,哈希函数可以被随机化,即,即使输入数据仅相差一个数字或字母,哈希函数也为每个输入产生不同的输出。作为另一个示例,哈希函数可以是抗碰撞的,因为不同的输入不会创建相同或相似的输出。本文的示例可以是指SHA-256、MD5等,但是这些不应被解释为限制本文的系统可以使用的哈希函数的类型。
本文描述和描绘的本解决方案的一些好处包括减少了区块链内的一个或多个节点的计算工作量,同时仍维护了区块链的整体正确性和安全性。此外,缩减步数哈希和相应的近似哈希验证的速度明显快于完整步数哈希和完整步数哈希验证。近似哈希验证可以由区块链系统内的某些节点而不是所有节点执行。因此,尽管错误很罕见,但是可以使用完整哈希验证来确认和纠正任何错误。此外,由于可以使用相同的哈希函数,因此无需任何附加的计算就可以创建缩减步数哈希。因此,可以在生成完整步数哈希的同时生成缩减步数哈希。例如,缩减步数哈希可以通过将哈希函数应用于48步来创建,而完整步数哈希可以通过将哈希函数应用于另外的16步(总共64步)来创建,但是实施例不限于此。
根据各个方面,即使节点应用近似哈希验证并且该哈希验证是不正确的,在区块链系统中也存在足够的容错性来对抗该不正确性。这类似于对等体发生故障或恶意行为的情况,这将不会影响系统的正确性。此外,近似哈希验证允许提高系统的性能(例如,关于哈希验证的处理器计算更少,而其他区块链过程上的处理器计算更多)。此外,所提出的技术可以被应用于如下的任何哈希验证实例和系统:对于这些哈希验证实例和系统,系统(对于单独的对等体和整个系统两者)具有内置的容错性。另外,区块链平台可以规定必须存在多少个完整节点(非近似)以确保健壮性/容错性。
在本文的示例中,执行近似哈希验证的节点可能不正确。在此情况下,区块链将继续正常工作,因为平台可以规定必须执行完整步数哈希验证的对等体的最小数量。在此情况下,其他对等体(完整步数哈希验证者)将正确检测验证。故障的对等体现在可以(在与其他节点达成共识之后)检查区块链状态并检测出它在承认/拒绝交易时出过错,而实际上其他节点得出了不同结论。
图1示出了根据示例实施例的用于生成完整步数哈希和缩减步数哈希的哈希过程100。参考图1,消息110被转换成密码哈希130。许多流行的哈希函数包括以下:(i)选择特定的非线性函数,(ii)对输入重复应用所选择的非线性函数若干步或若干轮次,以及(iii)在重复该过程若干步(比如说64步)之后,输出将看起来与原始输入非常不同,使得即使原始输入中的小差异也会被非线性函数的重复应用放大,从而产生非常不同的输出(两个看起来相似的消息的哈希将非常不同)。在大量轮次内重复哈希函数的原因是为了防止安全攻击。流行的哈希函数在运行较少步时的安全属性已被广泛研究。
如图1所示,消息110(交易、数据项等)被分解为多个较小的块112。在此模型中,消息110可以被填充并被划分成均匀长度的块112。然后,使用哈希函数F(压缩函数)122顺序处理块112。例如,由于压缩函数不能处理任意大小的输入,因此系统可以创建大小是固定数量的倍数(例如512或1024)的输入。然后,哈希函数将结果分成固定大小的块112,并使用压缩函数122一次一个地处理它们,每次将输入的块与先前一个轮次的输出组合在一起。
为了使构造安全,消息可以用对原始消息的长度进行编码的填充物来填充。这被称为长度填充或Merkle-Damgard增强。从初始块开始,哈希函数122从先前的哈希值和新的消息块重复生成新的中间哈希值。最终压缩函数的输出是消息的哈希130。
在图1中,单向压缩函数由F 122表示,并将两个固定长度的输入变换为与输入之一具有相同大小的输出。该算法从初始值121开始,该初始值121也被称为初始化向量(IV)。初始值121是固定值(算法或实现特定的)。对于每个块112,压缩(compression)(或压紧(compacting))函数F 122取得目前为止的结果,将它与消息块组合,并产生中间结果。根据需要用零填充最后的块,并追加表示整个消息的长度的位。
为了创建完整步数哈希,函数F 122可以被应用第一次数,例如64个轮次等。同时,为了创建缩减步数哈希,函数F 122被应用小于第一次数的第二次数,例如48个轮次等。当创建哈希的实体(例如客户端等)向区块链节点等提供哈希时,实体不仅应提供完整步数哈希,还应提供缩减步数哈希。也就是说,示例实施例包括提供原始哈希函数算法(例如64个轮次等)、还提供来自同一算法的缩减步数应用(例如48个轮次等)的中间结果的实体。其他任何人验证缩减步数哈希函数的计算工作量将小于针对原始函数的工作量。
图2A示出了根据示例实施例的区块链体系结构配置200。参考图2A,区块链体系结构200可以包括某些区块链元素,例如,一组区块链节点202。区块链节点202可以包括一个或多个节点204-210(这四个节点仅以示例的方式描绘出)。这些节点参与了多个活动,诸如区块链交易添加和验证过程(共识)。区块链节点204-210中的一个或多个可以基于背书策略来对交易进行背书,并且可以为体系结构200中的所有区块链节点提供排序服务。区块链节点可以发起区块链认证并寻求写入存储在区块链层216中的区块链不可变账本,该区块链不可变账本的副本还可以存储在基础物理基础设施214上。区块链配置可以包括一个或多个应用224,该一个或多个应用被链接到应用编程接口(API)222以访问和执行存储的程序/应用代码220(例如,链码、智能合约等),程序/应用代码220可以根据参与者寻求的定制配置来创建,并可以维护它们自己的状态,控制它们自己的资产,并接收外部信息。这可以被部署为交易,并且经由追加到分布式账本而被安装在所有区块链节点204-210上。
区块链基础或平台212可以包括区块链数据、服务(例如,密码信任服务、虚拟执行环境等)的各个层,以及可用于接收和存储新交易并向寻求访问数据条目的审计者(auditor)提供访问的基础物理计算机基础设施。区块链层216可以暴露接口,该接口提供对处理程序代码和接合(engage)物理基础设施214所必需的虚拟执行环境的访问。密码信任服务218可以用于验证诸如资产交换交易之类的交易并保持信息私有。
图2A的区块链体系结构配置可以经由区块链平台212公开的一个或多个接口以及提供的服务来处理和执行程序/应用代码220。代码220可以控制区块链资产。例如,代码220可以存储和转移数据,并且可以由节点204-210以智能合约和具有受其执行约束的条件或其他代码元素的链码的形式执行。作为非限制性示例,可以创建智能合约以执行提醒、更新和/或受更改、更新等约束的其他通知。智能合约本身可以用于识别与授权和访问需求以及账本的使用相关联的规则。例如,读集合226可以由包括在区块链层216中的一个或多个处理实体(例如,虚拟机)进行处理。结果可以包括用于存储在区块链账本上的写集合228。可以利用物理基础设施214来检索本文描述的任何数据或信息。
智能合约可以经由高级应用和编程语言被创建,然后被写入区块链中的区块。智能合约可以包括使用区块链(例如,区块链对等体的分布式网络)注册、存储和/或复制的可执行代码。交易是智能合约代码的执行,该智能合约代码可以响应于与智能合约相关联的条件被满足而被执行。智能合约的执行可以触发对数字区块链账本状态的(一个或多个)受信任的修改。可以通过一个或多个共识协议在整个区块链对等体的分布式网络中自动复制由智能合约执行引起的对区块链账本的(一个或多个)修改。
智能合约可以以键值对的格式将数据写入区块链。此外,智能合约代码可以读取存储在区块链中的值,并将它们用于应用操作中。智能合约代码可以将各种逻辑操作的输出写入区块链。该代码可用于在虚拟机或其他计算平台中创建临时数据结构。写入区块链的数据可以是公开的和/或可以被加密并被维护为私有。智能合约使用/生成的临时数据由所提供的执行环境保持在存储器中,然后一旦识别出区块链所需的数据,就被删除。
链码可以包括具有附加特征的智能合约的代码解释。如本文所述,链码可以是部署在计算网络上的程序代码,在计算网络上链码在共识过程期间由链验证器一起执行和验证。链码接收哈希,并从区块链中检索与通过使用先前存储的特征提取器创建的数据模板相关联的哈希。如果哈希标识符的哈希与从所存储的标识符模板数据创建的哈希匹配,则链码将授权密钥发送到所请求的服务。链码可以将与密码细节相关联的数据写入区块链。
图2B示出了根据示例实施例的区块链的节点之间的区块链交易流程250的示例。参考图2B,交易流程可以包括由应用客户端节点260发送到背书对等节点281的交易提议291。背书对等节点281可以验证客户端签名并执行链码功能以发起交易。输出可以包括链码结果、在链码中读取的一组键/值版本(读集合)和在链码中写入的一组键/值(写集合)。如果被批准,则提议响应292与背书签名一起被发送回客户端260。客户端260将背书组装到交易有效载荷293中,并将它广播到排序服务节点284。排序服务节点284然后将排序的交易作为区块递送给通道上的所有对等体281-283。在提交到区块链之前,每个对等体281-283可以验证交易。例如,对等体可以检查背书策略,以确保正确份额的指定对等体已经对结果进行了签名并针对交易有效载荷293认证了签名。
再次参考图2B,客户端节点260通过构造请求并将请求发送给作为背书者的对等节点281来发起交易291。客户端260可以包括利用支持的软件开发工具包(SDK)的应用,该应用利用可用的API来生成交易提议。该提议是调用链码功能的请求,使得可以将数据读取和/或写入账本(即,为资产写入新的键值对)。SDK可以充当填充程序(shim),以将交易提议打包为适当的体系结构格式(例如,远程过程调用(RPC)上的协议缓冲区),并采用客户端的密码凭证为交易提议产生唯一的签名。
作为响应,背书对等节点281可以验证(a)交易提议格式良好,(b)过去尚未提交该交易(重放-攻击保护),(c)签名有效,以及(d)提交者(在此示例中为客户端260)被适当授权以在该通道上执行提议的操作。背书对等节点281可以将交易提议输入作为调用的链码功能的参数。然后针对当前状态数据库执行链码,以产生包括响应值、读集合和写集合的交易结果。但是,此时尚未对账本进行更新。在292中,该组值以及背书对等节点281的签名作为提议响应292被传递回客户端260的SDK,该SDK解析用于让应用消费的有效载荷。
作为响应,客户端260的应用检查/验证背书对等体的签名,并比较提议响应以确定提议响应是否相同。如果链码仅查询账本,则应用将检查查询响应,并且通常不将交易提交至排序节点服务284。如果客户端应用打算将交易提交至排序节点服务284以更新账本,则应用在提交之前确定指定的背书策略是否已被实现(即,交易所需的所有对等体是否都对交易进行背书)。在此,客户端可以仅包括交易的多方之一。在这种情况下,每个客户端可能有它们自己的背书节点,并且每个背书节点都需要对交易进行背书。该体系结构使得即使应用选择不检查响应或以其他方式转发未被背书的交易,背书策略仍将由对等体强制执行并在提交验证阶段得到维持。
在成功检查之后,在步骤293中,客户端260将背书组装到交易中,并向排序节点284广播交易消息内的交易提议和响应。交易可以包含读/写集合,背书对等体的签名和通道ID。排序节点284不需要检查交易的全部内容以执行其操作,而是排序节点284可以仅从网络中的所有通道接收交易,按时间顺序按通道对它们进行排序,并创建每个通道的交易区块。
交易区块从排序节点284被递送到通道上的所有对等节点281-283。验证区块内的交易294,以确保满足任何背书策略,并确保自交易执行生成读集合以来,用于读集合变量的账本状态没有变化。区块中的交易被标记为有效或无效。此外,在步骤295中,每个对等节点281-283将区块追加到通道的链上,并且对于每个有效交易,将写集合提交给当前状态数据库。发出事件以通知客户端应用交易(调用)已被不可变地追加到链上,以及通知交易是经过验证的还是无效的。
图3A示出了许可的区块链网络300的示例,其特征是分布式的、去中心化的对等体系结构。在此示例中,区块链用户302可以发起针对许可的区块链304的交易。在此示例中,交易可以是部署、调用或查询,并且可以通过利用SDK的客户侧应用、直接通过API等发布。网络可以向诸如审计者之类的监管者306提供访问。区块链网络运营商308管理成员许可,诸如将监管者306注册为“审计者”,并将区块链用户302注册为“客户”。审计者可能只限于查询账本,而客户可以被授权部署、调用和查询某些类型的链码。
区块链开发者310可以编写链码和客户侧应用。区块链开发者310可以通过接口将链码直接部署到网络。为了将来自传统数据源312的凭证包括在链码中,开发者310可以使用带外连接来访问数据。在该示例中,区块链用户302通过对等节点314连接到许可的区块链304。在继续进行任何交易之前,对等节点314从管理用户角色和许可的证书机构316检索用户的注册和交易证书。在一些情况下,区块链用户必须拥有这些数字证书以在许可的区块链304上进行交易。同时,可能要求尝试利用链码的用户验证他们关于传统数据源312的凭证。为了确认用户的授权,链码可以通过传统处理平台318使用到该数据的带外连接。
图3B示出了许可的区块链网络320的另一示例,其特征是分布式的、去中心化的对等体系结构。在该示例中,区块链用户322可以将交易提交至许可的区块链324。在该示例中,交易可以是部署、调用或查询,并且可以通过利用SDK的客户侧应用、直接通过API等发布。网络可以向诸如审计者之类的监管者326提供访问。区块链网络运营商328管理成员许可,诸如将监管者326注册为“审计者”,并将区块链用户322注册为“客户”。审计者可能只限于查询账本,而客户可以被授权部署、调用和查询某些类型的链码。
区块链开发者330编写链码和客户侧应用。区块链开发者330可以通过接口将链码直接部署到网络。为了将来自传统数据源332的凭证包括在链码中,开发者330可以使用带外连接来访问数据。在该示例中,区块链用户322通过对等节点334连接到网络。在继续进行任何交易之前,对等节点334从证书机构336检索用户的注册和交易证书。在一些情况下,区块链用户必须拥有这些证书以在许可的区块链324上进行交易。同时,可能要求尝试利用链码的用户验证他们关于传统数据源332的凭证。为了确认用户的授权,链码可以通过传统处理平台338使用到该数据的带外连接。
在一些实施例中,本文的区块链可以是无需许可的区块链。与需要许可来加入的许可区块链相反,任何人都可以加入无需许可的区块链。例如,要加入无需许可的区块链,用户可以创建个人地址并通过提交交易并因此向账本添加条目来开始与网络进行交互。此外,所有各方都可以选择在系统上运行节点并采用挖掘协议来帮助验证交易。
图3C示出了由包括多个节点354的无需许可的区块链352正在处理的交易的过程350。发送者356希望经由无需许可的区块链352将支付或一些其他形式的价值(例如,契约、病历、合同、商品、服务或可以封装在数字记录中的任何其他资产)发送至接收者358。在一个实施例中,发送者设备356和接收者设备358中的每一个可以具有(与区块链352相关联的)数字钱包,该数字钱包提供用户界面控制和交易参数的显示。作为响应,交易在整个区块链352中广播到节点354。取决于区块链352的网络参数,节点基于由无需许可的区块链352创建者建立的规则(其可以被预先定义或动态分配)验证360交易。例如,这可以包括验证所涉及的各方的身份等。交易可以立即被验证,或者它可以与其他交易一起被置于队列中,并且节点354基于一组网络规则确定交易是否有效。
在构建(structure)362中,有效交易被形成到区块中并用锁(哈希)密封。该过程可以由节点354之中的挖掘节点来执行。挖掘节点可以利用专门用于为无需许可的区块链352挖掘和创建区块的附加软件。每个区块可以由使用网络约定的算法创建的哈希(例如,256位数字等)来识别。每个区块可能包括头部、指向链中的先前区块的头部的哈希的指针或对该哈希的引用,以及一组有效的交易。对先前区块的哈希的引用与安全独立的区块的链的创建相关联。
在区块被添加到区块链之前,区块必须被验证。对于无需许可的区块链352的验证可以包括工作量证明(PoW),它是对源自区块的头部的难题的解决方案。尽管在图3C的示例中未示出,但是用于验证区块的另一过程是权益证明。与工作量证明不同的是,在工作量证明中,算法奖励解决数学问题的矿工,而在权益证明中,新区块的创建者取决于其财富(也被定义为“权益”)以确定性的方式被选择。然后,类似的证明由所选择(selected/chosen)的节点执行。
在挖掘364中,节点尝试通过对一个变量进行增量更改,直到解决方案满足网络范围的目标为止来解决该区块。这创建PoW,从而确保正确答案。换句话说,一个潜在的解决方案必须证明在解决问题时消耗了计算资源。在一些类型的无需许可的区块链中,矿工可能会因正确开采区块而被奖励价值(例如,币等)。
在此,PoW过程以及区块的链接使区块链的修改极为困难,因为攻击者必须修改所有后续区块,以使得一个区块的修改被接受。此外,随着新区块被挖掘,修改区块的难度增加,并且后续区块的数量增加。在分发366中,成功验证的区块通过无需许可的区块链352分发,并且所有节点354将区块添加到多数链,该多数链是无需许可的区块链352的可审计账本。此外,由发送者356提交的交易中的价值被存入或以其他方式转移到接收者设备358的数字钱包。
在图4A-图4G的示例中,提供了各种示例,其中近似哈希验证可以代替完整步数哈希验证或与完整步数哈希验证一起被执行。近似哈希验证仅计算缩减步数哈希运算,并且不执行完整步数哈希运算的所有步骤。因此,近似哈希验证更快并且消耗更少的资源。为了启用近似哈希验证,提交经哈希的数据的客户端、节点等可以提交数据的完整步数哈希和数据的缩减步数哈希两者。缩减步数哈希使用与完整步数哈希相同的函数生成,但被执行较少的次数/轮次。因此,客户端、节点等提交缩减步数哈希和完整步数哈希两者不需要附加的计算。
哈希计算(hashing)用于任何区块链协议中的许多地方(例如,所有通信的数字签名都包括哈希,交易的每个区块的哈希都被存储在下一个区块的头部中,智能合约状态的哈希用于验证跨不同节点的账本的一致性,应用程序可以使用哈希来验证它记录在区块链上的数据尚未被篡改等)。哈希无论被存储在何处,示例实施例都可以代替完整步数哈希或除完整步数哈希之外存储缩减步数哈希。这将允许任何验证者验证完整哈希函数输出或缩减步数哈希函数输出。
图4A至图4B示出了根据示例实施例的存储数据并执行所存储的数据的近似哈希验证的过程。在图4A的示例中,在过程400A期间,客户端406经由区块链对等节点404将交易405提交至区块链402。在此,客户端406在将交易405提交至对等节点404之前对交易405进行哈希。在此示例中,客户端406提交交易405的缩减步数哈希和交易405的完整步数哈希两者。在此示例中,交易405可以包括用于存储在区块链402上的任何希望的交易。交易(在本文中也被称为区块链条目、存储请求等)可以在一个以上的当事方之间或者可以与单个当事方相关联。
参考图4B,节点(例如客户端节点406或另一个节点408)想要验证交易405已经被正确地记录在区块链402上。例如,提交客户端406可能希望验证交易的输出已经被正确注册(例如,执行交易以转移10个货币代币等)。在此,客户端406可以验证余额已经被正确扣除10个代币等。更一般地说,提交要被包括在区块链中的交易的任何客户端应用或区块链节点都可以检查被添加到链中的区块中交易的哈希,以确保该交易已经被正确添加。
在图4B的处理器400B中,对等节点404检索交易的缩减步数哈希409。在此情况下,客户端406可以基于缩减步数哈希409而不是完整步数哈希来执行近似哈希验证。在此,为了执行近似哈希验证,客户端406可以生成交易的缩减步数哈希的本地副本,并将它与所检索到的存储在区块链402上的缩减步数哈希409进行比较。如果本地生成的缩减步数哈希与所检索到的缩减步数哈希409匹配,则客户端406可以验证交易已被正确记录。
图4C示出了根据示例实施例的区块链节点411经由近似哈希验证执行恢复操作的过程410。参考图4C,区块链节点411可以是对等节点、背书者节点、排序节点、其组合等。在此示例中,区块链节点411已经检测到在由区块链节点411管理的分布式账本的本地副本内的区块数据的存储中已发生的中断。中断的原因包括停电/故障、数据损坏、恶意软件/攻击等。在此示例中,区块链节点411可以请求从一个或多个其他对等节点(诸如同样存储分布式账本的本地副本的对等节点412和对等节点414)恢复丢失/损坏的数据。
在此示例中,区块链节点411可以从第一对等节点412恢复丢失的区块。在此示例中,第一对等节点412可以存储通过缩减步数哈希而不是完整步数哈希链接在一起的区块序列413。在此情况下,区块的头部或其他内容可以(经由缩减步数哈希)被哈希处理并存储在下一个区块中,以在区块之间创建链接。当区块链节点411接收到序列413时,它可以执行近似哈希验证,并比较存储在区块中的每个交易的哈希以及区块被链接在一起的方式(其中区块的哈希存在于下一个区块中,依此类推),以验证这些区块没有被篡改。比较这些哈希向恢复对等体411提供了如下保证:它已经接收到的数据是正确的区块链数据,并且没有被它为了获取数据而联系的对等体所篡改。
作为可选过程,区块链节点411可以从第二对等体414检索已经被哈希并使用完整步数哈希被链接在一起的区块序列415。在此情况下,区块序列415可以是与区块序列413相同的区块内容,其中完整步数哈希而不是缩减步数哈希被执行。作为响应,区块链节点411可以使用近似哈希验证来验证每个区块的哈希被包括在下一个区块中,并且还可以验证区块的哈希是如第二对等体414所提供的(可选地)。
图4D示出了根据示例实施例的经由近似哈希验证来验证未花费的交易的过程420。各种区块链平台采用未花费的交易输出模型(UTXO)(诸如比特币、以太坊和Corda)以用于检查和防止重复花费。在此,每个对等节点创建交易的哈希的Merkle树,并存储每个区块的Merkle根。每个节点还维护未花费的交易输出(不是任何其他交易的输入的输出)的列表。
参考图4D,客户端在提交交易时需要证明他们的输入尚未被花费。为此,客户端可以通过提供包含输入的区块的Merkle树中的有效路径来证明交易是未花费的。每个对等体可以通过从所提供的哈希计算Merkle根来验证UTXO尚未被花费。在图4D的示例中,交易C是未花费的。为了验证这一点,客户端可以提供缩减步数哈希的路径,该路径包括缩减步数哈希421、缩减步数哈希422、缩减步数哈希423、缩减步数哈希424和根哈希425。在此,根哈希425包括缩减步数哈希424、423、422和421的路径的级联。在此情况下,对等体可以从第一哈希421到根哈希424计算Merkle路径中所有条目以及所引用的交易的哈希,并检查结果是否确实是所引用的区块的Merkle根(这证明了所引用的交易确实是区块链上的交易)。
在此示例中,区块链中的每个对等体都会为每个区块创建所有交易的哈希的Merkle树。此外,每个区块的树的Merkle根被维持为区块的标识符。每个对等体还维护UTXO(未花费的交易输出)列表。当客户提交交易时,这将为它的每个输入提供它未花费的证明。在此,针对客户端的交易中的每个输入,客户端提供正在被该输入花费的交易输出在区块链中的位置。这是通过提供哈希的Merkle路径完成的,当该Merkle路径与所引用的交易全部被哈希在一起时,将产生包含该UTXO的区块的Merkle根。
图4E示出了根据示例实施例的基于缩减步数哈希将数据文件432存储在区块链444上的过程430。在此示例中,客户端431将数据文件432提交至对等节点440以用于存储在区块链444上。在此示例中,客户端431可以随后确定数据文件432(其可以被添加在区块链交易内)是否以任何方式被篡改。作为非限制性示例,数据文件431可以是文档、视频、音频、多媒体文件等。例如,对于被交付至制造商的商品,供应商可以将发票文档作为交易添加到区块链444。制造商也有发票的副本,可以验证区块链上的交易,以确保它的发票副本实际上是正确的并且没有被篡改。
参考图4E,对等节点440可以接收数据文件432以及文件432的缩减步数哈希和数据文件432的完整步数哈希。作为响应,对等节点440可以在区块链444上存储包括完整步数哈希和缩减步数哈希的交易434。同时,数据文件432可以在链下被存储在数据库442上,以节省区块链上的存储空间。然而,实施例不限于此,并且数据文件可以被存储在区块链444上。当数据文件432被链下存储时,对等节点440可以存储包括缩减步数哈希和完整步数哈希的交易434内的链下数据文件的位置的元数据。
因此,数据文件432可以作为交易434由客户端431添加到区块链444或外部数据库。在此示例中,数据文件432的缩减步数哈希可以用于验证数据文件432是正确的。例如,当另一个用户(未示出)需要访问该数据文件432时,该用户可以检索缩减步数哈希并执行近似哈希验证以验证数据文件432是正确的。在此情况下,另一用户可以生成缩减步数哈希的本地副本,并将它与存储在区块链444上的副本进行比较以验证它没有被篡改。
图4F示出了根据示例实施例的基于近似验证将数据提交至区块链的过程450。在此示例中,客户端451将交易提交至排序节点452。排序节点可以将该交易与其他交易一起布置在数据区块453中,并且将数据区块453发送到区块链网络内的提交对等节点454、455和456。这里的好处是,可以使用近似哈希验证来执行检查客户端451的真实性、消息/区块的完整性以及执行任何访问控制(例如,客户端是否被授权调用此特定的智能合约交易)。
在此示例中,客户端451可以用它们的私钥对提交的交易进行数字签名(数字签名是对交易的哈希的加密运算,并且此外还可以包括对近似哈希的相同加密运算)。在此示例中,每个提交对等体454-456可以使用客户端的公钥来验证数字签名。在此,如果交易的签名与客户端的签名相匹配,则对等体确保(a)除了私钥的拥有者(客户端)之外,不可能有任何人已经提交交易,(b)从客户端对交易签名到对等体接收到交易时,没有人更改过交易,从而保证交易提交的完整性,以及(c)检查客户端是否被授权执行此操作,例如,客户端是在花费他们自己的资金还是试图花费他人的资金?(后者将作为无效的而被拒绝;签名允许此检查)。在此情况下,如果客户端451包括交易的缩减步数哈希以及原始的完整步数哈希两者,则对等体454-456中的一个或多个对等体可以执行近似哈希验证检查而不是完整哈希步数检查。
此外,区块(包括区块453)可被使用缩减步数哈希而不是完整步数哈希被链接在一起。因此,在将区块453提交至区块链(分布式账本)之前,提交对等节点454-456可以对区块的链和区块内的交易执行近似哈希验证。
图4G示出了根据示例实施例的支持近似哈希验证的背书过程460。参考图4G,客户端461将交易提交至多个背书者节点462、463和464。在此示例中,交易由客户端461签名。产生签名的客户端461可以产生签名的原始的完整步数哈希值和签名的缩减步数哈希值。背书者对等节点462、463和464中的每个可以确定是仅验证近似签名还是验证完整签名。
在背书过程460中,存在两个被验证的签名。每个背书者462-464验证客户端签名。在此情况下,背书者中的一个或多个可以验证原始哈希,而一个或多个其他背书者可以仅验证近似签名。哪个背书者执行哪个验证可以由背书策略预先定义。此外,区块链平台可以附加地规定必须存在多少个完整节点(非近似)以确保健壮性/容错性。例如,除了指定n个背书对等体中的k个必须执行完整步数背书外,平台还可以指定k个背书者中的最多k'个背书者应用缩减步数背书(每个背书者在它们签名的响应中包括它们是否应用了近似)。在共识期间,区块链协议可以指定应用近似的最大节点数。相比验证原始哈希的背书者节点,验证近似哈希的背书者节点获得了时间和计算成本。
在第二签名中,每个背书者然后执行交易并对输出进行数字签名。当他们这样做时,他们也可以添加近似哈希值,这是一个中间步骤输出。网络中的所有对等体都验证所有背书者的签名,以确保所有背书者均已签名。在此同样,对等体可以对每个交易执行所有背书者签名的完整验证或近似验证。如果所有签名都有效,则交易被选择以提交到账本。
背书者是否执行了近似验证可以通过说明此为真或假的背书响应(或任何其他确认消息)中的附加标志来表示。可替代地,当对等体加入网络时,它可以作为“近似对等体”加入,从而通知其他对等体它将仅执行近似验证(例如,资源受限的节点)。此信息可以记录在区块链上或可以不记录在区块链上。区块链配置还可以限制网络中这样的近似对等体的数量,以确保可靠性。
尽管在图4A-图4G中未示出,但是示例实施例可以被应用于的另一维度是在哪些对等体执行近似验证方面。例如,组织可以在网络中运行多个对等体。对等体之一可以是完整对等体,而其他对等体执行近似验证。如果他们产生错误,他们可以参考完整对等体以获得正确的结果。作为另一个示例,网络中的一些对等体可能是资源受限的(包括IoT设备),它们可能会发现与其他完整对等体保持同步是困难的。这些资源受限的设备可以执行近似验证,以与网络中的所有对等体保持同步。作为另一个示例,对等体可以具有关于执行近似验证的轮换策略。例如,第一对等体可以对区块1-10执行近似验证,第二对等体可以对区块11-20执行近似验证,依此类推。这将允许每个对等体节省计算时间,并且总体而言与每个节点始终执行完整验证时相比,网络可以更快地运行。
图5A示出了根据示例实施例的在区块链上存储交易的缩减步数哈希的方法500A。例如,方法500A可以由区块链的客户端应用执行。参考图5A,在501中,该方法可以包括:从客户端应用向一个或多个区块链节点发送在区块链上对存储请求进行存储的消息。例如,消息可以包括存储请求的完整步数哈希和存储请求的缩减步数哈希。在一些实施例中,该方法还可以包括通过对存储请求的数据值重复执行哈希函数达第一预定次数来生成存储请求的完整步数哈希,以及通过对存储请求的数据值重复执行哈希函数达小于第一预定次数的第二预定次数来生成存储请求的缩减步数哈希。
在一些实施例中,由存储请求的缩减步数哈希创建的数据值的长度等于由存储请求的完整步数哈希创建的数据值的长度。在一些实施例中,存储请求的缩减步数哈希可以被存储在区块链的Merkle树数据结构内。在一些实施例中,存储请求的缩减步数哈希可以包括区块链条目(诸如从客户端提供的交易)的缩减步数哈希。
在502中,该方法可以包括从区块链节点接收指示存储请求的缩减步数哈希被存储在区块链上的记录确认。此外,在503中,该方法可以包括由客户端应用基于存储请求的缩减步数哈希的近似哈希验证来验证存储请求的记录是否正确。例如,近似哈希验证可以包括生成存储请求的缩减步数哈希并将它与存储在区块链上的缩减步数哈希进行比较以进行验证,而不生成存储请求的完整步数哈希。在一些实施例中,该方法还可以包括响应于存储请求的缩减步数哈希的近似哈希验证是成功的,经由客户端应用的用户设备显示成功通知。
图5B示出了根据示例实施例的执行存储在区块链上的交易的近似哈希验证的方法500B。例如,方法500B可以由区块链上的对等节点执行。参考图5B,在506中,该方法可以包括:从客户端应用接收具有用于在区块链上存储的存储请求的消息,该消息包括存储请求的完整步数哈希和存储请求的缩减步数哈希。在此,可以通过客户端应用对存储请求的数据值重复执行哈希函数达第一预定次数来生成完整步数哈希,并且可以通过对存储请求的数据值重复执行哈希函数达小于第一预定次数的第二预定次数来生成缩减步数哈希。
在507中,该方法可以包括由区块链对等节点确定是将存储请求存储为缩减步数哈希还是完整步数哈希。例如,确定可以是随机的、由区块链策略预定的、基于存储请求中的标识符而是确定性的等。在508中,响应于确定将存储请求存储为缩减步数哈希,该方法可以包括将存储请求的缩减步数哈希提交至包括在哈希链接的区块的链中的区块。在一些实施例中,由存储请求的缩减步数哈希创建的数据值的长度等于由存储请求的完整步数哈希创建的数据值的长度。在一些实施例中,提交包括将存储请求的缩减步数哈希存储在区块链的Merkle树数据结构内。在一些实施例中,存储请求的缩减步数哈希可以包括区块链条目(诸如交易)的缩减步数哈希。
图5C示出了根据示例实施例的故障区块链节点基于近似哈希验证执行恢复的方法510A。对等节点可能由于各种各样的原因而发生故障,这些原因例如停电、恶意攻击、维护等。为了恢复丢失的区块,故障节点可以执行图5C的方法。参考图5C,在511中,该方法可以包括:从区块链对等节点接收存储在分布式账本上的哈希链接的区块的链中的区块序列,其中,区块序列中的每个区块包括来自序列中先前区块的区块内容的缩减步数哈希。在一些实施例中,该方法还可以包括:响应于故障的区块链对等节点处的崩溃,或响应于另一区块链对等节点处的恢复操作,向区块链对等节点发送对区块序列的请求。
在512中,该方法可以包括对存储在区块序列之中的缩减步数哈希执行近似哈希验证。此外,在513中,该方法可以包括基于对缩减步数哈希的近似哈希验证来确定区块序列是否已经被篡改。如果区块未被篡改,则故障节点可以确定该区块是正确的,并将该区块存储在它的区块链上。近似哈希验证可以将序列中的区块内的缩减步数哈希与由缩减步数哈希所链接的先前区块中包括的内容进行比较,以确定哈希是否正确。以此方式,节点可以使用近似哈希验证而不是完整哈希验证来执行每个哈希链接的验证。
在一些实施例中,该方法还可以包括:从第二区块链对等节点接收区块序列的第二版本,其中,区块序列的第二版本中的每个区块包括来自序列中的先前区块的区块内容的完整步数哈希,其中,完整步数哈希包括对哈希内容重复执行哈希函数达比缩减步数哈希的次数更大的次数。在一些实施例中,该方法还可以包括:基于包括从第二区块链对等节点接收的完整步数哈希的区块序列的第二版本,验证包括从区块链对等节点接收的缩减步数哈希的区块序列。在一些实施例中,区块序列之中的每个区块可包括链中先前区块的头部的缩减步数哈希。为了验证链接,节点可以通过计算相同的缩减步数哈希来验证头部的缩减步数哈希。在一些实施例中,对于序列中的每个区块,近似哈希验证可以验证序列中的先前区块的头部的缩减步数哈希被包括在相应的区块中。
图5D示出了根据示例实施例的发送具有缩减步数哈希的区块序列的方法510B。例如,方法510B可以由区块链上的恢复节点执行,以用于恢复发生故障的对等节点。在516中,该方法可以包括经由区块链账本存储哈希链接的区块的链,其中哈希链接的区块的链经由使用缩减步数哈希生成的哈希内容链接在一起。在此,使用先前区块的缩减步数哈希而不是与完整步数哈希链接区块。
在517中,该方法还可以包括:从故障的对等节点接收对来自所存储的哈希链接的区块的链之中的区块序列的请求。当节点脱机或记录损坏的区块序列时,可能会发生故障。在518中,该方法可以包括向故障的对等节点发送使用缩减步数哈希内容链接在一起的所请求的区块序列。
在一些实施例中,该方法还可以包括接收哈希链接的区块的链的区块内容,其包括区块内容的完整步数哈希和区块内容的缩减步数哈希。在一些实施例中,区块内容的完整步数哈希可以通过哈希函数的第一预定次数的重复执行来创建,并且区块内容的缩减步数哈希可以通过哈希函数的小于第一预定次数的第二预定次数的重复执行来创建。在一些实施例中,该方法还可以包括确定发送基于预定的区块链策略经由缩减步数哈希内容而不是完整步数哈希内容被链接在一起的区块序列。在一些实施例中,区块序列之中的每个区块可包括链中先前区块的头部的缩减步数哈希。
图5E示出了根据示例实施例的基于近似哈希验证来确定交易是否未花费的方法520A。例如,未花费的交易验证可以由对等节点执行。参考图5E,在521中,该方法可以包括接收存储在区块链的数据结构上的输出的位置,其中该位置包括由区块链的缩减步数哈希而不是完整步数哈希生成的哈希路径。在此示例中,该位置可以包括哈希链接的区块的链内的区块。该位置可以通过基于交易到存储该交易的数据结构中的根节点的路径的哈希序列来识别。在此示例中,哈希路径在被哈希在一起时可以产生区块链中的存储未使用的输出的数据区块的标识符。在此示例中,完整步数哈希可以包括哈希函数的第一预定次数的重复执行,并且缩减步数哈希可以包括哈希函数的小于第一预定次数的第二预定次数的重复执行。
在522中,该方法可以包括基于缩减步数哈希值对哈希路径执行近似哈希验证,以验证输出是否是未使用的。此外,响应于作为近似哈希验证的结果确定输出是未使用的,在523中,该方法还可以包括批准与输出相关联的客户端对输出的使用。在一些实施例中,近似哈希验证可以包括生成路径中的每个节点的缩减步数哈希,以及验证所生成的结果是否是数据区块的标识符。
在一些实施例中,哈希路径可以包括在Merkle树上从对应于交易的节点到Merkle树的根节点的哈希路径。在一些实施例中,路径上的每个节点可以包括来自数据结构中的它的子节点的数据的缩减步数哈希。在一些实施例中,响应于作为近似哈希验证的结果确定输出已被使用,该方法还可以包括防止对输出的使用。
图5F示出了根据示例实施例的基于近似哈希验证来确定交易是否未花费的另一方法520B。参考图5F,在526中,该方法可以包括接收存储在区块链的数据结构上的输出的哈希后的标识符,其中该哈希后的标识符是由区块链的缩减步数哈希而不是完整步数哈希生成的。在此示例中,哈希后的标识符可以包括对区块链中的存储未使用的输出的数据区块的识别。
在527中,该方法可以包括基于缩减步数哈希来对哈希后的标识符执行近似哈希验证,以验证输出是否是未使用的。响应于作为近似哈希验证的结果而确定输出是未使用的,在528中,该方法可以包括批准与输出相关联的客户端对输出的使用。在一些实施例中,哈希后的标识符可以通过基于存储在区块链数据结构中的输出的路径来执行一连串的缩减步数哈希来生成。在一些实施例中,该方法还可以包括响应于作为近似哈希验证的结果而确定输出是已使用的,防止使用输出。在一些实施例中,该方法还可以包括存储多个数据区块的哈希后的标识符和存储在每个数据区块中的输出的标识符。
图5G示出了根据示例实施例的在区块链上存储媒体文件的缩减步数哈希的方法530A。例如,该方法可以由存储媒体文件的哈希的对等节点执行。参考图5G,在531中,该方法可以包括将数据文件的完整步数哈希和数据文件的缩减步数哈希存储在区块链的哈希链接的区块的链中的数据区块内。例如,数据文件可以包括音频文件、视频文件、文档、图像和多媒体文件中的一个或多个。
在532中,该方法可以包括从客户端应用接收用于验证数据文件的请求。作为响应,在533中,该方法可以包括基于该请求确定是提供数据文件的完整步数哈希还是提供数据文件的缩减步数哈希,以及响应于确定提供缩减步数哈希,在534中,该方法可以包括向客户端应用发送数据文件的缩减步数哈希。在这些示例中,数据文件的完整步数哈希可以通过对数据文件重复执行哈希函数达第一预定次数来生成,并且数据文件的缩减步数哈希可以通过对数据文件重复执行哈希函数达小于第一预定次数的第二预定次数来生成。
在一些实施例中,基于区块链的预定策略和所接收的请求内的通知元素中的一项或多项来确定提供数据文件的缩减步数哈希。作为另一示例,该确定可以基于来自客户端(或其他节点)的请求内的标识符等。在一些实施例中,数据文件的完整步数哈希和数据文件的缩减步数哈希两者都从与提交请求的客户端应用不同的客户端应用被接收。
图5H示出了根据示例实施例的对存储在区块链上的媒体文件执行近似哈希验证的方法530B。该方法可以由客户端节点、对等节点等执行。在536中,该方法可以包括从区块链对等节点接收哈希后的数据文件,其中该哈希后的数据文件的数据先前被存储在区块链上的哈希链接的区块的链内。在此示例中,哈希后的数据文件可以包括音频文件、视频文件、文档、图像和多媒体文件中的一个或多个的哈希。
在537中,该方法可以包括检测哈希后的数据文件是使用完整步数哈希还是缩减步数哈希进行哈希的。响应于检测到哈希后的数据文件是使用缩减步数哈希进行哈希的,在538中,该方法可以包括通过哈希后的数据文件的近似哈希验证来确定哈希后的数据文件是否已被篡改。在一些实施例中,完整步数哈希可以包括对数据文件重复执行哈希函数达第一预定次数,并且缩减步数哈希包括对数据文件重复执行哈希函数达小于第一预定次数的第二预定次数。
在一些实施例中,由被应用于数据文件的缩减步数哈希创建的数据值的长度等于由被应用于数据文件的完整步数哈希创建的数据值的长度。在一些实施例中,该确定可以包括生成数据文件的本地副本的缩减步数哈希,并基于数据文件的本地副本的缩减步数哈希来验证检索到的哈希后的数据文件。在一些实施例中,数据文件可以包括被链下存储的媒体文件,而哈希后的数据文件的哈希结果被存储在哈希链接的区块的链之中的数据区块内。
图5I示出了根据示例实施例的背书者节点之间的近似哈希验证的方法540A。例如,方法540A可以由从区块链上的多个对等体(背书者节点)接收背书的客户端节点来执行。参考图5I,在541中,该方法可以包括从客户端应用向区块链的多个背书者节点发送所提议的存储请求。在此,该发送可以包括向多个背书者节点发送由客户端应用签名的所提议的存储请求的完整步数哈希和由客户端应用签名的存储请求的缩减步数哈希。
在542中,该方法可以包括:从第一背书者节点接收存储请求的第一背书,该第一背书包括所提议的存储请求的完整步数哈希验证。此外,在543中,该方法可以包括从第二背书者节点接收存储请求的第二背书,该第二背书包括存储请求的缩减步数哈希验证。根据各种实施例,完整步数哈希验证可以包括由客户端应用签名的所提议的存储请求的完整步数哈希的验证,并且缩减步数哈希验证包括由客户端应用签名的所提议的存储请求的缩减步数哈希的近似验证。
在544中,该方法还可以包括将向区块链的排序节点发送包括完整步数哈希背书和缩减步数哈希背书的存储提议。例如,所提议的存储请求可以包括诸如要被存储在哈希链接的数据区块的链之中的数据区块中的区块链条目(诸如交易)。
在一些实施例中,由所提议的存储请求的缩减步数哈希创建的数据值的长度等于由所提议的存储请求的完整步数哈希创建的数据值的长度。在一些实施例中,完整步数哈希可以包括对所提议的存储请求的数据值重复执行哈希函数达第一预定次数,并且缩减步数哈希可以包括对所提议的存储请求的数据值重复执行哈希函数达小于第一预定次数的第二预定次数。在一些实施例中,第二背书可以经由包括消息元素的消息被接收,该消息元素指示消息包括缩减步数哈希验证。
图5J示出了根据示例实施例的使用缩减步数哈希验证来对交易进行背书的方法540B。该方法可以由区块链中的背书者节点执行。参考图5J,在546中,该方法可以包括:从客户端应用接收存储请求,该存储请求包括由客户端应用签名的数据值的完整步数哈希和由客户端应用签名的数据值的缩减步数哈希。例如,数据值的完整步数哈希可以通过哈希函数的第一预定次数的重复执行来生成,并且数据值的缩减步数哈希可以通过哈希函数的小于第一预定次数的第二预定次数的重复执行来生成。
在547中,该方法可以包括确定验证存储请求的完整步数哈希还是验证存储请求的缩减步数哈希。在此,该确定可以基于区块链策略、预定指令、消息中的元素、随机地进行等。响应于确定验证存储请求的缩减步数哈希,在548中,该方法可以包括为数据值的缩减步数哈希生成近似哈希验证,并且在549中,该方法可以包括向客户端应用发送包括所生成的近似哈希验证的背书响应。
在一些实施例中,发送还可以包括发送背书响应内的指示近似哈希验证已经被执行的指示符。在一些实施例中,存储请求可以包括用于存储在哈希链接的数据区块的链之中的数据区块内的区块链条目。在一些实施例中,该方法还可以包括执行所提议的存储请求,并使用缩减步数哈希生成所提议的存储请求的哈希。
图5K示出了根据示例实施例的对数据区块执行近似哈希验证的方法550A。例如,该方法可以由管理和存储包括区块链的分布式账本的副本的区块链对等节点执行。参考图5K,在551中,该方法可以包括从排序者节点接收用于存储在区块链上的数据区块,其中该数据区块可以包括存储请求的完整步数哈希和存储请求的缩减步数哈希。在此,存储请求的完整步数哈希可以通过哈希函数的第一预定次数的应用来生成,并且存储请求的缩减步数哈希可以通过哈希函数的小于第一预定次数的第二预定次数的应用来生成。
在552中,该方法可以包括基于数据区块中包括的存储请求的缩减步数哈希来对数据区块执行近似哈希验证。此外,在553中,该方法可以包括响应于近似哈希验证的成功,将数据区块提交至存储在区块链的分布式账本内的哈希链接的数据区块的链之中。在此示例中,存储请求可以是被存储在数据区块的Merkle树数据结构内的交易。
在一些实施例中,该方法还可以包括基于随机协议确定是执行完整步数哈希验证还是执行近似哈希验证。在一些实施例中,近似哈希验证可以包括生成存储请求的缩减步数哈希以用于验证而不生成存储请求的完整步数哈希。在一些实施例中,该方法还可以包括响应于近似哈希验证的失败,将数据区块提交到存储在区块链的分布式账本内的哈希链接的数据区块的链,并带有存储请求失败的指示符。在一些实施例中,提交可以包括:将近似哈希验证存储在哈希链接的区块的链的数据区块中,以及将包括在存储提议中的文件存储在链下存储装置内。
图5L示出了根据示例实施例的对数据区块中的交易的缩减步数哈希进行排序的方法550B。例如,该方法可以由区块链上的排序节点执行。参考图5L,在556中,该方法可以包括分别从多个客户端应用接收多个存储请求的缩减步数哈希和完整步数哈希。在557中,该方法可以包括基于包括在存储请求中的时序信息(诸如时间戳等)在数据区块内布置缩减步数哈希。在此,存储请求可以包括来自区块链上不同各方的不同交易。
在558中,该方法可以包括向多个区块链对等节点发送具有排序的缩减步数哈希的数据区块以包括在区块链内。例如,存储请求的完整步数哈希可以通过哈希函数的第一预定次数的应用来生成,并且存储请求的缩减步数哈希可以通过哈希函数的小于第一预定次数的第二预定次数的应用来生成。
在一些实施例中,哈希函数可以包括应用于存储请求内的内容的非线性函数。在一些实施例中,由存储请求的完整步数哈希创建的数据值的长度等于由存储请求的缩减步数哈希创建的数据值的长度。在一些实施例中,布置可以包括以它们被接收的时间顺序来将缩减步数哈希布置在数据区块内。在一些实施例中,该方法还可以包括将完整步数哈希以及缩减步数哈希存储在数据区块中。
图6A示出了根据示例实施例的包括被配置为执行各种操作的物理基础设施610的示例系统600。参考图6A,物理基础设施610包括模块612和模块614。模块614包括区块链620和智能合约630(智能合约630可以驻留在区块链620上),其可以执行任何示例实施例中包括的(在模块612中的)操作步骤608中的任何操作步骤。步骤/操作608可以包括所描述或描绘的实施例中的一个或多个,并且可以表示从一个或多个智能合约630和/或区块链620写入或读取的输出或写入信息。物理基础设施610、模块612、以及模块614可以包括一个或多个计算机、服务器、处理器、存储器和/或无线通信设备。此外,模块612和模块614可以是相同的模块。
图6B示出了根据示例实施例的被配置为执行各种操作的另一示例系统640。参考图6B,系统640包括模块612和模块614。模块614包括区块链620和智能合约630(智能合约630可以驻留在区块链620上),其可以执行任何示例实施例中包括的(在模块612中的)操作步骤608中的任何操作步骤。步骤/操作608可以包括所描述或描绘的实施例中的一个或多个,并且可以表示从一个或多个智能合约630和/或区块链620写入或读取的输出或写入信息。物理基础设施610、模块612、以及模块614可以包括一个或多个计算机、服务器、处理器、存储器和/或无线通信设备。此外,模块612和模块614可以是相同的模块。
图6C示出了根据示例实施例的被配置为利用合约方和中介服务器之间的智能合约配置的示例系统,该中介服务器被配置为强制执行区块链上的智能合约条款。参考图6C,配置650可以表示由智能合约630驱动的通信会话、资产转移会话或过程或进程,智能合约630明确地识别一个或多个用户设备652和/或656。智能合约执行的执行、操作和结果可以由服务器654管理。智能合约630的内容可能需要作为智能合约交易的各方的实体652和656中的一个或多个的数字签名。智能合约执行的结果可以作为区块链交易被写入区块链620。智能合约630驻留在区块链620上,该区块链620可以驻留在一个或多个计算机、服务器、处理器、存储器和/或无线通信设备上。
图6D示出了根据示例实施例的包括区块链的系统660。参考图6D的示例,应用编程接口(API)网关662提供用于访问区块链逻辑(例如,智能合约630或其他链码)和数据(例如,分布式账本等)的公共接口。在该示例中,API网关662是用于通过将一个或多个实体652和656连接到区块链对等体(即服务器654)来在区块链上执行交易(调用、查询等)的公共接口。在此,服务器654是区块链网络对等组件,其保持分布式账本和世界状态的副本,从而允许客户端652和656查询有关世界状态的数据以及将交易提交到区块链网络中,在区块链网络中,取决于智能合约630以及背书策略,背书对等体将运行智能合约630。
以上实施例可以以硬件、以处理器执行的计算机程序、以固件或以上述的组合来实现。计算机程序可以体现在诸如存储介质之类的计算机可读介质上。例如,计算机程序可以驻留在随机存取存储器(“RAM”)、闪存、只读存储器(“ROM”)、可擦可编程只读存储器(“EPROM”)、电可擦可编程只读存储器(“EEPROM”)、寄存器、硬盘、可移动盘、光盘只读存储器(“CD-ROM”)或本领域已知的任何其他形式的存储介质中。
示例性存储介质可以被耦合到处理器,使得处理器可以从该存储介质读取信息,并且向该存储介质写入信息。在替代方案中,存储介质可以与处理器集成。处理器和存储介质可以驻留在专用集成电路(“ASIC”)中。在替代方案中,处理器和存储介质可作为分立组件驻留。
图7A示出了根据示例实施例的将新区块添加到分布式账本720的过程700,并且图7B示出了根据示例实施例的区块链的新数据区块结构730的内容。参考图7A,客户端(未示出)可以向区块链节点711、712和/或713提交交易。客户端可以执行从任何源接收到的指令以在区块链720上进行活动。作为示例,客户端可以是代表请求者(诸如提议区块链的交易的设备、个人或实体)的应用。多个区块链对等体(例如,区块链节点711、712和713)可以维护区块链网络的状态和分布式账本720的副本。在区块链网络中可以存在不同类型的区块链节点/对等体,包括对客户提议的交易进行模拟和背书的背书对等体以及验证背书、验证交易并将交易提交给分布式账本720的提交对等体。在此示例中,区块链节点711、712和713可以执行背书者节点、提交者节点或两者的角色。。
分布式账本720包括按区块存储不可变的、有序的记录的区块链,以及维护区块链722的当前状态的状态数据库724(当前世界状态)。每个通道可以存在一个分布式账本720,并且每个对等体为它们是其成员的每个信道维护分布式账本720的它自己的副本。区块链722是交易日志,其被构造为哈希链接的区块,其中每个区块包含N个交易的序列。区块可以包括诸如图7B所示的各种组件。区块的链接(图7A中的箭头所示)可以通过在当前区块的区块头部内添加先前区块的头部的哈希来生成。以此方式,区块链722上的所有交易都被排序并以加密方式链接在一起,从而防止在不破坏哈希链接的情况下篡改区块链数据。此外,由于链接,区块链722中的最新区块表示在它之前已经发生的每个交易。区块链722可以存储在支持仅可追加的区块链工作负载的对等文件系统(本地或附加存储装置)上。
区块链722和分布式账本722的当前状态可以存储在状态数据库724中。在此,当前状态数据表示区块链722的链交易日志中曾经包括的所有键的最新值。链码调用针对状态数据库724中的当前状态执行交易。为了使这些链码交互极其高效,所有键的最新值都存储在状态数据库724中。状态数据库724可以包括对区块链722的交易日志的索引视图,因此它可以随时从链中重新生成。在接受交易之前,一旦对等体启动,状态数据库724就可以自动恢复(或如有需要的话被生成)。
背书节点从客户端接收交易,并基于模拟的结果对交易进行背书。背书节点保持模拟交易提议的智能合约。当背书节点对交易进行背书时,背书节点创建交易背书,该交易背书是指示对模拟交易的背书的从背书节点到客户端应用的已签名的响应。对交易进行背书的方法取决于可以在链码内指定的背书策略。背书策略的示例是“大多数背书对等体必须对交易进行背书”。不同的通道可能有不同的背书策略。客户端应用将已背书的交易转发到排序服务710。
排序服务710接受已背书的交易,将它们排序为区块,并将这些区块递送给提交对等体。例如,当已经达到交易的阈值、计时器超时或其他条件达到时,排序服务710可以发起新区块。在图7A的示例中,区块链节点712是提交对等体,该提交对等体已接收到用于存储在区块链720上的新数据区块730新数据。区块链中的第一区块可以被称为创世区块,其包括关于区块链、其成员、存储在其中的数据等的信息。
排序服务710可以由一群排序者组成。排序服务710不处理交易、智能合约或维护共享账本。相反,排序服务710可以接受已背书的交易并指定将那些交易提交给分布式账本720的顺序。可以设计区块链网络的架构,以使“排序”的具体实现(例如,Solo、Kafka、BFT等)成为可插入的组件。
交易以一致的顺序被写入分布式账本720。建立交易的顺序以确保在将状态数据库724的更新提交到网络时该状态数据库724的更新有效。与通过解决密码难题或挖掘而发生排序的加密货币区块链系统(例如,比特币等)不同,在该示例中,分布式账本720的各方可以选择最适合该网络的排序机制。
当排序服务710初始化新数据区块730时,可以将新数据区块730广播给提交对等体(例如,区块链节点711、712和713)。作为响应,每个提交对等体通过检查以确保读集合和写集合仍与状态数据库724中的当前世界状态相匹配,来验证新数据区块730内的交易。具体地说,提交对等体可以确定当背书者模拟交易时存在的读取数据是否与状态数据库724中的当前世界状态相同。当提交对等体验证交易时,交易被写入分布式账本720上的区块链722,并且使用来自读-写集合中的写入数据更新状态数据库724。如果交易失败,即,如果提交对等体发现读写集合与状态数据库724中的当前世界状态不匹配,则被排序进区块的交易仍将被包括在该区块中,但它将被标记为无效,并且状态数据库724将不被更新。
参考图7B,存储在分布式账本720的区块链722上的新数据区块730(也被称为数据区块)可以包括多个数据段,诸如区块头部740、区块数据750以及区块元数据760,应该理解,各种所描绘的区块及其内容,诸如如图7B所示的新数据区块730及其内容,仅是示例,并不意味着限制示例实施例的范围。新数据区块730可以在区块数据750内存储N(例如1、10、100、500、1000、2000、3000等)个交易的交易信息。新数据区块730还可以在区块头部740内包括到(例如,在图7A中的区块链722上的)先前区块的链接。特别地,区块头部740可包括先前区块的头部的哈希。区块头部740还可以包括唯一的区块号、新数据区块730的区块数据750的哈希等等。新数据区块730的区块号可以是唯一的,并且可以以各种顺序被指派,诸如从零开始的递增/顺序的次序。
区块数据750可以存储被记录在新数据区块730内的每个交易的交易信息。例如,交易数据可以包括以下各项中的一个或多个:交易类型、版本、时间戳、分布式账本720的通道ID、交易ID、时期(epoch)、有效载荷可见性、链码路径(部署tx)、链码名称、链码版本、输入(链码和功能)、客户端(创建者)标识(诸如公钥和证书)、客户端签名、背书者的身份、背书者签名、提议哈希、链码事件、响应状态、名称空间、读集合(交易读取的键和版本列表等)、写集合(键和值的列表等)、开始键、结束键、键列表、Merkel树查询摘要等。可以为N个交易中的每一个存储交易数据。
在一些实施例中,在区块链722中的哈希链接的区块的链之中的数据区块内,区块数据750还可以存储近似哈希验证数据762,该近似哈希验证数据762可以包括缩减步数哈希、完整步数哈希、近似验证、完整验证等。近似哈希验证数据762可以基于本文描述或描绘的步骤、特征、过程和/或动作中的一个或多个而生成。因此,近似哈希验证数据762可以被存储在分布式账本720上的区块的不可变日志中。存储近似哈希验证数据762的好处中的一些好处包括当验证与区块链720相关联地存储和/或发送的哈希值时,节省计算资源。虽然在图7B中,区块链验证数据762被描绘为在区块数据750中,但是它也可以位于区块头部740或区块元数据760中。
区块元数据760可以存储元数据的多个字段(例如,作为字节阵列等)。元数据字段可以包括区块创建时的签名、对最后配置区块的引用、识别区块内的有效和无效交易的交易过滤器、对区块进行排序的排序服务的最后偏移持续时间等。签名、最后配置区块和排序者元数据可以由排序服务710添加。同时,区块的提交者(诸如区块链节点712)可以基于背书策略、读/写集合的验证等来添加有效性/无效性信息。交易过滤器可以包括大小等于区块数据750中的交易数量的字节阵列和识别交易是否有效/无效的验证码。
图7C示出了根据本文所述实施例的用于数字内容的区块链770的实施例。数字内容可以包括一个或多个文件和相关联的信息。文件可以包括媒体、图像、视频、音频、文本、链接、图形、动画、网页、文档或其他形式的数字内容。区块链的不可变、仅可追加的方面作为保护数字内容的完整性、有效性和真实性的保障,从而使其适用于适用可采纳性规则的法律程序中,或在考虑证据或对数字信息的呈现和使用以其他方式感兴趣的其他设置中。在此情况下,数字内容可以被称为数字证据。
区块链可以以各种方式形成。在一个实施例中,数字内容可以被包括在区块链本身中并且可以从该区块链本身访问。例如,区块链的每个区块可以与相关联的数字内容一起存储引用信息(例如,头部、值等)的哈希值。然后可以将哈希值和相关联的数字内容一起加密。因此,可以通过解密区块链中的每个区块来访问每个区块的数字内容,并且每个区块的哈希值可以被用作引用先前区块的基础。这可以说明如下:
Figure GDA0004074001580000231
在一个实施例中,数字内容可以不包括在区块链中。例如,区块链可以存储每个区块的内容的加密哈希,而不存储任何数字内容。数字内容可以与原始文件的哈希值相关联地存储在另一存储区域或存储器地址中。其他存储区域可以是用于存储区块链的同一存储设备,或者可以是不同的存储区域,或者甚至是单独的关系数据库。可以通过获得或查询感兴趣的区块的哈希值,然后在存储区域中查找与实际数字内容相对应地被存储的该哈希值,来引用或访问每个区块的数字内容。此操作可以例如由数据库守门者执行。这可以说明如下:
Figure GDA0004074001580000241
在图7C的示例实施例中,区块链770包括以排序的序列以加密方式链接的多个区块7781、7782、…778N,其中N≥1。用于链接区块7781、7782、…778N的加密可以是多个键控或非键控哈希函数中的任何一个。在一个实施例中,区块7781、7782、…778N经过哈希函数处理,该哈希函数从基于区块中的信息的输入产生n位字母数字输出(其中n是256或另一个数字)。这样的哈希函数的示例包括但不限于SHA型(SHA代表安全哈希算法)算法、Merkle-Damgard算法、HAIFA算法、Merkle树算法、基于随机数的算法和非防碰撞PRF算法。在另一个实施例中,可以通过与哈希函数不同的函数来以加密方式链接区块7781、7782、…778N。为了说明的目的,参考诸如SHA-2之类的哈希函数进行以下描述。
区块链中的每个区块7781、7782、…、778N包括头部、文件版本和值。由于区块链中的哈希的结果,每个块的头部和值都不同。在一个实施例中,该值可以被包括在头部中。如下面更详细描述的,文件的版本可以是原始文件或原始文件的不同版本。
区块链中的第一区块7781被称为创世区块,并包括头部7721、原始文件7741和初始值7761。用于创世区块的并且实际上在所有后续区块中使用的哈希方案可以变化。例如,可以将第一区块7781中的所有信息一次哈希在一起,或者可以分别对第一区块7781中的每个信息或信息的一部分进行哈希,然后可以对分别哈希的部分执行哈希。
头部7721可以包括一个或多个初始参数,例如,该一个或多个初始参数可以包括版本号、时间戳、随机数、根信息、难度级别、共识协议、持续时间、媒体格式、源、描述性关键字和/或与原始文件7741和/或区块链相关联的其他信息。头部7721可以(例如,通过区块链网络管理软件)自动地生成,或者可以由区块链参与者手动生成。与区块链中的其他区块7782至778N中的头部不同,创世区块中的头部7721并不引用先前的区块,仅仅是因为没有先前的区块。
创世区块中的原始文件7741可以是例如由设备捕获的数据,该数据在其被包含在区块链中之前经过处理或未经处理。通过系统的界面从设备、媒体源或节点接收原始文件7741。原始文件7741与元数据相关联,元数据例如可以由用户、设备和/或系统处理器手动或自动生成。元数据可以与原始文件7741相关联地包括在第一区块7781中。
创世区块中的值7761是基于原始文件7741的一个或多个唯一属性生成的初始值。在一个实施例中,该一个或多个唯一属性可以包括原始文件7741的哈希值,原始文件7741的元数据以及与该文件相关联的其他信息。在一个实现中,初始值7761可以基于以下唯一属性:
1)用于原始文件的SHA-2计算的哈希值
2)起始设备ID
3)原始文件的开始时间戳
4)原始文件的初始存储位置
5)用于当前控制原始文件和相关联的元数据的软件的区块链网络成员ID
区块链中的其他区块7782至778N也具有头部、文件和值。然而,与第一区块7721不同,其他区块中的头部7722至772N中的每个区块包括紧接在前的区块的哈希值。紧接在前的区块的哈希值可以只是先前区块的头部的哈希,或者可以是整个先前区块的哈希值。通过在剩余区块的每个中包括在前区块的哈希值,可以执行逐个区块地从第N个区块跟踪回到创世区块(以及相关联的原始文件),如箭头780所示,以建立可审计且不可变的监管链。
其他区块中的头部7722至772N中的每个还可以包括其他信息,例如版本号、时间戳、随机数、根信息、难度级别、共识协议和/或与对应文件和/或一般的区块链相关联的其他参数或信息。
其他区块中的文件7742至774N可以等于原始文件,或者可以是创世区块中的原始文件的修改版本,例如,这取决于执行的处理的类型。所执行的处理的类型可能因区块而异。该处理可能涉及例如在前区块中的文件的任何修改,诸如编辑信息或以其他方式改变文件的内容、从文件中取走信息、或向文件添加或追加信息。
附加地或替代地,该处理可能涉及仅从在前区块复制文件,改变文件的存储位置,分析来自一个或多个在前区块的文件,将文件从一个存储装置或存储器位置移动到另一位置,或相对于区块链文件和/或其相关联的元数据执行动作。涉及分析文件的处理可以包括例如追加、包括或以其他方式关联各种分析信息、统计信息或与该文件相关联的其他信息。
其他区块中的其他区块7762至776N中的每个的值是唯一值,并且由于执行的处理而全都不同。例如,任何一个区块中的值都对应于先前区块中的值的更新版本。该更新反映在向其分配了值的区块的哈希中。因此,区块的值提供了对在区块中执行了哪种处理的指示,并且还允许通过区块链跟踪回到原始文件。这种跟踪确认了整个区块链中的文件的监管链。
例如,考虑为了保护文件中显示的人的身份而对先前区块中的文件的部分进行编辑、屏蔽或像素化的情况。在此情况下,包括已编辑文件的区块将包括与已编辑的文件相关联的元数据,例如,如何执行编辑、谁执行编辑、发生(一个或多个)编辑的时间戳等。可对元数据进行哈希以形成值。由于该区块的元数据与经过哈希以形成先前区块中的值的信息不同,因此这些值彼此不同,并且在解密时可以恢复。
在一个实施例中,当以下中的任何一个或多个发生时,可以更新先前区块的值(例如,计算出新的哈希值)以形成当前区块的值。在该示例实施例中,可以通过对以下所述的全部或部分信息进行哈希来计算新的哈希值。
a)新的SHA-2计算的哈希值,如果已经以任何方式处理了文件的话(例如,如果文件被编辑、复制、更改、访问或已采取某种其他动作)
b)文件的新存储位置
c)识别的与文件相关联的新元数据
d)将文件的访问或控制从一个区块链参与者转移到另一个区块链参与者
图7D示出了根据一个实施例的可以表示区块链790中的区块的结构的区块的实施例。区块Blocki包括头部772i、文件774i和值776i
头部772i包括先前区块Blocki-1的哈希值和附加引用信息,其例如可以是本文讨论的任何类型的信息(例如,头部信息包括引用、特性、参数等)。当然,除创世区块外,所有区块均引用先前区块的哈希。先前区块的哈希值可以只是先前区块中的头部的哈希,或者可以是先前区块中的所有或部分信息(包括文件和元数据)的哈希。
文件774i按顺序包括多个数据,诸如数据1、数据2、…、数据N。数据用元数据:元数据1、元数据2、…、元数据N标记,元数据描述了与数据相关联的内容和/或特性。例如,每个数据的元数据可以包括指示数据的时间戳、处理数据、指示人或数据中描绘的其他内容的关键字和/或可能有助于确立整个文件的有效性和内容的其他特征(并且特别是其使用数字证据的特征)的信息,例如,如结合下面讨论的实施例所述。除元数据外,可以使用对先前数据的引用REF1,REF2,…,REFN标记每个数据,以防止篡改、文件中的空白以及通过文件的顺序引用。
一旦将元数据(例如,通过智能合约)指派给数据,就不能在不改变哈希的情况下改变元数据,这可以容易地被识别为无效。因此,元数据创建信息的数据日志,该数据日志可以由区块链中的参与者访问以供使用。
值776i是哈希值或基于先前讨论的任何类型的信息计算出的其他值。例如,对于任何给定的区块Blocki,该区块的值可以被更新以反映对该区块执行的处理,例如,新的哈希值、新的存储位置、关联文件的新的元数据、控制或访问的转移、标识符或其他要添加的动作或信息。尽管示出了每个区块中的值与用于文件和头部的数据的元数据分离,但是在另一实施例中,该值可以部分或全部基于该元数据。
一旦形成区块链770,则在任何时间点,可以通过向区块链查询跨区块的值的交易历史来获得文件的不可变监管链。该查询或跟踪进程可以从解密最新近包括的区块(例如,最后(第N个)区块)的值开始,然后继续解密其他区块的值,直到达到创世区块为止并且原始文件被恢复。解密还可以涉及在每个区块处解密头部和文件以及相关联的元数据。
基于在每个区块中发生的加密的类型来执行解密。这可能涉及私钥、公钥或公钥-私钥对的使用。例如,当使用非对称加密时,网络中的区块链参与者或处理器可以使用预定算法来生成公钥和私钥对。公钥和私钥通过某种数学关系彼此关联。可以公开分发公钥,以用作接收来自其他用户的消息的地址,例如,IP地址或家庭地址。私钥是秘密保存的并用于对发送给其他区块链参与者的消息进行数字签名。签名包含在消息中,以便接收者可以使用发送者的公钥进行验证。这样,接收者可以确保只有发送者可以发送此消息。
生成密钥对可以类似于在区块链上创建账户,但是不必实际在任何地方进行注册。此外,发送者使用其私钥对在区块链上执行的每个交易进行数字签名。该签名可确保只有帐户所有者才能跟踪和处理(如果在智能合约确定的许可范围内的话)区块链文件。
图8A和图8B示出了可以在本文中结合和使用的用于区块链的用例的附加示例。特别地,图8A示出了存储机器学习(人工智能)数据的区块链810的示例800。机器学习依靠大量的历史数据(或训练数据)来建立预测模型,以用于对新数据进行准确的预测。机器学习软件(例如神经网络等)通常可以筛选数百万条记录以挖掘非直观的模式。
在图8A的示例中,主机平台820建立和部署用于资产830的预测监视的机器学习模型。在此,主机平台820可以是云平台、工业服务器、web服务器、个人计算机、用户设备等。资产830可以是任何类型的资产(例如,机器或设备等),诸如飞机、机车、涡轮机、医疗机械和设备、石油和天然气设备、船只、轮船、车辆等。作为另一示例,资产830可以是非有形资产,诸如股票、货币、数字币、保费等。
区块链810可用于显著改善机器学习模型的训练过程802和基于训练后的机器学习模型的预测过程804。例如,在802中,历史数据可以由资产830自身(或通过中介,未示出)存储在区块链810上,而不是要求数据科学家/工程师或其他用户来收集数据。当执行预测模型训练时,这可以显著减少主机平台820所需的收集时间。例如,通过使用智能合约,数据可以直接且可靠地从其起源地点直接被转移到区块链810。通过使用区块链810以确保所收集的数据的安全性和所有权,智能合约可以直接将来自资产的数据发送给使用该数据以用于构建机器学习模型的个体。这允许在资产830之间共享数据。
可以基于共识机制将所收集的数据存储在区块链810中。共识机制引入(许可的节点)以确保正在被记录的数据是被验证的且准确的。记录的数据带有时间戳、被以密码方式签名并且是不可变的。因此,它是可审计、透明和安全的。在某些情况下(即,供应链、医疗保健、物流等),添加直接写入区块链的IoT设备可以提高记录数据的频率和准确性。
此外,针对所收集到的数据来训练机器学习模型可能需要由主机平台820进行数个轮次的改进和测试。每个轮次都可以基于附加数据或先前未被认为有助于扩展机器学习模型的知识的数据。在802中,不同的训练和测试步骤(以及与其相关联的数据)可以由主机平台820存储在区块链810上。机器学习模型的每个改进(例如,变量、权重等的改变)可以被存储在区块链810上。这提供了关于模型如何被训练以及哪些数据被用于训练模型的可验证证据。此外,当主机平台820已经实现最终训练后的模型时,所得到的模型可以被存储在区块链810上。
模型被训练后,它可以被部署到实时环境中,在该实时环境中,它可以基于最终训练后的机器学习模型的执行做出预测/决策。例如,在804中,机器学习模型可以用于诸如飞机、风力涡轮机、医疗机器等之类的资产的基于状态的维修(CBM)。在此示例中,从资产830反馈的数据可以被输入到机器学习模型,并用于进行事件预测,诸如故障事件、错误代码等。通过在主机平台820处执行机器学习模型而做出的确定可以被存储在区块链810上,以提供可审计/可验证的证据。作为一个非限制性示例,机器学习模型可以预测资产830的一部分的未来损坏/故障,并创建警报或通知以替换该部分。此决定背后的数据可以由主机平台820存储在区块链810上。在一个实施例中,本文描述和/或描绘的特征和/或动作可以在区块链810上发生或相对于区块链810发生。
区块链的新交易可以被一起聚集到一个新区块中,并被添加到现有哈希值。这然后被加密以创建新区块的新哈希。当下一个交易列表被加密后,该新哈希将被添加到下一个交易列表中,依此类推。结果是区块的链,其中每个区块都包含所有先前区块的哈希值。存储这些区块的计算机定期比较它们的哈希值,以确保它们都一致。任何不一致的计算机都丢弃导致问题的记录。此方法对于确保区块链的防篡改有益,但它并不是完美的。
博弈此系统的一种方式是让不诚实的用户将交易列表更改为对他们有利的,但是以保持哈希不变的方式。这可以通过蛮力来完成,换句话说,可以通过更改记录、加密结果以及查看哈希值是否相同来完成。如果没有,则一次又一次尝试,直到找到匹配的哈希为止。区块链的安全性基于普通计算机只能在完全不切实际的时间范围内(诸如宇宙的年龄)执行此类蛮力攻击的信念。相比之下,量子计算机要快得多(快数千倍),因此构成更大的威胁。
图8B示出了量子安全区块链852的示例850,该区块链实现量子密钥分配(QKD)以防御量子计算攻击。在此示例中,区块链用户可以使用QKD来验证彼此的身份。这使用量子粒子(诸如光子)发送信息,如果不破坏量子粒子,窃听者就无法复制它们。以此方式,通过区块链的发送者和接收者可以确信彼此的身份。
在图8B的示例中,存在四个用户854、856、858和860。用户对的每一个可以在他们之间共享秘密密钥862(即,QKD)。由于在此示例中存在四个节点,因此存在六对节点,因此使用了六个不同的秘密密钥862,包括QKDAB、QKDAC、QKDAD、QKDBC、QKDBD和QKDCD。每对都可以通过使用量子粒子(诸如光子)发送信息来创建QKD,如果不破坏量子粒子,窃听者就无法复制它们。以此方式,一对用户就可以确信彼此的身份。
区块链852的操作基于两个进程(i)创建交易,以及(ii)构建聚合新交易的区块。可以创建类似于传统区块链网络的新交易。每个交易可以包含关于发送者、接收者、创建时间、要转移的金额(或值)、证明发送者有用于操作的资金的引用交易列表等的信息。此交易记录然后被发送到所有其他节点,在所有其他节点处该交易记录被输入到未确认的交易池中。在此,两方(即,来自854-860之中的一对用户)通过提供他们的共享密钥862(QKD)来认证交易。此量子签名可以被附加到每笔交易,从而使得其非常难以篡改。每个节点相对于区块链852的本地副本检查他们的条目,以验证每个交易具有足够的资金。但是,交易尚未被确认。
可以使用广播协议以去中心化的方式创建区块,而不是对区块执行传统的挖掘过程。在预定的时间段(例如,秒、分钟、小时等),网络可以将广播协议应用于任何未确认的交易,从而达成关于交易的正确版本的拜占庭协定(共识)。例如,每个节点可以拥有私有值(特定节点的交易数据)。在第一轮次中,节点彼此发送他们的私有值。在随后的轮次中,节点传送它们在先前轮次中从其他节点接收到的信息。在此,诚实节点能够在新区块内创建完整的交易集。此新区块可以被添加到区块链852。在一个实施例中,本文描述和/或描绘的特征和/或动作可以在区块链852上发生或相对于区块链852发生。
图9示出了支持本文描述和/或描绘的示例实施例中的一个或多个示例实施例的示例系统900。系统900包括计算机系统/服务器902,其可以与许多其他通用或专用计算系统环境或配置一起操作。可能适合与计算机系统/服务器902一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户端、胖客户端、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机系统、大型计算机系统以及包括上述任何系统或设备的分布式云计算环境,等等。
可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般上下文中描述计算机系统/服务器902。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。可以在由通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实践计算机系统/服务器902。在分布式云计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机系统存储介质中。
如图9所示,云计算节点900中的计算机系统/服务器902以通用计算设备的形式示出。计算机系统/服务器902的组件可以包括但不限于:一个或者多个处理器或者处理单元904、系统存储器906、耦接不同系统组件(包括将系统存储器906耦接到处理单元904)的总线。
总线表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、图形加速端口、处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说并且并非进行限制,这些体系结构包括但不限于工业标准体系结构(ISA)总线、微通道体系结构(MAC)总线、增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器902典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器902访问的可用介质,它包括易失性和非易失性介质、可移动的和不可移动的介质。系统存储器906在一个实施例中实现其它图的流程图。系统存储器906可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)910和/或高速缓存存储器912。计算机系统/服务器902可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统914可以用于读写不可移动的、非易失性磁介质(图中未显示,通常称为“硬盘驱动器”)。尽管图中未示出,但是可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM、DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线相连。存储器906可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块918的程序/实用程序916,可以存储在存储器906中,这样的程序模块918例如是——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据。操作系统、一个或者多个应用程序、其它程序模块以及程序数据中的每一个或某种组合中可能包括网络环境的实现。程序模块918通常执行本文所描述的本申请的各实施例中的功能和/或方法。
如本领域的技术人员将理解的,本申请的各方面可以体现为系统、方法或计算机程序产品。因此,本申请的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或结合了软件和硬件方面的实施例的形式,本文中它们通常都可以被称为“电路”、“模块”或“系统”。此外,本申请的各方面可以采取在具有在其上体现的计算机可读程序代码的一个或多个计算机可读介质中体现的计算机程序产品的形式。
计算机系统/服务器902也可以与一个或多个外部设备920(例如键盘、指向设备、显示器922等)通信,还可与使得用户能与该计算机系统/服务器902交互的一个或者多个设备通信,和/或与使得该计算机系统/服务器902能与一个或多个其它计算设备进行通信的任何设备(例如网卡、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口924进行。并且,计算机系统/服务器902还可以通过网络适配器926与一个或者多个网络(例如局域网(LAN)、广域网(WAN)和/或公共网络(例如因特网))通信。如图所示,网络适配器926通过总线与计算机系统/服务器902的其它组件通信。应当明白,尽管图中未示出,但是可以结合计算机系统/服务器902使用其它硬件和/或软件模块。示例包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、带驱动器以及数据备份存储系统等。
尽管在附图中示出并在前述详细描述中说明了系统、方法和非暂时性计算机可读介质中的至少一个的示例性实施例,但是应当理解,本申请不限于所公开的实施例,而是能够进行如由下面的权利要求所阐述和定义的许多重新布置、修改和替代。例如,各个附图的系统的能力可以由本文描述的模块或组件中的一个或多个来执行或在分布式体系结构中执行,并且可以包括发射机、接收机或两者的对。例如,由单个模块执行的全部或部分功能可以由这些模块中的一个或多个来执行。此外,本文描述的功能可以在各种时间执行并与模块或组件内部或外部的各种事件相关。而且,可以经由以下各项中的至少一项和/或经由多种协议在模块之间发送在各种模块之间发送的信息:数据网络、因特网、语音网络、因特网协议网络、无线设备、有线设备。而且,可以直接和/或经由其他模块中的一个或多个模块来发送或接收由任何模块发送或接收的消息。
本领域的技术人员将理解,“系统”可以体现为个人计算机、服务器、控制台、个人数字助理(PDA)、手机、平板计算设备、智能手机或任何其他合适的计算设备或设备组合。将上述功能呈现为由“系统”执行并不旨在以任何方式限制本申请的范围,而是旨在提供许多实施例的一个示例。实际上,本文公开的方法、系统和装置可以以与计算技术一致的本地和分布式形式来实现。
应该注意,在本说明书中描述的一些系统特征已经作为模块呈现,以便更特别地强调其实现独立性。例如,模块可以被实现为硬件电路,该硬件电路包括定制的超大规模集成(VLSI)电路或门阵列,诸如逻辑芯片、晶体管或其他分立组件之类的现成半导体。模块也可以在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件、图形处理单元等之类的可编程硬件设备中实现。
模块也可以至少部分地以用于由各种类型的处理器执行的软件来实现。所识别的可执行代码单元可以例如包括计算机指令的一个或多个物理或逻辑块,其可以例如被组织为对象、过程或功能。然而,所识别的模块的可执行文件不需要在物理上位于一起,而是可以包括存储在不同位置的不同指令,这些指令当被逻辑地结合在一起时,包括模块并实现模块的所述目的。此外,模块可以存储在计算机可读介质上,该计算机可读介质可以是例如硬盘驱动器、闪存设备、随机存取存储器(RAM)、带或用于存储数据的任何其他此类介质。
实际上,可执行代码的模块可以是单个指令或许多指令,并且甚至可以分布在若干不同的代码段上、分布在不同的程序之间以及跨若干存储器设备分布。类似地,本文中操作数据可以在模块内被识别和示出,并且可以以任何合适的形式来体现并且可以在任何合适的类型的数据结构内组织。操作数据可以作为单个数据集收集,或者可以分布在不同位置上,包括分布在不同存储设备上,并且可以至少部分地仅作为系统或网络上的电子信号存在。
将容易地理解,如本文的附图中一般性描述和示出的,本申请的组件可以以各种各样不同的配置来布置和设计。因此,实施例的详细描述不旨在限制所要求保护的本申请的范围,而仅代表本申请的所选实施例。
本领域的普通技术人员将容易地理解,可以用不同顺序的步骤和/或用与所公开的配置不同的配置中的硬件元件来实践以上内容。因此,尽管已经基于这些优选实施例描述了本申请,但是对于本领域技术人员明显的是,某些修改、变化和替代构造将是明显的。
尽管已经描述了本申请的优选实施例,但是应当理解,所描述的实施例仅是示例性的,并且当考虑到本申请的全范围的等效物和修改(例如协议、硬件设备、软件平台等)时,本申请的范围仅由所附权利要求限定。

Claims (25)

1.一种用于区块链的验证的计算系统,包括:
网络接口,被配置为从区块链对等节点接收存储在分布式账本上的哈希链接的区块的链中的区块序列,其中,所述区块序列中的每个区块包括来自所述序列中的先前区块的区块内容的缩减步数哈希,其中,所述区块内容的缩减步数哈希是相对于区块内容的完整步数哈希而言,所述区块内容的完整步数哈希通过哈希函数的第一预定次数的重复执行来创建,所述区块内容的缩减步数哈希通过哈希函数的小于第一预定次数的第二预定次数的重复执行来创建;以及
处理器,被配置为对存储在所述区块序列之中的所述缩减步数哈希执行近似哈希验证,并基于所述近似哈希验证来确定所述区块序列是否已被篡改。
2.如权利要求1所述的计算系统,其中,所述网络接口还被配置为响应于故障的区块链对等节点处的崩溃,向所述区块链对等节点发送对所述区块序列的请求。
3.如权利要求1所述的计算系统,其中,所述网络接口还被配置为响应于另一区块链对等节点处的恢复操作,向所述区块链对等节点发送对所述区块序列的请求。
4.如权利要求1所述的计算系统,其中,所述网络接口还被配置为从第二区块链对等节点接收第二版本的所述区块序列,其中,所述第二版本的所述区块序列中的每个区块包括来自所述序列中的先前区块的区块内容的完整步数哈希,其中,所述完整步数哈希包括对哈希内容重复执行函数达比所述缩减步数哈希更大的次数。
5.如权利要求4所述的计算系统,其中,所述处理器还被配置为基于包括从所述第二区块链对等节点接收的所述完整步数哈希的所述第二版本的所述区块序列,验证包括从所述区块链对等节点接收的所述缩减步数哈希的所述区块序列。
6.如权利要求1所述的计算系统,其中,所述区块序列之中的每个区块包括所述链中的先前区块的头部的缩减步数哈希。
7.如权利要求1所述的计算系统,其中,对于所述序列中的每个区块,所述近似哈希验证验证所述序列中的先前区块的头部的缩减步数哈希被包括在相应的区块中。
8.一种用于区块链的验证的方法,包括:
从区块链对等节点接收存储在分布式账本上的哈希链接的区块的链中的区块序列,其中,所述区块序列中的每个区块包括来自所述序列中的先前区块的区块内容的缩减步数哈希,其中,所述区块内容的缩减步数哈希是相对于区块内容的完整步数哈希而言,所述区块内容的完整步数哈希通过哈希函数的第一预定次数的重复执行来创建,所述区块内容的缩减步数哈希通过哈希函数的小于第一预定次数的第二预定次数的重复执行来创建;
对存储在所述区块序列之中的所述缩减步数哈希执行近似哈希验证;以及
基于对所述缩减步数哈希的所述近似哈希验证来确定所述区块序列是否已被篡改。
9.如权利要求8所述的方法,还包括响应于故障的区块链对等节点处的崩溃,向所述区块链对等节点发送对所述区块序列的请求。
10.如权利要求8所述的方法,还包括响应于另一区块链对等节点处的恢复操作,向所述区块链对等节点发送对所述区块序列的请求。
11.如权利要求8所述的方法,还包括从第二区块链对等节点接收第二版本的所述区块序列,其中,所述第二版本的所述区块序列中的每个区块包括来自所述序列中的先前区块的区块内容的完整步数哈希,其中,所述完整步数哈希包括对哈希内容重复执行函数达比所述缩减步数哈希的次数更大的次数。
12.如权利要求11所述的方法,还包括基于包括从所述第二区块链对等节点接收的所述完整步数哈希的所述第二版本的所述区块序列,验证包括从所述区块链对等节点接收的所述缩减步数哈希的所述区块序列。
13.如权利要求8所述的方法,其中,所述区块序列之中的每个区块包括所述链中的先前区块的头部的缩减步数哈希。
14.如权利要求8所述的方法,其中,对于所述序列中的每个区块,所述近似哈希验证验证所述序列中的先前区块的头部的缩减步数哈希被包括在相应的区块中。
15.一种非暂时性计算机可读介质,包括指令,所述指令在被处理器读取时使所述处理器执行方法,所述方法包括:
从区块链对等节点接收存储在分布式账本上的哈希链接的区块的链中的区块序列,其中,所述区块序列中的每个区块包括来自所述序列中的先前区块的区块内容的缩减步数哈希,其中,所述区块内容的缩减步数哈希是相对于区块内容的完整步数哈希而言,所述区块内容的完整步数哈希通过哈希函数的第一预定次数的重复执行来创建,所述区块内容的缩减步数哈希通过哈希函数的小于第一预定次数的第二预定次数的重复执行来创建;
对存储在所述区块序列之中的所述缩减步数哈希执行近似哈希验证;以及
基于对所述缩减步数哈希的所述近似哈希验证来确定所述区块序列是否已被篡改。
16.一种用于区块链的验证的计算系统,包括:
存储设备,被配置为经由区块链账本存储哈希链接的区块链,其中所述哈希链接的区块链经由哈希内容链接在一起,所述哈希内容经由缩减步数哈希生成,其中,所述缩减步数哈希是相对于完整步数哈希而言,所述完整步数哈希通过哈希函数的第一预定次数的重复执行来创建,所述缩减步数哈希通过哈希函数的小于第一预定次数的第二预定次数的重复执行来创建;以及
处理器,被配置为从故障的对等节点接收对来自存储的哈希链接的区块的链之中的区块序列的请求,并向所述故障的对等节点发送经由缩减步数哈希内容链接在一起的所述区块序列。
17.如权利要求16所述的计算系统,其中,所述处理器还被配置为接收所述哈希链接的区块链的区块内容,所述区块内容包括所述区块内容的完整步数哈希和所述区块内容的所述缩减步数哈希。
18.如权利要求17所述的计算系统,其中,所述区块内容的所述完整步数哈希通过函数的第一预定次数的重复执行来创建,并且所述区块内容的所述缩减步数哈希通过所述函数的小于所述第一预定次数的第二预定次数的重复执行来创建。
19.如权利要求17所述的计算系统,其中,所述处理器还被配置为发送基于预定的区块链策略经由所述缩减步数哈希内容而不是所述完整步数哈希内容链接在一起的所述区块序列。
20.如权利要求16所述的计算系统,其中,所述区块序列之中的每个区块包括所述链中先前区块的头部的缩减步数哈希。
21.一种用于区块链的验证的方法,包括:
经由区块链账本存储哈希链接的区块的链,其中所述哈希链接的区块的链经由使用缩减步数哈希生成的哈希内容链接在一起,其中,所述缩减步数哈希是相对于完整步数哈希而言,所述完整步数哈希通过哈希函数的第一预定次数的重复执行来创建,所述缩减步数哈希通过哈希函数的小于第一预定次数的第二预定次数的重复执行来创建;
从故障的对等节点接收对来自存储的哈希链接的区块的链之中的区块序列的请求;以及
向所述故障的对等节点发送使用缩减步数哈希内容链接在一起的所述区块序列。
22.如权利要求21所述的方法,还包括接收所述哈希链接的区块的链的区块内容,所述区块内容包括所述区块内容的完整步数哈希和所述区块内容的所述缩减步数哈希。
23.如权利要求22所述的方法,其中,所述区块内容的所述完整哈希通过函数的第一预定次数的重复执行来创建,并且所述区块内容的所述缩减步数哈希通过所述函数的小于所述第一预定次数的第二预定次数的重复执行来创建。
24.如权利要求22所述的方法,还包括确定发送基于预定的区块链策略经由所述缩减步数哈希内容而不是所述完整步数哈希内容链接在一起的所述区块序列。
25.如权利要求21所述的方法,其中,所述区块序列之中的每个区块包括所述链中先前区块的头部的缩减步数哈希。
CN202010469705.3A 2019-05-29 2020-05-28 用于区块链的验证的方法和系统 Active CN112019586B (zh)

Applications Claiming Priority (12)

Application Number Priority Date Filing Date Title
US16/424,612 2019-05-29
US16/424,765 US11711202B2 (en) 2019-05-29 2019-05-29 Committing data to blockchain based on approximate hash verification
US16/424,588 2019-05-29
US16/424,644 2019-05-29
US16/424,706 US11429738B2 (en) 2019-05-29 2019-05-29 Blockchain endorsement with approximate hash verification
US16/424,612 US11539527B2 (en) 2019-05-29 2019-05-29 Peer node recovery via approximate hash verification
US16/424,765 2019-05-29
US16/424,671 US11570002B2 (en) 2019-05-29 2019-05-29 Reduced-step blockchain verification of media file
US16/424,588 US20200382309A1 (en) 2019-05-29 2019-05-29 Approximate hash verification for blockchain
US16/424,706 2019-05-29
US16/424,671 2019-05-29
US16/424,644 US11516000B2 (en) 2019-05-29 2019-05-29 Approximate hash verification of unused blockchain output

Publications (2)

Publication Number Publication Date
CN112019586A CN112019586A (zh) 2020-12-01
CN112019586B true CN112019586B (zh) 2023-04-07

Family

ID=73506840

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010469705.3A Active CN112019586B (zh) 2019-05-29 2020-05-28 用于区块链的验证的方法和系统

Country Status (1)

Country Link
CN (1) CN112019586B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112613060B (zh) * 2021-01-05 2023-11-17 福建中科星泰数据科技有限公司 基于联盟区块链的多节点存储系统及方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105243320A (zh) * 2015-10-26 2016-01-13 上海易码信息科技有限公司 云端服务平台对移动应用程序的认证方法
CN107807951A (zh) * 2017-09-18 2018-03-16 联动优势科技有限公司 一种区块链生成方法、数据验证方法、节点及系统
CN109409889A (zh) * 2018-11-13 2019-03-01 杭州秘猿科技有限公司 一种区块链中的区块确定方法、装置及电子设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2508526A1 (en) * 2002-12-03 2004-06-17 Funk Software, Inc. Tunneled authentication protocol for preventing man-in-the-middle attacks
US8914641B2 (en) * 2012-07-11 2014-12-16 Intel Corporation Method for signing and verifying data using multiple hash algorithms and digests in PKCS
US10313108B2 (en) * 2016-06-29 2019-06-04 Intel Corporation Energy-efficient bitcoin mining hardware accelerators

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105243320A (zh) * 2015-10-26 2016-01-13 上海易码信息科技有限公司 云端服务平台对移动应用程序的认证方法
CN107807951A (zh) * 2017-09-18 2018-03-16 联动优势科技有限公司 一种区块链生成方法、数据验证方法、节点及系统
CN109409889A (zh) * 2018-11-13 2019-03-01 杭州秘猿科技有限公司 一种区块链中的区块确定方法、装置及电子设备

Also Published As

Publication number Publication date
CN112019586A (zh) 2020-12-01

Similar Documents

Publication Publication Date Title
US11429738B2 (en) Blockchain endorsement with approximate hash verification
US11539527B2 (en) Peer node recovery via approximate hash verification
US11570002B2 (en) Reduced-step blockchain verification of media file
US11711202B2 (en) Committing data to blockchain based on approximate hash verification
US11689356B2 (en) Approximate hash verification of unused blockchain output
US20200382309A1 (en) Approximate hash verification for blockchain
US11943237B2 (en) Malicious peer identification for database block sequence
CN112084256A (zh) 用于数据库的聚合机器学习验证
CN111985003A (zh) 数据库恶意对等体识别
CN112084257A (zh) 有效的数据库机器学习验证
CN114365116A (zh) 来自私有区块链的更新的链外通知
US11362826B2 (en) Endorsement process for non-deterministic application
US11251938B2 (en) Blockchain verification using non-consecutive blocks
CN114651248A (zh) 用于经许可的区块链的随机节点选择
CN111881109B (zh) 数据库可合并分类账
CN115699054A (zh) 区块链的更快查看改变
CN115211093A (zh) 数据对象的有效阈值存储
CN112084255A (zh) 机器学习应用的有效验证
US11580098B2 (en) Multi-client transaction validation
CN115004625A (zh) 用于区块链分类账的索引结构
CN114450708A (zh) 基于现有链码的链码推荐
CN112733159A (zh) 用于区块链的自由搭乘节点识别
CN112052474A (zh) 蓝光拷贝服务
CN115943411A (zh) 用于保护数据的噪声交易
CN112019586B (zh) 用于区块链的验证的方法和系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant