使用诸如以时间为中心的默克尔散列树之类的散列树的数据验证方法和系统与流程

文档序号:14959073发布日期:2018-07-18 00:09阅读:225来源:国知局

本申请要求于2015年9月14日提交的名称为“dataverificationmethodsandsystemsusingahashtree,suchasatime-centricmerklehashtree(使用诸如时间中心的默克尔散列树之类的散列树的数据验证方法和系统)”的美国专利申请号14/852,955的优先权和权益,所述美国专利申请的全部内容出于所有目的通过引用以其全文结合在此。

本公开的各种实施例通常涉及存储和验证数据。更具体地,本公开的各种实施例涉及用于使用散列(hashing)技术存储和验证数据的系统和方法。



背景技术:

散列(hash)函数是一种可用于将任意大小的数字数据映射到固定大小的数字数据的函数。散列函数可用于许多目的,例如用于通过检测大文件中的复制记录来加速表或数据库的查找。散列函数也被用于区块链中。区块链是可验证的永久性账本,该永久性账本用被附接到每个区块并验证该区块的工作量证明密封(散列)来每次被构建一个区块。在任何区块链中,前一个区块的散列被包括在当前区块中,并且因此通过递归,当前散列也将所有先前的区块验证回到原始的创世(genesis)区块。将散列插入到区块链中永久地记录该散列并且充当在区块被添加到链中的时刻验证散列数据存在的时间戳证明的公证人。未来的区块从链重组添加了保护层,并因此添加了对链中较早的区块不能做出改变的确定性。

附图说明

将通过使用附图来描述和解释本公开的实施例。

图1图示了根据本公开的各种实施例的基于网络的操作环境的示例。

图2图示了根据本公开的一个或多个实施例的数据存储和验证平台中的一组组件。

图3是图示了根据本公开的一个或多个实施例的数据存储和验证平台的架构的图。

图4图示了根据本公开的一个或多个实施例的使用非稀疏tome来存储和验证数据的过程。

图5图示了根据本公开的一个或多个实施例的使用稀疏tome来存储和验证数据的过程。

图6图示了根据本公开的一个或多个实施例的使用时钟链tome来存储和验证数据的过程。

图7图示了用其本公开的一些实施例可以被使用的计算机系统的示例。

具体实施方式

本公开的各种实施例通常涉及存储和验证数据。更具体地,本公开的各种实施例涉及用于使用散列技术存储和验证数据的系统和方法。

数据存储和验证平台描述了一种方法和系统,其中使用默克尔(merkle)树(其中树分支是以时间为中心的数据分组)的概念可以既快速又高效地生成数据记录以及特别地快速变化的时间敏感的数据的记录。

数据验证的传统方法是效率低下的,特别是在涉及大量快速变化的数据(例如,交易数据、遥测)的情况下。例如,用于验证数据的一种解决方案包括存储文件或文本的整个语料库并将其与原始数据进行比较以确认有效性。尽管这种方法对于小量数据是可管理的,但该方案对于任何显著量数据的比较都是不切实际的。

另一个当前的解决方案是将数据存储在区块链中。但是,因为至少两个原因,在区块链中记录快速变化的数据(例如,在交易所中的每笔交易)是不切实际的。首先,当前必须同步和存储的数据量超过了当前区块链的大多数通信通道、当前区块链的大多数存储系统和当前区块链的“带宽”。简而言之,快速变化的数据不能跨广泛地分布的分散系统被快速同步。其次,在区块链上记录快速变化的数据是不切实际的,因为分散区块链的时序不是确定性的。也就是说,用于数据的路径取决于对等连接,这可能导致以与其最初发生的不同顺序记录快速变化的数据。

本文描述的方法和系统提供了记录数据(包括快速变化的时间敏感的数据)以供将来验证的方式。本文描述的一些实施例描述了可以生成时间有序默克尔树时期(tome)的数据存储和验证平台,其中“时间”可以指视为整体的过去、现在和将来中存在和事件的无限连续进展;“有序”可以指以有条不紊的或适当的方式进行安排;其中“默克尔树”指由ralphmerkle发明的默克尔树,其中每个非叶节点用其子节点的标签的散列来标记;“时期(epoch)”指在某人或某事的历史中独特时期的开始。tome可以使用诸如sha256之类的加密散列函数用于散列。

在一些实施例中,tome的叶可以是特定记录,并且树可以由每第一参考级的数据记录的数量,第一参考级中组成第二参考级的段或时间间隔的数量,第二参考级中组成第三参考级的段或时间间隔的数量等等来定义。在一些实施例中,参考级由时间定义,并且在这样的实施例中,树可以由每秒的数据记录的数量、每分钟的秒数、每小时的分钟数、每日的小时数等来定义。

在示例中并且如本文进一步描述的,如果需要,数据存储和验证平台可以接收数据记录并提供时间戳。在接收到数据记录时,每个数据记录可以用由数据存储和验证平台生成的对应的时间戳来散列。时间戳可以表示不同级的粒度(例如,皮秒、秒等)。在一个说明性的示例中,以秒来表示粒度,并且因此每个数据记录的散列以时间/相继的顺序被组合,并且每秒生成散列的散列;被组合的散列可以被称为一秒tome。因此,每秒创建一个散列。在已经创建了六十个一秒散列之后,所有的一秒散列然后被组合(按时间上升)并且被散列用于创建一分钟散列,其可以被称为一分钟tome。在已经创建了一分钟散列的六十个之后,所有的六十个一分钟散列被排序(按时间上升),并被散列用于创建一小时tome。在已经创建了一小时散列的二十四个之后,二十四个一小时散列被排序(按时间上升),并被散列用于生成一日tome。该日散列然后可以被排序(按时间上升),并被散列用于产生一个月tome(即三十个或三十一个每日散列的散列),季度tome(即九十个每日散列的散列),和/或年度tome(即365个每日散列的散列)。

可以使用各种方法来完成在对被组合的散列执行散列函数之前组合散列。例如,可以通过将散列连接在一起,通过数字上相加散列,或通过将二进制字节连接在一起来组合散列。其他方法也可以将散列取异或在一起、用在它们之间的定界将散列连接起来、或将索引号添加到每个散列并且然后组合散列。必须知道组合散列的方法,以便使独立方复制过程并独立地得出相同的结果。

有多种类型的tome,包括非稀疏tome、稀疏tome和时钟链tome。在非稀疏tome中,无论数据是否在第一参考级的段(例如,秒)期间被接收到,都生成针对每个段(或时间的单位,例如一秒)的散列。因此,在非稀疏tome中,将总会有针对每个段的散列(即,即使在六十个一秒散列中的只有三个或四个中接收到数据,六十个一秒散列也将被创建并用于创建一分钟散列)。

在稀疏tome中,仅当在第一参考级的段期间接收到数据时才创建散列(即,如果在特定分钟内的六十秒中的三秒内接收到数据,则只有三个散列将被散列以形成一分钟散列)。

时钟链tome使用创世散列。创世散列是时期中的第一个散列,并且可以是提供正被散列的数据的描述或任何其他类型的信息的文档的散列。创世散列与在第一段(例如,秒)中的数据记录进行散列。在该实施例中,第一段(例如,第一秒)的散列与在下一段(例如,第二秒)中的数据记录进行散列以创建第二段散列,第二段散列与在第三段(例如,第三秒)期间接收到的数据记录的散列进行散列等。

散列可以在任何点处被记录在区块链中,允许将来验证数据。也就是说,通过用数据重建tome,如果数据未损坏且未变化,则将创建相同的散列。然而,如果数据中的任何数据被改变或者数据中的时间戳已被改变,则散列将不同,表明数据中的差异。

使用数据存储和验证平台创建的散列可以被公开地证明使用诸如公钥密码学和双向加密之类的密码技术。公钥密码学需要密钥对,其中两个密钥在数学上相链接。一个密钥是在对等网络中的节点之间被自由共享的公钥。另一个密钥是不与公众共享的私钥。公钥被用于加密明文并验证数字签名。私钥被用于解密密文并对消息进行数字签名。该消息可以由发送人的私钥进行数字签名以认证发送人的身份。然后,可以使用发送人的公钥对发送人的数字签名的交易消息进行解密,以验证发送人发起了该消息。

数据存储和验证平台的益处包括透明性和不变性,特别是在时间敏感的数据中,因为数据存储和验证平台可以确定当数据通过相同的算法运行并且与被存储的散列进行比较时数据是否已经稍有变化。当数据的散列被记录到区块链时,数据存储和验证平台提供了不可否认性。一旦散列已经被记录在区块链中,散列数据就不会在不使散列无效的情况下被篡改。数据存储和验证平台通过允许数字签名证明被散列数据的有效性(例如公钥密码学)来提供外部证明。

数据记录可以在任何时间间隔(例如,秒、日、星期、月、年、十年)被验证。数据存储和验证平台可以在更短的时间间隔内验证数据,从而避免需要验证可能跨越数十年的整个数据集。数据存储和验证平台可以验证任何类型的数据或任何量的数据。附加地,数据记录所需的存储是不重要的。尽管在分布式账本上记录每笔交易是不切实际的,但是可以将某些时间点(例如,每小时、每日、每周、每月)的散列记录到由网络节点维护的分布式账本(例如,用于比特币的区块链)。

在本公开中使用时间和具体时间增量作为示例。然而,本公开的实施例可以与任何数据一起使用并且在任何时间间隔被散列。

此处所介绍的技术可以被具体化为专用硬件(例如电路)、用软件和/或固件适当地编程的可编程电路、或专用电路与可编程电路的组合。因此,实施例可以包括具有存储在其上的指令的机器可读介质,所述指令可以用来对计算机(或其他电子设备)进行编程从而执行过程。机器可读介质可以包括例如:软盘、光盘、光盘只读存储器(cd-rom)、磁光盘、只读存储器(rom)、随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、磁卡或光卡、闪存、或者适用于存储电子指令的其它类型的介质/机器可读介质。

图1图示了其中可以使用本公开的一些实施例的基于网络的操作环境100的示例。如图1所图示,操作环境100包括运行在一个或多个计算设备110a-110m(诸如移动设备、移动电话、平板计算机、移动媒体设备、移动游戏设备、基于车辆的计算机、专用终端、公共终端、台式或膝上型计算机、智能手表或其他可穿戴技术、自助服务终端等)上的应用105a-105n。在一些实施例中,用于执行诸如生成文档或命令之类的操作的应用105a-105n可以被存储在计算设备上或者可以被远程地存储。这些计算设备可以包括用于通过经网络115连接到数据存储和验证平台120来接收和发送流量的机制。

计算设备110a-110m被配置为经由网络115与数据存储和验证平台120通信。在一些实施例中,计算设备110a-110m可以从数据存储和验证平台120或数据存储125检索信息或向数据存储和验证平台120或数据存储125提交信息并且运行具有由数据存储和验证平台120检索的定制内容的一个或多个应用。例如,计算设备110a-110m各自可以执行浏览器应用或定制客户端以实现在计算设备110a-110m和数据存储和验证平台120之间的交互。

数据存储和验证平台120可以在一个或多个服务器上运行,并且可以用于使用散列技术来创建数据记录和验证数据,将散列记录到分布式账本(ledger),记录数字签名以及比较散列等其他活动。数据存储和验证平台120可以与数据存储125和计算设备110a-110m可通信地耦合,并且可以从计算设备110a-110m和数据存储125通信、访问或接收数据(例如,文档、交易数据)。

数据存储和验证平台120可以基于用户需求和/或商业目标由单个公司或服务提供商定制或校准。例如,数据被散列的间隔可以基于其中数据被接收的各种时间间隔(例如,交易数据比一秒更快到达,而月度报告通常每月发生),并且因此数据存储和验证平台120可以针对不同的用途和不同的用户进行不同的校准。

除其他之外,数据存储和验证平台120提供创建数据记录使得数据可以在将来的任何时间被容易地验证的方法。数据存储和验证平台120可以创建tome,其中树的叶是特定记录,并且树由每个第一分段时间段的数据记录的数量、在第一时间段中组成第二分段时间段的段的数量、在第二时间段中组成第三分段时间段的段的数量等等。例如,树可以由每秒的数据记录的数量、每分钟的秒数、每小时的分钟数、每日的小时数等来定义。数据存储和验证平台120可以在树中的任何点记录散列,并且然后将该记录与数据的散列进行比较以验证数据没有改变。

数据存储125可以被用于管理对诸如交易数据、文档、用户信息和其他信息之类的数据的存储和访问。数据存储125可以是使用在数据库模式中定义的类建模的一组集成对象的数据存储库。数据存储125可以进一步包括可以存储数据的平面文件。数据存储和验证平台120和/或其他服务器可以收集和/或访问来自数据存储125的数据。

数据存储和验证平台120通过网络130与一个或多个分布式账本135可通信地耦合。

网络115和网络130可以是相同网络或者可以是单独的网络,并且可以是使用有线和/或无线通信系统的局域网和/或广域网的任何组合。网络115或者网络130可以是或者可以使用任意一项或多项协议/技术:以太网、ieee802.11或wifi、全球微波互联接入(wimax)、蜂窝电信(例如,3g、4g、5g)、cdma、电缆、数字用户线(dsl)等。类似地,网络115和网络130上使用的联网协议可以包括:多协议标签交换(mpls)、传输控制协议/互联网协议(tcp/ip)、用户数据报协议(udp)、超文本传输协议(http)、简单邮件传送协议(smtp)和文件传送协议(ftp)。可以使用包括超文本标记语言(html)或可扩展标记语言(xml)的技术、语言和/或格式来表示在网络115和网络130上交换的数据。另外,可以使用常规加密技术诸如安全套接层(ssl)、传输层安全(tls)、和互联网协议安全性(ipsec)对所有或一些链路进行加密。

(多个)分布式账本135或自动地(例如,在时间段的结束时)记录散列或按分布式账本上的请求记录散列。比如,比特币使用被称为区块链的分布式公共账本。当(多个)分布式账本135从数据存储和验证平台120接收到用适当密钥签名的散列并且该散列由网络节点验证时,(多个)分布式账本135将散列记录到分布式账本。

图2图示了根据本公开的一个或多个实施例的数据存储和验证平台120内的一组组件。根据图2所示的实施例,数据存储和验证平台120可以包括存储器205、一个或多个处理器210、数据接收模块215、时间戳模块220、散列引擎225、记录模块230、数字签名模块235、数据验证模块240,比较模块245和图形用户界面(gui)生成模块250。其他实施例可以包括这些模块和组件以及其他模块、应用、和/或组件中的一些、全部、或没有一个。仍然,一些实施例可以将这些模块和组件中的两个或更多个并入单个模块和/或可以将这些模块中的一个或多个的功能的一部分与不同模块相关联。例如,在一个实施例中,数据验证模块240和比较模块245可以被组合成单个组件。

存储器205可以是用于存储信息的任何设备、机构、或被填充的数据结构。根据本公开的一些实施例,存储器205可以是或包括例如任何类型的易失性存储器、非易失性存储器、和动态存储器。例如,存储器205可以是随机访问存储器、存储器存储设备、光学存储器设备、磁性介质、软盘、磁带、硬盘驱动器、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、光盘、dvd等。根据一些实施例,存储器205可以包括一个或多个磁盘驱动器或闪存驱动器、一个或多个表格、一个或多个文件、一个或多个本地高速缓存存储器或处理器高速缓存存储器、一个或多个关系数据库或平面数据库等。另外,本领域技术人员将领会可以被用作存储器205的用于存储信息的许多附加设备和技术。

存储器205可以被用来存储用于在(多个)处理器210上运行一个或多个应用或模块的指令。例如,在一个或多个实施例中,存储器205可以用来容纳执行数据接收模块215、时间戳模块220、散列引擎225、记录模块230、数字签名模块235、数据验证模块240、比较模块245和gui生成模块250的功能所需的指令中的全部或部分。

数据接收模块215可以将数据(例如,数据项、数据记录)接收到数据存储和验证平台120中以使用散列技术来创建数据的记录。数据可以是任何类型的数据(例如,文档、视频、图片、电子邮件消息),并且数据可以以任何间隔(例如,每秒、每小时、每年三次、随机地)被接收。在一些实施例中,由数据接收模块215接收的数据可以被保密,但仍然可被验证。例如,被发送的数据可能是提供了不透明的不可否认的方式的秘密数据的散列。在一些实施例中,由数据接收模块215接收的数据可以是api调用的结果(假设api调用的结果保持一致以用于验证第三方数据)。

数据接收模块215还可以接收验证数据,以用于验证验证数据与初始接收到的数据相同的目的。也就是说,验证数据的记录可以使用相同的散列技术来进行以确定它是否与初始数据相同。这种验证可能有助于验证从对等网络传输的数据,以用于检测假数据或用于遵守审计。经由数据接收模块215接收的数据或数据项可以被传送到时间戳模块220以用于加时间戳(如果需要的话),或者直接传送到散列引擎225用于散列(如果不需要时间戳的话)。

时间戳模块220可以确定是否需要时间戳,然后根据需要对数据加时间戳。一些数据可能已包括时间戳,这可能对时间敏感的数据有帮助。在一些实施例中,不管数据是否已经包括时间戳,都对数据加时间戳。数据可以以任何粒度(例如,皮秒、毫秒、微秒、纳秒、秒、分钟、小时)被加时间戳。时间戳可以是时期的开始或数据记录的真实时间戳。被传递的时期值是时期中包含的秒数。时间可以以任何足够特定以表示时刻(全世界)(例如julian,具有诸如gmt之类的时区的数据串)的方式来指定。具有时间戳的数据被发送到散列引擎225。

散列引擎225接收数据,并在其时间戳记录级别处用其时间戳散列数据。然后每个记录的散列按时间顺序被组合。有时,时间分辨率的粒度不够按确定性顺序放置记录(即,两个数据记录在相同时间被接收,或者用相同的时间戳被记录)。在这种情形期间,数据记录的散列可被用于次级排序,因为在验证期间,验证数据的散列将导致与原始数据相同的散列(如果数据是相同的),这可以被排序。因此,在一些实施例中,首先按时间对数据进行排序,然后如果存在平局(tie),则通过数据的散列对数据进行排序。以这种方式排序允许第三方或不同的兼容系统以一致的方式排序数据的方法。

每个参考级可以具有多个有序的段,其中的每一个被散列以创建针对参考级的单个散列,然后其被用于生成下一个参考级。作为示例,假设秒是第一参考级,分钟是第二参考级,小时是第三参考级。第一参考级包括60个有序的段(即60秒),它们的散列将被用作第二参考级的段。随着数据被接收,数据被散列,并且在特定段(即秒)期间接收到的所有数据被散列。然后,针对每个段的散列数据(即,60个散列)以升序一起被散列以在第二参考级上生成一个段(即,60个一秒散列被散列以生成一分钟散列)。第二参考级包括60个段(即60分钟)。因此,来自第二参考级的60个有序段以升序一起被散列以在第三参考级上生成一个段(即,60个一分钟散列被散列以创建一小时散列)。第三参考级包括以升序一起被散列的24个段以在第四级上生成一个段(即,24个一小时散列被散列以创建一日散列)。这个过程可以继续,使得一个散列代表数据的数星期、数月、数季、数年、数十年或任何其他时间段。

在每个参考级处的记录数据的每个散列段可被标记为参考级的散列段或tome。因此,如果第一参考级是秒,则每秒的散列是秒参考级的散列段。如果第二参考级是分钟,则被散列的秒段中的六十个的散列是分钟参考级的一个散列段。如果第三参考级是小时,则被散列的分钟段中的六十个的散列是小时参考级的一个散列段。

当接收到数据时,数据被加时间戳并且用时间戳进行散列。然后,在第一秒内接收到的所有数据以时间排序方式被散列在一起。针对第二秒、第三秒等发生相同的过程,直到该参考级中的段的结束。

散列引擎225可以使用稍微变化的散列算法。例如,在“稀疏tome”中,当在任何时间段内没有接收到数据时,不会针对该时间段创建或存储散列。因此,可能针对特定的秒、分钟、小时或星期不存在散列。在稀疏tome中,如果在没有接收到数据的时间段内的数据被要求验证时,它将返回空(null),0或者没有任何值用于散列。例如,在一年中只具有一个数据点的稀疏tome中,将会有针对该秒、分钟、小时、日、星期、月和年的数据,但没有其他数据(例如,sha256(sha256(sha256(sha256(sha256(sha256(one_data_point)))))))。

散列引擎225也可以使用“非稀疏tome”算法。在非稀疏tome算法中,如果在任何时间点没有数据,则散列引擎225仍然创建散列。假定秒是最低参考级,如果在一秒期间没有接收到数据,则针对该秒创建散列(例如,空串的散列)。例如,可以使用空串的静态sha256散列。在非稀疏tome中,将总会有60个一秒散列来生成一分钟散列。

相对非稀疏tome使用稀疏tome具有优势,反之亦然。例如,非稀疏tome提供确认在该时间段内没有接收到数据的数据点,但当使用稀疏tome时,除了缺少数据外没有特定的确认。在另一方面,因为不管数据是否被接收到,非稀疏tome都提供散列,所以当没有在第一参考级的每个段期间都接收到数据时,非稀疏tome的散列文件将大于稀疏tome的散列文件。

通常地,散列的数据存储不是大量的。例如,假设参考级包括秒、分钟、小时、星期、月和年;散列是sha256;二进制散列被存储为32字节散列;并且被连接的散列被存储为64个十六进制字符,则一整年的非稀疏tome数据的存储可能大约为两千兆字节的数据。取决于对于给定的秒接收和散列多少数据(例如,取决于在特定秒期间接收到的数据项的数量,针对该秒被散列的十六进制字符串可以更大或更小),存储数量可以增加或减少。在非稀疏tome中,分钟散列将始终是十六进制值的3840(即64*60)字符串,而星期散列是每日散列的十六进制值的448(即,64*7)字符串。

散列引擎225还可以使用“时钟链tome”。时钟链tome是非稀疏tome,因为不管对于该段,数据是否被接收,针对最低参考的每个段(例如,每秒)都有散列。时钟链tome从非稀疏tome中是独一无二的,因为它从第一参考级的前一段获取散列,使用来自前一段的散列作为当前段的第一个散列,并且将来自前一段的散列与针对当前段接收到的其他数据散列按升序散列。然后将当前段的散列用作随后段的第一个散列。

tome的第一个段的第一个散列可以称为创世散列,因为它是创世元数据的散列。创世元数据可以定义与tome数据相关的术语和/或提供对于tome存在的推理(例如,说明被交易的资产和原始数量的法律定义、客户数量、经纪交易商的生成的文档),而tome数据是实际数据的散列(例如,资产的交易数据)。因此,创世散列和在第一秒期间接收到的所有数据散列被散列以形成第一秒散列,将第一秒散列与在第二秒期间接收的所有数据散列进行散列以形成第二数据散列,第二数据散列与在第三秒期间接收到的所有数据散列进行散列,依此类推。时钟链实质上具有生日(birthday),并且跟踪针对每秒的每个数据点,由时钟链树的生日开始。附加地,在验证期间,通过向后回溯到树的开始,时钟链tome将验证(并且需要验证)每个散列。因此,时钟链可以验证从股票发行开始的每次交易。

散列引擎225可以使用sha256来创建散列,并且可以使用64个十六进制字符来表示散列。存储可以通过存储32字节的二进制散列来优化,但是要被散列的被连接散列可以是64个十六进制字符。

记录模块230将一个或多个散列(tome)记录到诸如区块链之类的介质中。任何区块链可以被用来记录一个或多个tome。记录模块230可以在提交发生的任何时间间隔(例如,每分钟、通过组合分钟散列的每小时)处记录tome。做出指定时期边界的结束(例如,秒的结束,一分钟结束)的提交并且该提交锁定数据,以便一旦被提交就不再添加更多的数据。然后记录模块230组合所有散列达到时期边界。如果提交在不是边界的时间戳上(例如,1.5秒)发生,则可以使用向后回溯的最后边界(例如1秒)。

用于记录tome的时间间隔可以取决于区块链的速度。例如,一些区块链可以将小时散列记录到诸如比特币之类的十分钟区块链中,或将分钟散列每分钟地记录到诸如无限币(inifinitecoin)之类的30秒区块链中。在一些实施例中,tome以特定间隔被自动地记录在区块链中。例如,可以记录涵盖该时期的整个数据的每小时或每日时间。因此,记录模块230记录散列以透明且永久地记录任何所选时间块的数据的存在证明。

在一些实施例中,在通过某个时期(例如,天)记录数据之后,不可以对包括在那日(例如,每日)中的tome的任何tome作出改变。除区块链以外的其他介质可用于记录散列,诸如报纸、网站博客、推特等。

数字签名模块235可以允许多个实体在任何时间级签名(即证明)该数据。证明可以每日、每月、每周和/或每年发生。为了证实数据,可以使用公钥密码学,使得ats或经纪交易商可以数字地签名散列,公开地声明数据的散列是真实的并且代表实际数据。附加地,数字签名可以由独立地审计数据和验证散列的设备自动地添加。在一些实施例中,每个数据条目可以被数字地签名。在示例中,通过两个系统播放数据的散列,并且然后比较针对该日的散列。如果散列是相同的,则数字签名可以被应用于散列,验证针对该日的数据。在一些实施例中,散列在被记录在区块链上之前被数字签名。散列的签名表示在该时期期间发生的所有时间排序的数据都是有效的。因此,针对一星期数据的散列的签名证明整个星期的数据是有效的。

数据验证模块240通过在一时间点接收tome并通过相同散列算法运行潜在可疑的验证数据来验证验证数据(即,确定自从原始数据被散列后数据是否已经改变)。验证数据将包括来自与初始数据相同时间范围的数据。假设使用具有相同规格(例如,如何指定时间记录、实数的精度、数据格式(例如,json、xml、二进制))的相同的散列算法或函数,针对每个数据记录应该复制相同的散列,导致相同的tome。因为时间戳被记录在记录中,所以针对秒、分钟、日、小时等的默克尔树散列也可以被复制。数据验证模块240可以验证任何类型的数据。因此,数据验证模块240可以验证并保证对于任何时期(即时间范围)数据未被添加、移除或篡改。在一些实施例中,数据验证模块240在触发事件时执行数据的验证。触发事件可以包括由请求数据完整性检查的监管者或其他实体所需的审计事件。数据验证模块240可用于将一个系统与并行运行的另一个系统进行比较。

验证所需的数据量取决于用于创建散列的算法的类型以及用于验证的数据的时间范围。例如,为了验证使用时钟链算法散列的数据,数据验证模块240必须验证以创世元数据开始的针对验证所要求的整个时间范围。因此,用户必须提供创世元数据以及直到用户有兴趣验证的时间点之前的所有数据。对于通过设计执行的每个验证,数据验证模块240验证向后回溯到当时钟链算法开始时的树的开始的每个散列。相反,当使用非稀疏tome或稀疏tome时,用户可以指定要验证的数据的子集。由于对于非稀疏tome或稀疏tome,没有特定的创世元数据或生日,所以不需要在特定时间点开始。例如,如果用户想要验证特定小时的数据,那么整个小时的数据是必需的所有数据。数据验证模块240获取小时的数据并重新创建针对小时的散列。类似地,如果用户想要验证一年的数据,则只有该整年的数据是必需的。

比较模块245将原始散列与由数据验证模块240创建的验证数据的散列进行比较。如果散列是不同的,则数据中的某些东西被改变。数据中的任何改变(包括时间戳的改变、数据的改变或数据的重新排序)将产生不同的散列。例如,如果数据是电影并且电影的一个像素被改变,则散列将是不同的。在另一个示例中,如果数据是交易数据并且数百万交易中的一笔交易的时间戳已被更改,则散列将是不同的。

如果散列是不同的,则数据中的某些东西改变了。为了准确地确定数据被更改的位置,可以检查更小的时间量。例如,在非稀疏tome或稀疏tome中,如果一个月的数据被验证并且验证失败,则可以验证该月数据中的星期中的每个星期以确定哪个星期失败。一旦确定了失败的星期,就可以验证失败的星期中的每一天以识别哪一天失败。一旦识别了失败的天,每个小时就可以被验证以确定哪个小时失败。该过程可以迭代地继续,直到识别出失败的确切的数据散列。如果算法是时钟链,则识别已经改变的确切数据将是稍微不同的过程,因为从创世直到验证点的所有数据必须被包括。假设一个月的数据未能通过验证,可以验证从创世到该月结束的所有数据以及从创世到该月中的数据,以确定数据在上半月还是下半月期间改变。一旦确定哪一半月包含更改后的数据,则下一次迭代可以验证到该月的第一星期(如果前两星期包含不良数据)或该月的第三星期(如果后两星期包含不良数据)。可以执行如描述的迭代过程,直到识别出确切的数据记录。

通过验证事件的顺序,在不使验证数据无效的情况下不会发生事件的重新排序。可以将比较数据提供给审计员以证明数据没有改变。因此,现代数据流的高速和高容量特性可以与按照规定所要求的每月、每季度或每年的传统的审计间隔相匹配。

gui生成模块250可以生成允许与用户交互的一个或多个gui屏幕。在至少一个实施例中,gui生成模块250生成接收信息和/或向用户传达信息的图形用户界面。例如,gui生成模块250可以显示用户界面,其中用户可以请求要被验证的数据的时间范围并且指定所使用的算法的类型。gui生成模块250还可以显示验证结果。

图3是图示了在数据存储和验证平台中使用的组件的交互的图300。如图3所示,数据馈送302接收有序离散数据项的高速数据。tome304通过使用参考级以排序的方式散列数据项来生成高速数据的tome。记录器306在区块链上的任何时间点记录数据项的散列,使得散列的记录被记录。因此,稍后通过用数据重建被记录的散列并验证被记录的散列和被重建的散列相同,可以验证数据未被改变。证明单元308接收验证数据和/或散列准确(即,数据是未受危害的)的数字签名。证明可以稍后被用作初始数据是正确数据的进一步证明。

图4图示了使用非稀疏tome存储和验证数据的过程。如所示,接收数据项402、404、406、408和410,并且每个数据项被加时间戳和散列。如上所述,在非稀疏tome中,即使在一秒期间没有接收到数据,也将创建指定在该秒期间不存在数据的散列。接下来,将每秒的数据项的散列按顺序散列在一起。例如,数据项402和404在第一秒期间被接收;因此,数据项402和404的散列被散列在一起以创建第一组的秒散列中的第一秒的散列,元素412。图4示出在第一秒期间仅发生两个数据项;然而,可以接收更少或更多的数据项,并且每个数据项将被单独地散列并随后与数据项的其他散列一起被散列。针对之后的59秒重复此过程,使得存在表示在每秒期间接收的所有数据项的60个散列。

此后,将60个散列(每秒一个)散列在一起以创建第一分钟散列,元素416。当闰秒是可适用时,61个秒散列可被散列在一起以创建分钟散列。这个过程重复达60分钟,使得在60分钟的结束时有表示在分钟中的每个分钟期间接收到的所有数据的60个散列。如所示,数据项406、408和410在第二组秒(例如,秒61-120)期间被散列。然后数据项406、408和410的散列在元素414中被散列以生成第二组秒散列中的第一个。一旦创建了全部60秒(例如,秒61-120)的散列,则通过散列所有60个秒散列来创建第二分钟散列,元素418。

接下来,将元素416和418(分钟数据的每个散列)与分钟数据的58个其他散列一起被散列,以生成第一小时散列,元素420(即,被散列数据的60分钟)。这个过程被重复二十三次,使得有总共24个小时散列。24个小时散列中的每个都被散列在一起以创建第一日散列(元素422)。日散列可以被创建并以任何期望的增量被散列在一起。例如,可以对365个日散列进行散列以生成整年数据的散列(元素424)。尽管在元素424中示出了365个日散列,但是可以理解天数可以是365或366,这取决于在特定年份中的天数。或者,可以散列30个日散列以生成月的散列(元素426)。尽管在元素426中示出了30个日散列,但是天数可以是28-31,这取决于在特定的月份中的天数。在一些实施例中,代替散列365个日散列,可以将十二个月散列散列在一起以创建年散列。附加地,90个日散列(或如适用于季度的91或92个日散列)可以被组合以创建季度的散列(元素428)。

图5图示了使用稀疏tome存储和验证数据的过程。稀疏tome以与非稀疏tome相同的方式工作,除了当在一时间段期间未接收到数据时不创建散列。因此,在稀疏tome中,取决数据正在多快被接收,可能有很多缺失的散列。如所示,在第一秒(数据项502和504)和第二十五秒(数据项506、508和510)期间接收数据。对第一秒的数据散列(元素512)和对第二十五秒的数据散列(元素514)各自被散列,并且将第一秒的散列与第二十五秒的进行散列,以生成第一分钟散列(元素516)。由于在2-24或26-60秒期间没有接收到数据项,所以不创建附加的散列。相反,在非稀疏tome中,不管数据是否在一秒期间被接收到,系统都生成散列,使得将总有要被散列的60个散列以生成分钟散列。

然后通过散列分钟散列来创建小时散列(元素518)。在这个示例中,有可用于第一分钟(m1)和第四分钟(m4)的分钟散列,这意味着在第一分钟和第四分钟期间接收到至少一些数据。接下来,通过散列其中接收到数据的每个小时的散列来创建日散列。此处,日散列(元素520)包括第一小时的散列、第五小时的散列和第二十三小时的散列。可以通过对可用日(例如,第一日和第二日)的散列进行散列来生成该年的数据的散列,元素522。

图6图示了使用时钟链tome存储和验证数据的过程。时钟链tome除了两个特征之外与非稀疏tome相同地操作。首先,每个时钟链tome以创世散列(元素602)开始。创世散列可以是任何类型的数据,最好是解释tome中包括什么数据的数据(例如,股票标识符、客户号)。创世散列和数据项604和606的散列被散列在一起以生成第一秒散列(元素614)。

与非稀疏tome的第二个区别在于第二秒散列以第一秒散列开始,元素608。因此,第二秒散列(元素616)是第一秒散列(元素608)和数据项610和612的散列的散列。针对每秒重复该过程。例如,第二秒散列将是第三秒散列的第一个散列。一旦完成了散列的第一个六十秒,针对六十秒(或当有闰秒时为61秒)中的每个的散列被散列以创建第一分钟散列(元素618)。然后在接下来的六十秒内接收的数据以相同的方式被散列以创建第二分钟散列。针对接下来的分钟中的每个重复该过程达总共60分钟。将六十个分钟散列进行散列以创建小时散列(元素620)。以针对元素422、424、426和428描述的相同的方式分别创建元素622、624、626和628。

下文描述本公开的各种实施例。

1.一种计算机化方法,包括:

在第一参考级的第一参考级段期间接收数据项;

用对应的时间戳对所述数据项中的每个执行散列函数;

通过对所述第一参考级段中的每个中的所述数据项的散列根据他们各自的时间戳执行第二散列函数来生成针对所述第一参考级段中的每个的第一参考级段散列;以及

生成针对多个第二参考级段中的每个的第二参考级段散列,其中所述多个第二参考级段中的每个由预定数量的所述第一参考级段组成,其中所述多个第二参考级段散列中的每个通过对预定数量的所述第一参考级段散列执行第三散列函数来生成。

2.根据权利要求1所述的计算机化方法,进一步包括将所述第二参考级段散列中的至少一个记录到分布式账本。

3.根据权利要求1或2所述的计算机化方法,其中所述第一参考级段和所述第二参考级段是时间段。

4.根据权利要求3所述的计算机化方法,其中所述第一参考级段的时间段是秒,并且其中所述第二参考级段的时间段是分钟。

5.根据权利要求4所述的计算机化方法,其中所述第一参考级段的所述预定数量是六十或六十一。

6.根据权利要求1、2、3或4所述的计算机化方法,进一步包括针对附加参考级生成参考级段散列,其中所述附加参考级中的每个包括多个参考级段,其中所述多个参考级段中的每个包括预定数量的先前的参考级段,其中生成所述附加参考级段散列中的每个包括对所述预定数量的所述先前的参考级段中的每个的所述附加参考级段散列执行附加散列函数。

7.根据权利要求6所述的计算机化方法,其中第一接收数据项包括创世数据,其中所述第一参考级段中的每个的第一散列是除了所述第一参考级的第一段的第一散列之外的紧接先前的第一参考级段的散列,其中针对所述附加参考级段中的每个的第一散列是除了所述附加参考级中的每个的第一附加参考级段的第一散列之外的紧接先前的附加参考级段的散列。

8.根据权利要求1、2、3、4、5或6所述的计算机化方法,其中执行生成针对所述第一参考级段中的每个的第一参考级段散列,而不管在所述时间间隔期间是否接收到所述数据项中的任何数据项,其中当在第一参考级段中的一个期间没有接收到数据项时,执行占位符第一参考级段散列。

9.一种非瞬态计算机可读存储介质,包括一组指令,所述一组指令在由一个或多个处理器执行时使机器用于:

根据时间间隔生成参考级,其中第一参考级包括预定数量的时间间隔,其中剩余参考级的时间间隔中的每个由先前的参考级的预定数量的时间间隔组成;

通过根据其中接收到数据的时间间隔对所述数据执行散列函数来创建在第一参考级处的数据的散列;

通过对在第一参考级的所述时间间隔中的每个处的数据的散列执行散列函数,直到第一参考级的所述预定数量的时间间隔,来生成第一参考级时间间隔散列;以及

通过对所述先前的参考级的所述时间间隔中的每个的散列执行散列函数直到所述预定数量的时间间隔,来生成针对所述剩余参考级的参考级时间间隔散列。

10.根据权利要求9所述的非瞬态计算机可读存储介质,其中在由所述一个或多个处理器执行时,所述一组指令进一步使所述机器将所述参考级时间间隔散列中的至少一个记录到分布式账本。

11.根据权利要求10所述的非瞬态计算机可读存储介质,其中当由所述一个或多个处理器执行时,所述一组指令进一步使所述机器用于:

处理接收到的验证数据,所述验证数据跨越所述参考级时间间隔散列中的所述至少一个的时间段;

生成针对所述验证数据的所述参考级时间间隔散列;以及

将针对所述验证数据的所述参考级时间间隔散列与所述参考级散列中的所述至少一个进行比较,以验证所述验证数据从所述数据没有变化。

12.根据权利要求9、10或11所述的非瞬态计算机可读存储介质,其中所述第一参考级的时间间隔是秒,并且其中在所述第一参考级中的时间间隔的所述预定数量是六十或六十一。

13.根据权利要求12所述的非瞬态计算机可读存储介质,其中所述剩余参考级包括第二参考级,其中所述第二参考级的时间间隔是分钟,其中所述第二参考级中的时间间隔的所述预定数量是六十。

14.根据权利要求13所述的非瞬态计算机可读存储介质,其中所述剩余参考级进一步包括第三参考级,其中所述第三参考级的时间间隔是小时,其中所述第三参考级中的时间间隔的所述预定数量是二十四。

15.根据权利要求10、11、12、13或14所述的非瞬态计算机可读存储介质,其中当由所述一个或多个处理器执行时,所述一组指令进一步使所述机器用于:

接收证明所述数据的密码签名;以及

将所述附加参考级时间间隔散列中的至少一个记录到分布式账本。

16.根据权利要求9、10、11、12、13、14或15所述的非瞬态计算机可读存储介质,其中当由所述一个或多个处理器执行时,所述一组指令进一步使所述机器用于对所述数据加时间戳,其中通过对在第一参考级的数据执行散列函数来创建数据的散列包括对具有所述时间戳的数据执行散列函数。

17.根据权利要求9、10、11、12、13、14、15或16所述的非瞬态计算机可读存储介质,其中所述数据的第一接收数据包括创世数据,其中所述第一参考级的时间间隔中的每个的第一散列是除了所述第一参考级时间间隔的第一时间间隔的第一散列之外的紧接先前的时间间隔的散列,其中所述剩余参考级中的每个的时间间隔中的每个的第一散列是除了所述剩余参考级中的每个的第一参考级时间间隔的第一散列之外的紧接先前的时间间隔的散列。

18.根据权利要求9、10、11、12、13、14、15、16或17所述的非瞬态计算机可读存储介质,其中执行所述第一参考级时间间隔散列,而不管在所述时间间隔期间是否接收到所述数据,其中当在所述时间间隔期间没有接收到数据时,执行占位符第一参考级时间间隔散列。

19.一种数据存储和验证平台,包括:

一个或多个处理器;以及

计算机可读存储介质,具有存储在其上的指令,所述指令当由所述一个或多个处理器执行时使所述数据存储和验证平台用于:

根据时间间隔生成参考级,其中所述第一参考级包括预定数量的时间间隔,其中剩余参考级的时间间隔中的每个由先前的参考级的预定数量的时间间隔组成;

通过根据其中接收到数据的时间间隔对所述数据执行散列函数来创建在第一参考级处的数据的散列,其中所述数据以其被接收的顺序散列;

通过以时间顺序组合在时间间隔中的每个期间接收到的数据中的每个的散列,并且对在所述第一参考级的时间间隔中的每个处的数据的被组合的散列执行散列函数直到所述第一参考级的预定数量的时间间隔,来生成第一参考级时间间隔散列,

其中当在所述第一参考级的时间间隔中的任何一个时间间隔期间没有接收到数据时,生成针对第一参考级时间间隔散列的占位符散列;以及

通过以时间顺序组合所述先前的参考级的时间间隔中的每个的散列直到所述预定数量的时间间隔并且对所述先前的参考级的时间间隔中的每个的被组合的散列执行散列函数直到所述预定数量的时间间隔来生成针对所述剩余参考级的参考级时间间隔散列。

20.根据权利要求19所述的数据存储和验证平台,其中所述数据的第一接收数据包括创世数据,其中所述第一参考级的时间间隔中的每个的第一散列是除了所述第一参考级时间间隔的第一时间间隔的第一散列之外的紧接先前的时间间隔的散列,其中所述剩余参考级中的每个的时间间隔中的每个的第一散列是除了所述剩余参考级中的每个的第一参考级时间间隔的第一散列之外的紧接先前的时间间隔的散列。

21.根据权利要求19或20所述的数据存储和验证平台,其中以时间顺序组合在时间间隔中的每个期间接收到的数据中的每个的散列包括连接所述数据中的每个的散列。

计算机系统概览

本公开的实施例包括上文已经描述的各种步骤和操作。各个这些步骤和操作可以由硬件组件执行或者可以具体化在机器可执行指令中,所述机器可执行指令可以用于使得利用所述指令编程的通用处理器或专用处理器执行所述步骤。替代地,可以通过硬件、软件、和/或固件的组合来执行步骤。这样,图7是计算机系统700的示例,本公开的实施例可以用于所述计算机系统。根据本示例,计算机系统700包括互连710、至少一个处理器720、至少一个通信端口730、主存储器740、可移除存储介质750、只读存储器760、和大容量存储设备770。

(多个)处理器720可以是任何已知的处理器。(多个)通信端口730可以是或包括例如以下中的任意一项:用于基于调制解调器的拨号连接的rs-232端口、10/100以太网端口、或使用铜或光纤的千兆端口。可以取决于诸如局域网(lan)、广域网(wan)、或计算机系统700连接至的任何网络之类的网络选择(多个)通信端口730的性质。

主存储器740可以是随机访问存储器(ram),或本领域中公知的任何(多个)其他动态存储设备。只读存储器760可以是用于存储静态信息(诸如处理器720的指令)的任何(多个)静态存储设备(诸如可编程只读存储器(prom)芯片)。

大容量存储设备770可以用来存储信息和指令。例如,可以使用硬盘(诸如的scsi驱动器家族)、光盘、磁盘阵列(诸如adaptec的raid驱动器家族)、或任何其他大容量存储设备。

互连710可以是或包括一个或多个总线、桥、控制器、适配器、和/或点到点连接。互连710将(多个)处理器720与其他存储器、存储设备、和通信块通信地耦合。取决于所使用的存储设备,互连710可以是基于pci/pci-x或scsi的系统。

可移除存储介质750可以是任何类型的外部硬盘驱动器、软盘驱动器、光盘只读存储器(cd-rom)、光盘可重写(cd-rw)、数字视频盘只读存储器(dvd-rom)。

上文所描述的组件旨在例示一些类型的可能性。前述示例绝不应该限制本公开,因为它们仅仅是示例性实施例。

术语

下面给出了贯穿本说明书所使用的术语、缩写、和短语的简洁定义。

术语“连接”或“耦合”以及相关术语在操作性意义上使用并且不一定限于直接物理连接或耦合。因此,例如,两个设备可以直接地、或通过一个或多个中间介质或设备耦合。作为另一个示例,设备可以以可以在其之间传递信息的方式被耦合,同时彼此之间不共享任何物理连接。基于在此所提供的公开,根据前述定义本领域技术人员将领会连接或耦合存在的各种方式。

短语“在一些实施例中”、“根据一些实施例”、“在所示的实施例中”、“在其他实施例中”、“实施例”等一般指跟随着所述短语的具体特征、结构、或特性包括在本公开的至少一个实施例中,或者可以包括在本公开的多于一个实施例中。此外,这种短语不一定指相同的实施例或不同的实施例。

如果说明书陈述组件或特征“可以(may/can/could)”、或“可能(might)”被包括或具有特性,则这个具体组件或特性不是必须被包括或具有所述特性。

术语“响应的(responsive)”包括完全或部分地响应的。

术语“模块(module)”概括地指软件、硬件、或固件(或其任意组合)组件。模块典型地是可以使用(多个)指定的输入生成有用数据或其他输出的功能组件。模块可以或可以不是自含式的。应用程序(还称为“应用”)可以包括一个或多个模块,或者模块可以包括一个或多个应用程序。

术语“网络”一般地指能够交换信息的一组互连的设备。网络可以少到局域网(lan)上的若干私人计算机或者大到互联网(全球计算机网络)。如本文所使用的,“网络”旨在涵盖能够从一个实体向另一实体传输信息的任何网络。在一些情况下,网络可以包括多个网络,甚至多个异构网络,诸如一个或多个边界网络、话音网络、宽带网络、金融网络、服务提供商网络、互联网服务提供商(isp)网络、和/或公共交换电话网络(pstn),所述网络通过可操作以方便各网络彼此和之间的通信的网关互连。

同样,出于图示的目的,本文在计算机程序、物理组件、和现代计算机网络内的逻辑交互的背景下描述本公开的各实施例。重要的是,虽然这些实施例描述了关于现代计算机网络和程序的本公开的各实施例,本文所描述的方法和装置同等地适用于其他系统、设备、和网络,如本领域技术人员将领会的。这样,本公开的实施例的已图示的应用不是意味着限制,而是示例。本公开的实施例适用的其他系统、设备、和网络包括例如其他类型的通信和计算机设备和系统。更具体地,实施例适用于通信系统、服务、和设备,诸如手机网络和兼容设备。此外,实施例适用于从私人计算机到大型网络主机和服务器的所有级别的计算。

总之,本公开提供了用于存储和验证数据的新颖系统、方法、和布置。虽然上文给出了对本公开的一个或多个实施例的详细描述,在不背离本公开的精神的情况下,各种替代方案、更改、和等效例对本领域技术人员将是明显的。例如,虽然上文所描述的实施例指具体特征,本公开的范围还包括具有特征的不同组合的实施例以及不包括所描述的全部特征的实施例。因此,本公开的范围旨在涵盖落入所附权利要求书范围内的全部此类替代方案、更改、和变化,以及其等效例。因此,以上说明不应该被视为限制性的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1