CN109791594A - 为了在多个不可变数据结构上持续存储而对数据进行分段 - Google Patents
为了在多个不可变数据结构上持续存储而对数据进行分段 Download PDFInfo
- Publication number
- CN109791594A CN109791594A CN201780061575.6A CN201780061575A CN109791594A CN 109791594 A CN109791594 A CN 109791594A CN 201780061575 A CN201780061575 A CN 201780061575A CN 109791594 A CN109791594 A CN 109791594A
- Authority
- CN
- China
- Prior art keywords
- data
- value
- node
- segmentation
- pointer
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3297—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving time stamps, e.g. generation of time stamps
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Abstract
提供了一种处理,包括:接收一个或多个写入请求;选择第一值子集作为对应于较高安全性字段;分段第一子集中的第一值;指示第一计算设备将多个分段中的第一分段子集存储在存储器中;并且指示第二计算设备将多个分段中的第二分段子集存储在存储器中。
Description
相关申请的交叉引用
本专利要求2016年8月12日提交的题为FRAGMENTING DATA FOR THE PURPOSES OFPERSISTENT STORAGE ACROSS MULTIPLE IMMUTABLE DATA STRUCTURES(案卷号043788-0448333)的美国临时专利申请62/374,278的权益;2016年8月12日提交的题为STORINGDIFFERENTIALS OF FILES IN A DISTRIBUTED BLOCKCHAIN(案卷号043788-0448338)的美国临时专利申请62/374,307;2016年8月12日提交的题为IMMUTABLE LOGGING OF ACCESSREQUESTS TO DISTRIBUTED FILE SYSTEMS(案卷号043788-0448337)的美国临时专利申请62/374,296;2016年8月12日提交的题为TRANSPARENT CLIENT APPLICATION TO ARBITRATEDATA STORAGE BETWEEN MUTABLE AND IMMUTABLE DATA REPOSITORIES(案卷号043788-0448336)的美国临时专利申请62/374,293;2016年8月12日提交的题为GENERATION OFHASH VALUES WITHIN A BLOCKCHAIN(案卷号043788-0448332)的美国临时专利申请62/374,271;以及2016年8月12日提交的题为IMMUTABLE DATASTORE FOR LOW-LATENCYREADING AND WRITING OF LARGE DATA SETS(案卷号043788-0448331)的美国临时专利申请62/374,263。这些早先提交的申请中的每一个的全部内容,以及以引用方式并入其中的内容,以引用方式并入本文中用于所有目的。
技术领域
本发明一般涉及网络安全,并且更具体地,涉及为了在多个不可变数据结构上持久存储的目的而对数据进行分段。
背景技术
诸如文档存储库、文件系统、关系数据库、非关系数据库、存储器图像、键值存储库等的数据存储区在各种不同类型的计算系统中使用。通常,要存储的数据由数据存储区接收,然后在读取操作期间进行检索。在许多情况下,数据存储以利于基于数据存储中的数据的地址(例如,文件名)或数据的内容(例如,结构化查询语言查询中的选择语句)进行访问的方式来排列数据。
在许多情况下,不能信任数据存储区的数据的安全性和完整性。通常,侵入计算机网络的攻击者将修改或泄露数据存储中旨在保密的记录。此外,在许多情况下,攻击者可能是网络中的凭证实体,诸如流氓雇员,使得在一些情况下许多传统的数据存储的安全性不足。在许多情况下,加剧了风险,此类攻击者可能会尝试通过删除存储在数据存储中的访问日志来屏蔽其在网络中的活动。
发明内容
以下是本技术的一些方面的非详尽列表。在以下公开内容中描述了这些和其它方面。
一些方面包括一种处理,包括:用一个或多个处理器接收一个或多个写入请求以将多个值写入关系数据库的一个或多个元组中的多个字段,不同的值对应于不同的字段;用一个或多个处理器,基于对应于第一字段子集中的字段的第一值子集,选择值的第一子集,将第一字段子集指定为比第二字段子集具较高安全性的字段;用一个或多个处理器将第一值子集中的第一值分段为多个分段,每个分段具有第一值中的信息子集,并且不同的分段具有第一值中的不同信息子集,写入请求具有将第一值写入给定元组的给定字段的指示;用一个或多个处理器经由网络指示第一计算设备将多个分段中的第一分段子集存储在存储器中;用一个或多个处理器经由网络指示第二计算设备将多个分段中的第二分段子集存储在存储器中,其中:第一计算设备不能访问第二分段子集;并且第二计算设备不能访问第一分段子集;并且用一个或多个处理器,使关系数据库存储第二值子集和指向至少一些分段的一个或多个指针,其中:响应于一个或多个写入请求,第一值子集不写入关系数据库;并且一个或多个指针与给定元组的给定字段相关联地存储在关系数据库中,一个或多个写入请求请求写入第一值。
一些方面包括一种有形的非瞬时性机器可读介质,其存储指令,当由数据处理装置执行时使得数据处理装置执行包括上述处理的操作。
一些方面包括一种系统,包括:一个或多个处理器;以及存储指令的存储器,当由处理器执行时,使得处理器实现上述处理的操作。
附图说明
当鉴于以下附图阅读本申请时,将更好地理解本技术的上述方面和其它方面,其中相同的数字表示相似或相同的元件:
图1是示出可以根据一些实施例实现本技术的计算环境的示例的逻辑和物理架构方框图;
图2是示出根据一些实施例的将文档读取和写入到防篡改的不可变数据存储库的处理的示例的流程图;
图3是示出可以根据一些实施例由图2的处理操作的防篡改的不可变数据存储库的示例的数据模型方框图;
图4是示出根据一些实施例存储的值可以被分段并存储在多个不同防篡改的不可变有向非循环图中的处理的示例的流程图,诸如图3中所示的那些;
图5是示出根据一些实施例的防篡改的不可变数据存储库的示例的数据模型方框图,该数据存储库存储分布在多个有向非循环图中的可以由图4和图6的处理操作的数据分段;
图6是示出根据一些实施例的可以从图5的数据结构读取数据的处理的示例的流程图;
图7是示出根据一些实施例的可以形成防篡改数据存储库中的加密散列指针以使数据存储库模块化的处理的示例的流程图;
图8是示出根据一些实施例的现有工作负荷应用和用户界面可以改进以便以透明方式安全地存储和访问相对高安全性数据的处理的示例的流程图;
图9是示出根据一些实施例的可以将对分散数据的访问请求记录到防篡改的不可变数据存储库的处理的示例的流程图;
图10是示出根据一些实施例的可以通过存储文档版本或其它内容单元之间的差异来压缩防篡改的不可变数据存储库中的数据的处理的示例的流程图;
图11是示出根据一些实施例的可以遍历各文档版本之间的改变存储序列的版本图以读取文档的当前版本的处理的示例的流程图;
图12是示出根据一些实施例的数据结构的示例的数据模型方框图,通过该数据结构,版本图可以作为一系列内容图存储在一系列验证图或其它防篡改的不可变数据存储库上;并且
图13是示出可以通过其实现上述技术的计算设备的示例的物理架构方框图。
虽然本技术易于进行各种修改和替代形式,但是其特定实施例在附图中以示例的方式示出并且将在本文中详细描述。附图可能不按比例绘制。然而,应该理解的是,附图和对其的详细描述并非旨在将本技术限制于所公开的特定形式,而是相反,其旨在涵盖落入由所附权利要求限定的本技术的精神和范围内的所有修改、等效物和替代物。
具体实施方式
为了减轻本文所述的问题,发明人必须发明解决方案,并且在一些情况下同样重要的是,识别网络安全领域中被其他人忽视(或尚未预见)的问题。实际上,发明人希望强调认识到刚刚出现的那些问题的困难性,并且如果工业发展趋势继续如发明者所预期的那样那些问题将来会变得更加明显。此外,因为解决了多个问题,应该理解一些实施例是针对问题的,并且并非所有实施例都解决了本文描述的传统系统的每个问题或者提供了本文描述的每个益处。即,下面描述了解决这些问题的各种排列的改进。
通过下面描述的各种技术版本解决了与组织使用的数据存储和计算机网络的安全性有关的各种问题。这些不同的技术可以在一些情况下协同使用,因此它们的描述被分组为单个描述,该描述将在具有针对不同技术及其组合的不同权利要求组的多个专利申请中提交。鉴于该方法,应该强调的是,这些技术也是独立有用的,并且可以彼此隔离地部署或者以组合不同技术子集的任何排列来部署,这些技术都不表示本文中的任何其它描述是限制性的。下面概念上相关的这些技术组之前是标题。这些标题不应被理解为:表示不同标题下的主题可能不能被组合,标题下描述的每个实施例具有标题的所有特征,或者在给定标题下的每个特征必须存在于与对应的概念上相关的技术组一致的实施例中,同样不表示任何其它描述是限制性的。
根据图1中示出的示例计算环境10,最好地理解这些技术。计算环境10是可以实现本技术的许多计算架构的一个示例。在一些实施例中,本技术被实现为多租户分布式应用,其中一些计算硬件由多个租户共享,所述多个租户访问由这些租户控制的计算设备中的计算硬件上的资源,例如,在由租户操作的各种局域网上。或者在一些情况下,单个租户可以在私有控制的硬件上执行每个所示的计算实体,其中计算环境10的多个实例存在于不同的组织。或者一些实施例可以实现混合方法,其中多租户计算资源(例如,计算机、虚拟机、容器、微内核等)与本地计算资源或私有云资源组合。在一些实施例中,计算环境10可以包括2016年6月2日提交的题为COMPUTER SECURITY AND USAGE-ANALYSIS SYSTEM(案卷号043788-0447379)的美国专利申请15/171,347中描述的计算环境的安全特征并且并对进行扩展,该申请的内容以引用方式并入本文中。
在一些实施例中,计算环境10包括多个客户端计算设备12、低信任数据库14、安全分布式存储器16、域名服务18和翻译器服务器20(或设置在负载均衡器后面的翻译器服务器实例的弹性可扩展集合)。在一些实施例中,在一些情况下,这些组件中的每一个可以经由互联网22和各种局域网彼此通信。在一些实施例中,通信可以经由覆盖在公共互联网之上的虚拟专用网络。在一些实施例中,所示组件可以在地理上分布成例如相距超过1千米,相距超过100千米,相距超过一千千米,或者更远,例如在北美或者全世界的内容分布事件上。或者在一些情况下,组件可以共同定位并托管在空中或非空中专用网络中。在一些实施例中,连接到互联网22的所示方块中的每一个可以用下面参考图13描述的一个或多个计算设备来实现。
在一些实施例中,每个客户端计算设备12可以是由用户或希望安全地存储数据的实体的应用程序操作的多个计算设备中的一个。例如,给定的企业或政府组织可以具有超过10个,超过100个,超过1,000个或超过10,000个用户和应用程序,每个用户和应用程序具有访问存储在较低信任数据库14(或者一系列这类数据库或其它类型的数据存储区)和安全分布存储区16中的数据的关联计算设备。在一些实施例中,多个实体可以在竞争环境10中访问系统,例如,多于五个,多于50个,多于500个或多于5000个不同的实体可以与相应的客户端计算设备访问共享资源,或者可以具有它们自己的计算环境10的实例。在一些实施例中,一些客户端计算设备12是最终用户设备,例如,执行将数据存储在较低信任数据库14和安全分布式存储器16中或读取这类数据的分布式应用的客户端组件。客户端计算设备可以是膝上型计算机、台式机、平板电脑、智能电话或机架式计算设备,如服务器。在一些实施例中,客户端计算设备是物联网设备,如智能电视、机顶媒体支付器、安全摄像头、智能锁、自动驾驶汽车、自动无人机、工业传感器、工业致动器(如电动机)或店内售货亭。在一些实施例中,一些客户端计算设备12可以是无终端计算实体,诸如容器、微内核、虚拟机或机架安装的服务器,其执行独立应用或面向服务的应用中的一个或多个服务,如存储数据或以其它方式将数据存储在较低信任数据库14或安全分布式存储器16中的微服务架构。
在一些实施例中,较低信任数据库14和安全分布式存储器16可各自存储利用客户端计算设备12访问的数据的一部分,在一些情况下,其间的指针存储在这些数据存储中的一个或两个中。在一些实施例中,如下所述,该数据可以以从工作负载应用中抽象出安全分布式存储器16的方式存储,通过该工作负载应用访问(例如,读取或写入)数据。在一些实施例中,数据访问操作可以使用工作负载应用存储或访问较低信任数据库14和安全分布式存储16中的数据,其中工作负载应用未被特别配置成访问安全分布式存储16中的数据,例如,配置成不考虑是否存在安全分布式存储器16而操作,并且其中安全分布式存储器16中的数据存储对于将内容存储在较低信任数据库14和安全分布式存储器16中的工作负载应用是透明的。在一些实施例中,这样的工作负载应用可以被配置成并且以其它方式设计成在存储该数据时仅与较低信任数据库14连接,并且如下所述,一些实施例可以用附加逻辑来包围较低信任数据库14的接口,该附加逻辑将一些数据路由到安全分布式存储器16,并且以对工作负载访问内容透明的方式从安全分布式存储器16检索该数据(即,由工作负载应用写入或读取的数据)。
存储在较低信任数据库14和安全分布式存储16中的内容可以用各种不同类型的应用创建或访问,诸如独立应用或多服务分布式应用(例如,实现其中每个服务由一个客户端计算设备12托管的微服务架构)。示例包括电子邮件、文字处理系统、电子表格应用程序、版本控制系统、客户关系管理系统、人力资源计算机系统、会计系统、企业资源管理系统、库存管理系统、逻辑系统、安全聊天计算机系统、工业处理控制和监控、交易平台、银行系统等。为了服务于应用程序的功能而生成或访问数据库14中的内容的这类应用在本文中称为“工作负载应用”,以将这些应用与实现本技术的基础设施代码区分开来,这不是表示这些代码主体不能在一些实施例中集成到具有基础设施功能的单个工作负载应用中。在一些情况下,诸如在前面的列表中的那些中选择的若干工作负载应用(例如,多于2个,多于10个或多于50个)可以共享由本文描述的基础设施代码和功能提供的资源。
在一些实施例中,较低信任数据库14是上述各种类型的数据存储中的一个。在一些情况下,较低信任数据库14是关系数据库,具有多个表,每个表具有对应于不同字段的一组列,或者成行存储的各类型的值或表中的记录(即,在一些实现方式中的一行),在一些情况下,对应于行的每个记录可以是具有在该相应表内是唯一的主键的元组,作为其它表中的主键的一个或多个外键,以及对应于指定元组中不同字段的不同列的一个或多个其它值。或者在一些情况下,数据库可以是面向列的数据库,其中记录以列存储,其中不同的行对应于不同的字段。在一些实施例中,较低信任数据库14可以是被配置成使用结构化查询语言(SQL)命令访问的关系数据库,诸如用于选择满足命令中指定的标准的记录的命令,用于连接来自多个表的记录的命令,或者用于将值写入这些表中的记录命令。
或者在一些情况下,较低信任数据库14可以是另一种类型的数据库,诸如noSQL数据库,如各种类型的非关系数据库。在一些实施例中,较低信任数据库14是面向文档的数据库,诸如存储多个序列化分层数据格式文档的数据库,如JavaScriptTM对象表示法(JSON)文档或可扩展标记语言(XML)文档。在一些情况下,访问请求可以采用xpath或JSON路径命令的形式。在一些实施例中,较低信任数据库14是键值数据存储,其具有一系列存储数据的键值对。或者在一些情况下,较低信任数据库14是各种其它类型的数据存储中的任何一种,诸如版本控制系统中的文档实例、存储器图像、分布式或非分布式文件系统等。示出了单个较低信任数据库14,但是实施例与商业实例一致,并且在上述示例中的一些不同类型的情况下,在商业实例中可能包括实质上更多,诸如多于两个,多于五个或多于10个不同的数据库。在一些实施例中,一些较低信任数据库可以是由第三方托管并且经由第三方应用程序接口通过与例如用户的网页浏览器或另一个应用程序的交换进行访问的软件即服务应用的数据库。在一些情况下,较低信任数据库14是可变数据存储或不可变数据存储。
在一些情况下,可以部分地利用与用于访问数据的应用的各种用户帐户相关联存储的角色和许可来指定对较低信任数据库14中的数据的访问以及对安全分布式存储器16中的对应记录的对应访问。在一些实施例中,可以使用2016年6月2日提交的题为COMPUTERSECURITY AND USAGE-ANALYSIS SYSTEM(案卷号043788-0447379)的美国专利申请15/171,347中描述的技术来对这些许可修改,例如,撤销或以其它方式调整,该申请的内容以引用方式并入本文中。
数据库14被描述为“较低信任”。术语“较低信任”不需要关于任何一方的绝对信任度量或任何特定心态,而是用于区分数据库14与安全分布式存储16,其在下面描述的一些实现方式中具有某些安全特征,并且在一些情况下可以被称为“较高信任”数据库。
在一些情况下,可以使用下面描述的技术拦截应用写入或已经写入较低信任数据库14的一些数据,或者将其移动到安全分布式存储器16。此外,可以拦截从工作负载应用到较低信任数据库14的访问请求,或者可以拦截来自这种访问请求的响应,并且来自较低信任数据库14的数据可以与来自安全分布式存储器16的数据合并,其在呈现给应用之前响应于该请求,随后将更详细地描述。此外,可以限制在任何一个时间向客户端计算设备显示安全分布式存储中的多少信息的方式来截取、修改和迭代地执行读取请求,如下所述。
在一些实施例中,安全分布式存储器16可以包括一系列数据中心24,其可以在地理上分布并且是异构架构。在一些实施例中,数据中心24可以是用于计算环境10的一个或多个组织用户(诸如租户)的各种公共或私有云或本地数据中心。在一些实施例中,数据中心24可以在地理上分布在美国、北美或全世界,在一些情况下,不同的数据中心相距超过100或1,000千米,并且在一些情况下,在不同的管辖区域中具有不同的数据中心24。在一些实施例中,每个数据中心24可以包括不同的私有子网,通过该私有子网,诸如子网中的机架式计算设备之类的计算设备例如经由数据中心内的包装顶部架构交换机在相对于互联网22的防火墙之后进行通信。在一些实施例中,数据中心24中的每一个或不同子集的数据中心24可以由不同的实体操作,实现不同的安全体系结构并且具有不同的应用程序接口以访问计算资源,示例包括Amazon Web ServicesTM、MicrosoftTM的Azure和Rack SpaceTM。示出了三个不同的数据中心24,但是实施例与可能包括更多数据中心的商业实现一致,诸如超过五个,超过15个或超过50个。在一些情况下,数据中心可以来自相同的提供商,但在不同的地区。
在一些实施例中,每个数据中心24包括由不同计算实体公开的多个不同主机,如微内核、容器、虚拟机或执行非虚拟化操作系统的计算设备。每个主机可以在相应数据中心24的子网上具有互联网协议地址,并且可以经由分配给下面将描述的应用实例的端口监测和传输,通过该应用该数据存储在分布式分类账中。在一些实施例中,每个存储计算节点26可以对应于不同的网络主机,每个网络海岸具有监测端口的服务器,并且被配置成利用实现不可变防篡改分布式分类账的散列指针来实现下面描述的有向非循环图中的一个的实例,示例包括区块链和相关的数据结构。在一些情况下,这些存储计算节点26可以在一些情况下跨数据中心24复制,例如,三个或多个实例用作复制的实例,并且一些实施例可以实现下面描述的技术以确定这些复制的实例之间的一致性为存储数据的状态。此外,一些实施例可以基于存储的数据量、访问请求的数量等弹性地扩展这类实例的数量。
一些实施例还可以包括域名服务(DNS)18,诸如私有DNS,其将统一资源标识符(例如统一资源定位符)映射到例如存储计算节点26的互联网协议地址/端口号对、翻译器20,并且在一些情况下其它客户端计算设备12或计算环境10中的其它资源。在一些实施例中,客户端计算设备12、存储计算节点16、数据库14或翻译器20可能遇到统一资源标识符,诸如统一资源定位符,并且该计算实体可以被配置成在DNS 18的IP地址和端口号对处访问DNS18。该实体可以用统一资源标识符向DNS 18发送请求,DNS 18可以利用网络和进程地址(诸如对应于统一资源标识符的互联网协议地址和端口号对)进行响应。因此,可以替换、复制、移动或以其它方式调整底层计算设备,而不会损害存储在不同计算设备上的信息之间的交叉引用。或者一些实施例可以在不使用域名服务18的情况下实现这种灵活性,例如,通过实现分布式散列表或基于数据内容(例如基于根据数据或数据的标识符的散列的前缀或后缀)将数据一致地映射到适当的计算设备或主机的负载平衡。例如,一些实施例可以实现负载平衡器,其基于节点标识符的前缀(诸如,先前或后续阈值数量的字符)将请求路由到存储计算节点26。
一些实施例还可以包括虚拟机或容器管理器,其被配置成协调或以其它方式弹性地扩展计算节点的实例和翻译器20的实例,例如,根据需要将自动将对应图像应用于一个或多个数据中心24内的供应资源,并且随着需求降低而减少实例。
在一些实施例中,翻译器20可以被配置成执行下面更详细描述的例程,该例程在较低信任数据库14的地址空间和安全分布式存储器16的地址空间之间进行转换。在一些实施例中,翻译器20可以从客户端计算设备12接收将要写入较低信任数据库14的一个或多个记录,或者可以从较低信任数据库14接收这类记录,并且这些记录可以映射到下面描述的安全分布式存储器16中的分段标识符(或其它指针,诸如其它节点标识符)。然后,翻译器20可以使这些记录存储在安全分布式存储器16中,并且存储分段标识符代替较低信任数据库14中的那些记录,诸如代替记录中的各个值。在一些实施例中,翻译可以在对应于各个记录中的各个字段的各个值的级别上发生,如数据库14中的表的行,或者一些实施例可以转换更大的数据集合,例如,接受整个记录,如整个行或多个列,如主键和给定行中的主键以外的单个值。一些实施例可以接受文件或其它二进制大对象(BLOB)。然后,翻译器20可以用下面描述的方式用指针(如安全分布式存储器中的分段标识符)替换较低信任数据库14中的那些值,然后以下面描述的方式使那些数据存储在安全分布式存储器16中。在一些示例中,可以存储文档,其可以是相对二进制大对象编码文件系统对象的相对小的独立值,如文字处理文件、音频文件、视频文件、聊天日志、压缩目录等。在一些情况下,文档可以对应于数据库内的单个值,或者文档可以对应于文件或其它二进制大对象。在一些情况下,文档可能大于一个字节、100个字节、1kB、100kB、1MB或1GB。在一些实施例中,文档可以对应于消息传递系统中的消息,或者可打印文档格式的文档、Microsoft WordTM文档、音频文件、视频文件等。
在一些实施例中,翻译器20可以包括从驱动程序接收请求并利于数据翻译的代码。在一些情况下,翻译器20可以是远程托管在公共云或私有云中的一组弹性扩展的翻译器20中的一个。在一些情况下,翻译器可以实现以下功能:
1.验证请求
a.使用数据库,一些实施例验证用户提供的参数的组合,诸如在安装时注册的预定义软件ID、客户端ID和机器专用标识符。将其与已知列表进行比较,然后用IP地址和/或其它网络专用参数进一步验证。
2.数据验证
a.解析HTTP主体然后解码,一些实施例确定用纯文本替换的唯一参考值列表。使用数据库,一些实施例首先检查请求机器是否具有访问数据的权限。接下来使用数据库,一些实施例找到该数据的第一跳的网络名称并放入阵列中。
3.阈值检查
a.用每个唯一请求的分段(或节点或文档或内容)标识符的位置,一些实施例针对一系列阈值或速率对象进行检查。一些实施例查找访问速率、时间窗口或基于位置的规则,并相对规则的映射应用所请求的数据。在一些实施例中,如果任何特定数据突破阈值,则生成系统中的异常,从而导致通知和记录。
4.工作
a.翻译器20可以将数据请求分成各项工作并将工作放置到工作队列上。拆分可以通过每个消息的静态工作大小来完成,并且可以使用交易字母交换来重试并最终使消息失败。
5.响应功能
a.可以从队列返回数据,并且可以匹配纯文本值并用对应的指针替换(诸如分段、文档、节点或内容单元标识符,这不是建议这些或任何其它类别列表描述脱离组)。在一些实施例中,一旦所有工作都返回了响应,就可以返回该响应。
在一些实施例中,客户端计算设备12可各自执行其中一个或多个应用28执行的操作系统。这些应用可以包括上述工作负载应用程序示例的客户端部分,其可以包括业务逻辑和其它程序代码,通过该程序代码实现微服务架构中的服务。在一些实施例中,应用28在不同的客户端计算设备中可以是不同的,并且各个客户端计算设备可以执行多个不同的应用。在一些实施例中,应用28可以被配置成经由在操作系统内执行的数据库驱动程序32与较低信任数据库14接口连接。数据库驱动程序32可以是各种不同类型的驱动程序中的任何一种,诸如ODBC驱动程序、JDBC驱动程序等。在一些实施例中,数据库驱动程序32可以被配置成经由客户端计算设备12的网络接口34访问较低信任数据库14,网络接口诸如连接到局域网的物理媒体的网络接口卡,通过该网络接口卡,访问互联网22。
一些实施例还可以包括在应用28和数据库驱动程序32之间接口连接的安全驱动程序30。在一些实施例中,安全驱动程序30对于应用28可以是透明的,使得数据库驱动程序32的应用程序接口由安全驱动程序30呈现给应用28,并且在一些情况下,从应用28的角度来看,该应用程序接口可以相对于由数据库驱动程序32呈现的应用程序接口未被修改。在一些实施例中,安全驱动程序30可以包装(wrap)数据库驱动程序32的应用程序接口,使得安全驱动程序30从应用程序28接收到驱动程序32的应用程序接口请求,对这些请求动作,并且在一些情况下修改那些请求,然后在一些情况下提供对数据库驱动程序32的修改的请求。类似地,可以由安全驱动程序30以与驱动程序32提供的方式一致的方式提供返回应用28的响应,如下面更详细描述。
在一些实施例中,安全驱动程序30被配置成在通过应用28将写入(或尝试)到较低信任数据库14的数据分离(或执行)成较高安全性数据和较低安全性数据之后与翻译器20接合。同样,术语“较低安全性”和“较高安全性”用于区分为了安全目的而不同地分类的数据,并且不需要针对绝对安全度量或心态进行测量。然后,可以由应用28提供的方式由数据库驱动程序32将较低安全性数据写入较低信任数据库14,而不管是否存在安全驱动程序30。
另一方面,较高安全性数据可以由翻译器20以下面描述的方式存储,该翻译器使得该数据对于恶意行为者的攻击相对稳健。当将数据返回到应用28时,例如响应于接收到读取请求,在一些情况下可以反向这些操作。同样,下面更详细地描述这些操作。通常,在一些实施例中,在一些情况下,在将数据呈现给应用程序28之前,来自较低信任数据库14的数据和来自安全分布式存储器16的数据可以由安全驱动程序30合并。通过对客户端计算设备12内的较高安全性数据进行动作,在该数据离开客户端计算设备12之前,一些实施例可以减少计算环境10的攻击服务。即,并非所有实施例都提供该益处,并且一些实施例可以实现客户端计算设备12外部的安全驱动程序30的功能,例如,在数据库网关中,在较低信任数据库14处实现的数据库管理系统中,或者在设置在较低信任数据库14与在到较低信任数据库14的路径中的网络和客户端计算设备12之间的计算设备中执行的另一独立应用程序上。
在一些实施例中,安全驱动程序30包括出站路径和入站路径。在一些实施例中,出站路径包括外部解析器36、验证器38、数据多路复用器40。外部解析器可以将值分类为在下面描述的数据策略中应用一个或多个规则的较高安全性或较低安全性的值。验证器可以执行下面描述的语句验证功能。多路复用器可以基于安全分类将数据路由到较低信任数据库14或翻译器20。在一些实施例中,入站路径包括解析器42和数据解复用器44。入站路径可以包括解析器42,该解析器被配置成检测来自较低信任数据库14的查询响应中的数据的指针,其指向安全分布式存储器16中的数据。解析器42可以调用翻译器20以请求用更安全存储的数据替换指针。在一些情况下,解复用器44可以将来自翻译器20的数据与相同查询响应中的较低安全性数据合并。在一些情况下,安全驱动程序可以实现下面参考图8描述的处理并执行以下功能:
1.语句解析
a.对于SELECT语句,可能有WHERE子句,它寻找与受保护列中的数据的匹配。在此阶段期间,一些实施例解析SELECT语句并检查是否需要将WHERE子句中的任何纯文本值翻转到参考空间中。语句可以标记为处理并单独传递。
b.对于INSERT或UPDATE语句,语句主体或WHERE子句(INSERT)中可能存在数据。在此阶段期间,一些实施例解析该语句并检查是否需要将WHERE子句或主体中的任何纯文本值翻转到参考空间中。语句可以标记为处理并单独传递。
c.安全驱动程序可以使用本地保存的给定客户端的当前保护设置的副本。在一些实施例中,这是与语句中的数据库、表和列名称进行比较的本地保存和更新(例如,周期性或不断地)表。获得新状态表之间的时间由各种因素决定。
2.语句验证
a.在数据库命令的操作期间,一些实施例检查语句以寻找潜在的注入或其它恶意SQL语句,并阻止该查询或记录事件发生。这是本地支持的操作,在一些情况下可由每个驱动程序完成。
3.语句流程
a.取决于Parse(解析)的结果,驱动程序可以向预设URL发出HTTP请求,并要求例如由翻译器20将纯文本数据切换到参考空间。
b.如果需要,可以用参考空间数据更新语句,并且可以将语句传递给较低信任数据库14服务器。
4.结果组处理
a.对于SELECT语句,处理结果组,并且如果返回数据中的列与本地保存表中的任何条目匹配,则安全驱动程序20可以执行HTTP请求以将参考空间数据切换到纯文本空间。
b.驱动程序30可以迭代数据并选择不同的值以放入HTTP主体并使用预设URL和系统DNS 18进行请求,例如通过接合翻译器20。
c.在一些情况下,可以为结果组中的每次发生返回和替换数据并返回到应用28。
以上系统的各个方面或其它架构可以实现下面在不同标题下扩展的各种技术。
用于低延迟读取和写入大数据集的不可变数据存储
通常,传统数据库不能充分地保护免受威胁行为者或内部资源(雇员、信息技术人员等)篡改数据。最好的情况是,此类系统通常提供审核访问和修改存储数据的能力,但审核日志通常是可变的,因此可以像数据一样容易改变。
最近的不可变数据库示例包括基于区块链的数据库,例如bitcoind和MultiChain。区块链系统建立在2008年10月以笔名Satoshi Nakamoto撰写的题为“Bitcoin:A Peer-to-Peer Flectronic Cash System”的论文中首次描述的想法。这些系统通常基于加密、一致性算法和X证明的一些组合实现对等系统,其中X是难以在整个网络中整合的一些方面,诸如工作证明、股份证明、存储证明等。通常情况下,具有X证明的网络上的那些行为者就对等交易的验证达成一致性,通常使用诸如Paxos、Raft或hashgraph之类的各种一致性算法。或者一些私有区块链不实现X一致性证明,例如,实现区块链的计算硬件由可信方控制。链式加密操作将一系列此类事务绑定到链中,该链一旦经过验证,就通常在伪造时计算成本过高。
然而,许多现存的基于区块链的数据库不适合于某些用例,特别是例如在区块链托管的文件系统中那些涉及对大文件(例如,作为单个实体处理的二进制数据的文档或其它集合,通常称为“二进制大对象”)的延迟敏感访问(例如,读取或写入)的那些用例。实际上,许多区块链数据库不容易配置成存储大对象和对象文件(例如,大约500千字节或更大,取决于用例和可接受的延迟),因为这类系统通常高度专用于较小的有效负载“交易”应用。在这类系统中,当存储较大的二进制数据集合(例如,文件或二进制大对象)时,链会随着链变大而显著减慢,特别是对于写入操作。
如上所述,区块链通常允许将少量信息存储在不可变数据结构中,但链中的时刻数据被改变,链被破坏并且不再能够以表示数据有效的方式运行。最常见的区块链实现方式是可公开访问的比特币分类账(区块链是为其设计的)。
如上所述,这种系统对于某些用例存在某些问题。以下称为“Docuchain”的系统的一些实施例减轻了这些和其它问题。Docuchain是专门设计用于二进制大对象(BLOB)的低延迟放置和获取操作的区块链软件套件。在一些实施例中,Docuchain使用称为“Merkle树”的基础数据结构的改进版本来提供区块链的不可变属性。在一些实施例中,Docuchain可操作以例如在小于50毫秒(ms)内响应命令,并且预期许多商业实现方式提供与链相互作用的应用所感知的子10ms操作,以及在链等级的子5ms操作。此外,预计这种响应时间将随着链尺寸而缩放。一些实施例可以以nlog(n)缩放响应时间,其中n是链中的条目的数量。
Merkle树通常通过密码散列树来工作,其中树的每个元素包含其子节点所包含的信息的散列,并且叶元素是存储在Merkle树中的主题数据的散列。在为了存储数据的Merkle树的许多传统实现方式中,如许多早期区块链数据库中的那些,数据存储在单独的逻辑数据存储区中,进行散列,并且仅将散列传送到Merkle树中。即,存储的数据库中的数据不是Markle树的一部分,只有数据的散列摘要是Merkle树的一部分。
为了减轻传统区块链数据库的一些问题,Docuchain的一些实施例将数据直接存储在Merkle树中,但是实施例不限于Merkle树中的数据存储区,这并不表示其它描述是限制性的。即,当数据被写入数据库或从数据库读取时,该数据被写入到Merkle树的元素的特定字段(例如,节点的节点内容的属性)中或者从Merkle树的元素的特定字段中读取(而不仅仅是驻留在Merkle树中的数据的散列摘要,而整个数据驻留在外部数据存储中)。在这种紧密耦合的情况下,如果数据完全被改变,则树的整个散列(与存储在数据库中的文件的散列不同)立即被抛弃,最终链将被破坏并在验证操作期间被检测到。此外,一些实施例防止二进制大对象被存储在外部(可能可变且不太安全)的数据存储中。最后,数据与树的紧密耦合有望减少与链进行交易所需的读取/写入操作次数,从而进一步减少潜在的延迟。
在一些实施例中,Docuchain包含两个组件:LibDocuchain和DocuSocket。
在一些实施例中,LibDocuchain是包含以下数据结构的软件库:
*Merkle树<H,T>
*DataBlock<H,T>
*BlockManager<H,T>
其中“H”表示加密散列函数,而“T”表示存储在链中的数据类型。通常,散列函数将任意大小的数据映射到固定大小的数据。加密散列函数的示例包括SHA256、SHA-2、MD5等(例如,在一些实施例中,应用不止一次,Docuchain可以使用各种不同类型的散列函数,并且预期包括稍后开发的散列算法(例如,新的后量子加密散列)。
在一些实施例中,BlockManager负责获取数据,放入适当的区块并插入适当的Merkle树中,在适当的时间写入盘,增加(例如,保证)链耐久性(即,篡改-抵抗性)。此外,在一些实施例中,存在JobManager,其管理数据结构上的并发操作以传递操作时间。
在一些实施例中,DocuSocket是维护与客户端(例如,寻求访问存储在数据库中的数据的远程计算设备)的连接的软件库。来自客户端的连接可能相对无状态的(并且在一些情况下,在确认会话之后没有进一步的状态)。在一些实施例中,连接可以以任意顺序接受任意数量的请求,并且将以任意顺序返回对请求的响应。例如,连接可能接收写入(A)、写入(B)、读取(C)操作,并且在一些实施例中,Docusocket可以在A或B之前响应请求C。然而,一旦交易响应来自A或B,在一些实施例中,那些操作被认为是最终的并且被提交给链并且是可立即查询的。这种“永远在线”和高度可用的连接是一个差异化因素,它允许Docusocket在可比较的基准中胜过标准区块链。(即,并非所有实施例都提供这些益处,因为描述了各种独立有用的发明,并且这些发明中的一些可能用于其它目的。)
在一些实施例中,通过Docusocket接受写入请求并将其传递给BlockManager以写入Merkle树对象。在一些情况下,该操作的结果是由Merkle树中的位置、来自前一个区块的散列以及写入的数据的内容组成的散列;这称为交易ID(TXID),它是节点标识符或指针的示例(不表示这些或其它类别是不相关联的)。在一些实施例中,这些TXID存储在备用数据存储区中以供稍后引用和检索,例如,在较低信任数据库14中代替它们指向的数据,或者在较低信任文件系统中代替由TXID引用的文档。在一些情况下,TXID是指向分段指针和编码存储数据的分段的分段指针链表。
如上所述,早期的区块链数据库能够存储二进制大对象,但是当访问更大的数据集合(例如,更大的BLOB)时,存储和访问数据的方式经常会造成服务器性能损失。此类系统通常依赖于最初旨在处理比特币和其它加密货币的交易性质的附加功能。这种附加功能通常由“链内”脚本语言提供,该语言定义进入链的交易。对于许多用例,这是一种安全且有效的维护分类帐的方法,然而对于较大的链,这些特征会带来显著的时间复杂性成本,特别是在写入操作中。随着这些链的生长,它们变得非常慢。存储链内文档的区块链文档数据库预计会增长得非常快,因此对现有技术实际可行的内容产生了很大的限制。
相反,因为Docuchain的一些实施例以其精确表示(其不应被读取以排除各种转换并且可以包括存储压缩的加密的数据副本)直接将数据存储在Merkle树中,所以这些实施例预期能够避免使用内链脚本语言的需要,并且一旦将其加载到存储器中,就能够在树上提供0(log(n))获得/放置操作。此外,预期在Merkle树中存储提交给数据库的数据而不仅仅是散列摘要,会阻碍(并且在一些情况下击败)对存储数据的散列冲突攻击。在这类攻击中,选择并设计恶意内容以产生与存储数据相同的散列,并且在数据库中将恶意数据替换真实数据。对于传统系统,Merkle树将生成一个散列值,将恶意内容验证为可信。相反,一些实施例通过将提交给数据库的数据存储在Merkle树中来避免该攻击向量。此外,一些实施例可以检测改变而不需要持续连续地验证每个二进制大对象及其相应的散列摘要,这与仅仅存储链中二进制大对象的散列摘要的许多系统不同。即,并非所有实施例都提供这些益处,例如,一些实施例可以避免使用传统的链内脚本来访问链中的散列摘要,而不存储整个文档,从而加速操作。
这些库可以实现图2中所示的处理的示例,其示出了可以被实现为以不可变的防篡改的数据结构存储和访问文档的处理50的示例,其示例在图中示出。在一些实施例中,处理50可以在上述计算环境10中实现,但是应该强调的是,实施例不限于该实现方式,这并不表示任何其它描述是限制性的。实际上,一些实施例可以实现在单个计算设备上示出的处理的版本,作为单个应用的一部分,诸如以所描述的方式在本地存储文档的文件管理器。
在一些实施例中,处理50的操作以及本文描述的其它处理可以以与所描述的顺序不同的顺序实现,可以包括重复的步骤,可以包括同时执行的步骤,可以包括省略的步骤,或者可以除了所描述的示例性布置之外以其它方式不同地布置,其中没有一个表示其它描述是限制性的。此外,可以通过用一个或多个处理器执行存储在有形的非瞬时性的机器可读介质上的指令来实现处理50的操作以及本文描述的其它处理和功能,使得当执行指令时,所描述的功能已实现。在一些情况下,尽管使用单数介质,操作可以以分布式方式存储在多个介质上,例如,不同的指令子集存储在执行那些不同的相应指令的不同计算设备的存储器中,布置与本文中使用的单数形式的“介质”一致。此外,数据的存储不需要在没有电源的情况下持久存在,并且可以用持久数据存储或动态数据存储来实现,诸如动态随机存取存储器,其可以在移除电源时耗散存储的数据。
在一些实施例中,处理50包括接收写入命令,该写入命令请求将与写入命令相关联的文档存储在不可变数据结构中,如方框52所示,诸如防篡改的不可变数据结构。在一些情况下,写入命令可以是从安全驱动程序30接收的应用28写入到上述低信任数据存储区14的SQL命令,或者该命令可以是将文件或其它文档存储在文件系统中的命令。例如,在一些情况下,写入命令可以是由操作系统的文件管理器接收的请求,以将文件存储在作为操作系统的用户界面内的网络驱动程序呈现的存储库中,其中一些或全部网络驱动程序托管在不可变数据结构中,如下面参考图3和图5所述。在一些实施例中,写入命令可以以编程方式生成,或者在一些情况下,写入命令可以响应于例如请求存储文档的用户输入而生成。如上所述,术语“文档”在本文中相对广泛地使用,并且可以包括存储单独片段的信息,或更大的二进制大对象,诸如范围高达多个千兆位或更大的文件。文件可以包括与元数据相关联的存储数据,如作者、文件大小、创建日期、修改日期、文件名、扩展名等。此类文件可能与WindowsTM、AndroidTM、iOSTM、LinuxTM或MacTM操作系统中的文件定义一致。
短语“不可变数据结构”中的术语“不可变”是指即使在由数据表示的信息改变之后计算系统和写入正确命令也被配置成保留在适当位置的数据的布置。例如,数据可以表示用户的电话号码,并且使用不可变数据结构的实施例可以写入指示新电话号码的新记录,而不是覆盖现有记录。因此,即使在值改变之后,旧版本和较新版本都会被保留(并且可能被标记为较旧版本或较新版本)。然后,这类实施例可以引用该字段的值的最近表示来实现该改变,而不是删除旧实例。在一些实施例中,不可变数据结构可以是防篡改数据结构,其在计算上不可修改而无需审核数据结构的一方检测到该修改。一些实施例可以在有向非循环图中实现下面描述的加密散列指针,在不使得由于数据结构中其他地方的不一致的散列值的这些修改变得明显的情况下,一方在计算上不可能修改所存储的数据。计算可行性可能取决于用例,例如,经济和可用时间是否提供了一定数量的要承受的竞争资源。在许多情况下,平均需要多于10^128个散列以制造与改变的数据的冲突的操作可以说在计算上是不可行的。
在一些实施例中,处理50可以包括形成具有包括文档的节点内容的有向非循环图的节点,如方框54所示。形成节点可以包括访问现有节点并将节点内容插入那些节点或形成用于编码节点的整个新数据结构。在一些实施例中,每个节点可以包括具有一系列属性的节点内容,在一些情况下,这些属性可以包括指向另一节点的指针。在一些实施例中,那些节点属性可以包括指针,该指针是有向非循环图中的相邻节点的标识符,以及基于所识别的相邻节点的一个或多个属性的加密散列值。在一些实施例中,这最后两对属性(另一节点的标识符和该节点的内容中的至少一些的加密散列值)可以对应于从一个节点到另一个节点的加密散列指针。在一些实施例中,加密散列指针可以定义图的边缘。在一些实施例中,单个节点可以包含零加密散列指针(诸如二叉树中的叶节点)、单个加密散列指针(诸如区块链或链表中的链接)、一对加密散列指针(诸如在二叉树有向非循环图的非叶节点中),或各种其它数量的加密散列指针,例如,在展开树或跳表中。
在一些实施例中,节点属性包括相应节点的标识符。在一些实施例中,标识符可以是下面描述的类型的分段标识符,或者在一些情况下,标识符可以是有向非循环图的命名空间内的标识符,例如,随着每个节点的添加而递增的计数。在一些实施例中,标识符可以分层布置,例如,指示区块和区块链,然后是指定通过二叉树的路径的二进制值序列,如在一些情况下在前缀树中使用的那样(例如,在二叉树中,值00101可以定义从根节点到左、左、右、左、然后右的路径,其中左表示为0,而右表示为1)。在一些实施例中,节点的标识符是基于内容的,例如,基于节点的一个或多个或所有属性的加密散列值或非加密散列值,其可以包括该节点的散列指针。
在一些实施例中,文档可以存储在有向非循环图的单个节点中。或者在一些情况下,文档可以被分段并存储在多个节点中,例如与下面参考图4到图6描述的技术一致。在一些实施例中,图的一些节点可以存储其它文档或其它文档的一部分。在一些实施例中,可以随时间将节点添加到图中,在一些情况下,按顺序地添加节点组。在一些实施例中,节点的属性或节点区块(在一些情况下其本身可以被表征为节点)还可以包括形成节点的时间戳、租户帐户或数据存储库的标识符(其中注释中的数据存储在较低信任数据存储器14中)、创建节点的日期等。
在一些实施例中,节点组可以被添加为“区块”,例如,每个区块对应于具有存储在叶节点中的文档的二叉树。或者,例如,区块可以是链表、跳表、展开树或其组合。在一些实施例中,单个节点可以存储多个文档作为该节点的属性。在一些实施例中,区块具有整数索引、区块容量、基于块中的所有节点(如Merkle根)的加密散列值、区块内的节点以及基于先前区块的内容的加密散列(例如,基于区块中的所有值,基于该区块的Merkle根等)。
在一些实施例中,形成有向非循环图的节点包括沿着通过有向非循环图的一个或多个路径形成(例如,更新或创建)节点序列。在一些实施例中,这可以包括计算一个或多个加密散列值以沿着该路径形成一个或多个加密散列指针,这在一些情况下可以包括或终止存储文档或存储文档的一部分的节点,使得沿路径的每个加密散列指针基于文档。
加密散列指针可以基于加密散列函数,该加密散列函数可以采用多个输入,诸如一个或多个节点属性,并产生固定大小的输出。这些函数可具有抗原像性、第二抗原像性和抗冲突性。示例包括SHA-256、BLAKE、BLAKE2、SHA-1、SHA-2和SHA-3散列函数。在一些实施例中,加密散列函数可以是单向函数,其中给定的输入串确定性地产生这样的输出串:其相对难以或不可能反转来确定来自输出的输入,同时相对容易地确认对应于输出的输入。例如,识别散列冲突在计算上是不可行的,其中输入的不同实例产生给定输出。在一些实施例中,加密散列函数可以实现Merkle-构造。
在一些实施例中,加密散列函数可以基于压缩函数,该压缩函数利用单向压缩函数接受固定大小的输入并且产生固定大小的输出。在一些实施例中,因为对加密散列函数的输入可以是各种不同的大小,所以可以在各种迭代和多次迭代中执行转换。一些实施例可以确定由单向压缩函数接受的输入的长度,诸如字节的数量,单向压缩函数的输出的长度,并确定这两个长度之间的差异。然后,一些实施例可以将加密散列函数的输入解析为该差异大小的序列,并且将解析的序列迭代地输入到单向压缩函数中,然后将该迭代的输出与来自输入的下一部分解析部分组合,例如,从输入的开头到结尾递增并迭代地连接,例如,将单向压缩函数的先前迭代的输出预先添加或附加或以其它方式混合到加密散列函数输入的下一个已解析部分。一些实施例可以重复此直到达到加密散列函数的输入结束(例如,达到某个阈值字节数或最后字节内的点),如方框56所示。在一些实施例中,例如,其中应用多个输入,一些实施例可以以各种方式组合这些输入,例如预先添加或附加或以其它方式混合这些输入以形成字符串,在该字符串上可以执行这些操作以产生基于整个输入的固定大小的输出。所得有向非循环图可以存储在存储器中。
在完成对图2的讨论之前,描述类似于图2的处理中使用的有向非循环图的示例是有帮助的。图3示出了与本技术一致的有向非循环图70的示例。在一些实施例中,有向非循环图70可以包括序列中的多个区块,例如区块72、74和76,其可以布置在链表中,其中链接由对应于所示区块之间的所示箭头的加密散列指针形成。在一些实施例中,区块72、74和76可以随时间按顺序添加,例如在完成每个区块时。在所示示例中,区块72可以是最新的区块,而区块76可以是最早的区块。在一些实施例中,每个区块之间的加密散列指针可以基于前一个区块中的节点内容,并且该节点内容可以包括基于该区块的前一个区块中的节点内容的加密散列指针。因此,加密区块72的加密散列值可以基于前面区块块中的每一个的加密散列值以及由数据结构呈现的防篡改的所有内容。
在一些实施例中,每个区块可以包括具有根节点80的二叉树。在一些实施例中,区块72、74和76中的每一个的二叉树中的区块之间的每个箭头也可以是加密散列指针,例如,基于加密散列指针指向的节点的标识符和基于该节点的节点内容的加密散列值,其可以包括该节点的属性,该节点本身是另一个散列的加密散列值指针。因此,在一些情况下,根节点80的加密散列值可以基于每个区块72、74或76中的二叉树的每个节点的节点内容。在一些实施例中,节点80可以包括对应于六个节点属性的三个这样的散列指针,六个属性包括三对节点标识符和基于那些节点的节点内容的加密散列值。在一些实施例中,节点内容还可以包括基于这些值中的每一个的加密散列值,或者这种加密散列值可以存储在指向该节点的另一节点中。所示的图是非循环的。如本文使用的那个术语,它可以指更大的循环图的非循环子集。因此,仅通过添加未使用的循环可能无法避免对非循环有向图的要求保护。
在一些实施例中,一旦识别出给定区块72、74或76,二叉树结构可利于相对快速地访问给定二叉树内的记录。在一些实施例中,为了加速对特定区块的访问,一些实施例可以包括跳表数据结构,例如,具有另一节点或节点80内的值,其包括指向序列中较早的某些区块的加密散列指针,例如,前面四个位置的区块块,另一个指向前面八个位置的区块,另一个指向前面16个位置的区块,另一个指向前面32个位置的区块,依此类推。因此,一些实施例可以跳过区块序列的一些部分以访问指定区块。示出了三个区块72、74和76,但是预期在给定有向非循环图70中,商业实施例将包括基本上更多,例如超过50个,超过100个,超过500个,超过一千个或超过10,000个区块。在一些实施例中,最早的区块76可以包括指向种子节点78的加密散列指针,其可以包括长于64字节的随机值(例如,伪随机值)作为节点内容,来作为属性为直接或间接指向节点78的每个后续加密散列值提供最小级别的熵。
在所示的示例中,区块72、74和76包括具有三个层级的二叉树,但是实施例预期包括更多,例如四个层级、五个层级、六个层级、七个层级、八个层级或更多层级,每个包括多达两倍于进程层级的区块。在一些实施例中,二叉树可以是平衡二叉树,或者在一些情况下,二叉树可以是不平衡的。在一些实施例中,低于最低级别的二叉树中的节点(诸如作为非叶节点的节点80、84和86)可以包括基于加密散列指针但不基于存储文档内容的那些节点中的节点属性的节点内容,或者在一些情况下,文档也可以存储在这些节点中。在一些实施例中,诸如文档本身或文档的部分的文档的内容可以存储在叶节点88、90、92和94的节点内容的属性中,诸如在一些情况下的这些叶节点中的单独一个。因此,例如,作为叶节点90的节点内容中的属性存储在叶节点90中的给定文档可以使得节点84和80的加密散列指针中的加密散列值基于该文档。因此,对存储在节点90中的文档的修改可能导致节点80和84中的加密散列指针与该文档不一致,因为预期修改的文档的加密散列不会在这些节点80和94的加密散列指针中产生相同的加密散列值。在一些实施例中,可以沿着由加密散列指针连接的这类节点的路径中的序列重复该验证操作,在一些情况下,可以从任何叶节点到任何叶节点,直到添加到有向非循环图70的最新根节点,从而相对精细地识别具有来自已被修改的工作负载应用的数据的节点,并且由于制定与沿路径对数据的修改一致的散列冲突的计算不可行性而相对可靠地使得该数据免于篡改。在一些情况下,可以基于内容来布置叶节点,例如,每个叶节点从左到右存储一系列值,或者每个叶节点按字母顺序、按时间或在一些其它布置中存储多达阈值量的数据。
在所示的有向非循环图70中,示出了二叉树序列,但是实施例与其它类型的有向非循环图一致。在一些实施例中,有向非循环图是没有未连接子图的图。在一些实施例中,有向非循环图是单个二叉树,或者在一些情况下,有向非循环图是二叉树的展开树或展开树的二叉树。在一些实施例中,有向非循环图包括展开树或二叉树的跳表。在一些实施例中,有向非循环图包括跳表或展开树或链表的二叉树。(一些实施例可以利于树和其它结构的重新布置,以用下面描述的抽象加密散列函数来利于更快的防问,或者可以在重构时重新计算散列指针)。
因此,有向非循环图70可以包括多个节点,其中一些节点具有包括与有向非循环图70中的边缘对应的加密散列指针的节点内容,并且其中一些包括的节点内容包括作为属性的工作负载应用数据,其由有向非循环图70保护安全。
在一些实施例中,有向非循环图70可以采用分布式分类帐的形式,诸如具有区块链表的区块链,其中每个区块包括具有用作相应区块的节点属性的Merkel根的Merkel树,并且后续区块具有包括基于每个进程区块的Merkel根的加密散列值的节点属性。
在一些实施例中,向有向非循环图70添加节点或节点集合(诸如区块)可以由不可信计算设备在不可信计算环境中实现,在一些情况下基于一致性协议(如Paxos、Raft或其它),其中不同计算设备执行或演示难以合并的某些证明,诸如工作证明或储蓄证明,例如,通过计算对阈值数量的加密散列值的前缀或后缀数字的散列冲突。在一些实施例中,例如,一系列不可信计算设备可以执行一致性算法以确定是否应该添加区块或者区块是否有效。或者为了加速操作,一些实施例可以通过在执行对执行本文描述的操作的硬件上执行更多控制的环境内执行来避免与工作证明或存储技术相关联的开销。
应该强调的是,只要数据结构包括图中存在的数据元素之间的链接,就不需要将数据结构标记为图或者在程序代码中具有节点或边缘以构成图。在一些情况下,图可以被编码为数据元素之间的链表,例如,键值对,或者分层数据结构,诸如分层数据序列化格式,如JOSN或XML。图也可以编码为关系数据库中的关系。此外,诸如不同图的多个数据结构可以彼此重叠,例如以下面描述的方式,同时仍然保留不同图的存在。
在一些实施例中,上述存储计算节点26中的每一个可以存储如图3中所示的有向非循环图70的一个或多个实例。在一些实施例中,给定的有向非循环图可以在多个存储计算节点26(例如,在多个数据中心24中)上的多个实例中复制。在一些情况下,可以存储奇数个复制的实例。当读回数据时,一些实施例可以实现一致性协议以确定权威副本,例如在如下所述的读取操作之后识别由多个或大多数复制实例返回的文档的版本。
在一些实施例中,可以在多个实例中复制的给定有向非循环图70可以存储来自单个租户的单个工作负载应用的数据,并且在一些情况下来自单个工作负载应用程序的数据子集,或者可以混合数据。在一些实施例中,给定的有向非循环图可以存储来自给定租户的多个应用的数据。在一些实施例中,取决于实现方式,给定的有向非循环图可以存储来自多个租户的数据。
在一些实施例中,当累积数据时,当有向非循环图70超过阈值大小时,可以实例化新的有向非循环图,例如,将添加到前一个有向非循环图的最后一个区块的根节点的加密散列值用作为种子节点中的种子值78。
因此,图3示出了有向非循环图的示例,其中用图2的处理存储的文档可以以不可篡改的方式存储在不可变数据结构中。由于文档是修订的,所以可以将新文档的新版本添加到数据结构70中,并且可以更新指向文档的最新版本的指针,例如,在较低信任数据库14中以引用那些较新的版本。在一些实施例中,这些指针可以实现下面描述的技术,通过该技术,指针替换数据存储中的记录。在一些实施例中,那些指针可以指向单个有向非循环图中的单个节点。在一些实施例中,指针是节点标识符或下面描述的分段标识符。
在一些实施例中,上述翻译器20可以在存储器中保存索引,该索引将指针映射到存储计算节点26的统一资源标识符和由存储计算节点保存的有向非循环图,并且在一些情况下,DNS 18可以将这些统一资源标识符映射到对应存储计算节点26的互联网协议地址和端口号。因此,在将文档写入有向非循环图70之后,指针,诸如将该节点与给定应用程序、租户或所有租户可访问的所有其它节点区分开的节点标识符可以存储在较低信任数据库14或其它数据存储中以代替文档。
在一些实施例中,可定期验证有向非循环图70的内部一致性,以检测篡改文档的实例。一些实施例可以沿着各种路径重新计算加密指针,例如,每次将新文档或其它记录添加到有向非循环图70时(例如,每次添加新块时)。在检测到加密散列指针不对应于该路径中的文档或其它节点内容的路径时,一些实施例可以将该文档或其它值指定为已被修改。一些实施例还可以发出警报,例如,发送电子邮件,发送文本消息,以及暂停各种用户帐户,诸如响应于检测到篡改而访问文档的用户。为了检测篡改,一些实施例可以沿着到每个文档的每个路径重新计算每个加密散列指针的加密散列值,并确定重新计算的加密散列值是否与存储为存储了相应加密散列指针的节点的节点属性的那些相匹配。因此,如果给定文档(例如在区块72的节点90中)在存储之后被篡改,则从区块84到区块90的加密散列指针将不匹配节点84的节点属性中存储的加密散列值,从区块80到区块84的加密散列指针也将不匹配节点80中的存储值。此外,如果在区块72之后添加了附加区块,则区块72之后的区块之间的加密散列指针也将无法匹配,从而提供从最新节点返回到节点内容被攻击者篡改的节点的可追踪路径。在一些实施例中,可以在每次写入节点时,每次写入区块时,周期性地,如每小时,每天或每周,或者每次执行读取操作时执行这些验证操作。
图2还包括可以从安全分布式存储器16读回文档的操作。在一些实施例中,处理50的操作可以包括接收请求从不可变数据结构检索文档的读取命令。在一些情况下,可以在写入命令之后接收读取命令,例如,基本上稍后,例如超过一小时,一天或一周之后。在一些情况下,可以在针对相同文档的多个写入命令之后接收读取命令,其中不同版本被写入不同区块中的不同节点,并且在一些情况下,可以接收到与上面参考图3描述的那些不同的有向非循环图。在一些实施例中,读取命令可以引用指示要检索文档的最当前版本的标识符,或者在一些情况下,读取命令可以引用文档的特定版本。在一些情况下,接收读取命令可以使安全驱动程序30访问较低信任数据库14或其它较低信任数据存储区,并检索指向其中存储指定文档的节点或节点序列的指针。如上所述,在一些情况下,指针可以是映射到统一资源标识符的值,DNS 18将统一资源标识符映射到互联网协议地址和端口号,其中对应节点存储在对应的有向非循环图中。
接下来,一些实施例可以访问有向非循环图的一个或多个节点以检索文档,如方框62所示。在一些情况下,这可以包括向翻译器20发送指向存储到至少部分文档的节点的指针,防问有向非循环图的统一资源标识符,其中节点驻留在翻译器20存储的索引中,用DNS 18将统一资源标识符转换为互联网协议地址和端口号对,从存储计算节点26请求对应节点,该存储计算节点26在互联网协议地址和端口号处托管指定的有向非循环图,并将所请求的文档返回给请求应用程序28。
此外,在一些情况下,可以验证所访问的文档。例如,一些实施例可以基于文档沿着从有向非循环图的最新节点返回到文档(或其子集)的路径重新计算加密散列值,并确定任何计算的加密散列值是否与存储在有向非循环图的相应节点中的那些不匹配,如方框64所示。
为了术语的清楚,应当注意,存储计算节点26是指计算实体(例如,服务拓扑),而有向非循环图70的节点是指数据结构的元素。
实施例可以确定这些计算的值是否在内部是一致的,如方框66所示。这可以包括确定计算的值是否与有向非循环图70的节点指针中存储的值匹配。在确定值匹配时,一些实施例可以返回所请求的文档,如方框69所示。在确定值不匹配时,一些实施例可以指示文档已被修改,如方框68所示。因此,检索文档的实体可能在一定程度上信任文件未被篡改。此外,因为一些实施例将文档存储在节点中,所以即使在存储相对大量的数据(例如,大于100GB或大于10TB)时,也可以相对快速地(例如,在200ms、100ms或50ms内)检索文档。虽然实施例不限于提供这些益处的系统,但是描述了独立有用的技术,这并不表示任何其它描述是限制性的。
在一些实施例中,写入到有向非循环图70的节点中的安全分布式存储器16的文档或其它值可以在写入操作之前经历各种类型的编码。在一些实施例中,数据可以用冗余信息编码,使得如果在写入之前或写入之后修改了一些数据,则编码显示错误,并且在一些情况下提供足够的冗余信息以便可以恢复数据。例如,一些实施例可以使用汉明码或Turbo码对数据进行编码,使得如果数据的子集丢失,则可以基于文档的另一部分中的冗余信息来重建文档。在另一个示例中,可以例如用熵编码来压缩数据,以利于减少带宽的使用和更快的检索。在一些实施例中,可以分析文档中的值序列以识别序列出现的频率,并且可以将那些序列映射到字典,其中相对频繁的字符用相对较短的值表示,而较长的较不频繁的序列映射到更长的值。然后,映射和字典可以以压缩格式存储在安全分布式存储器中。在一些实施例中,在压缩之后,一些实施例也可以加密数据,例如,用对称加密算法,其中密钥由客户端计算设备12保存,例如,通过用用作对称密钥的随机字符串对文档进行异或。在一些情况下,对称密钥可以以上述方式存储在分布式存储器16中。
为了跨越多个不可变数据结构的持久存储的目的而对数据进行分段
如上所述,传统数据库不能充分地保护免受威胁行为者或内部资源(雇员、信息技术人员等)篡改数据。驻留在奇异逻辑空间中的数据为威胁行为者提供了一个简单的目标。一旦存储数据的计算设备受到损害,整个数据就有可能处于危险之中。当单个计算设备控制对分布式主从架构中的所有其它计算设备的访问时会出现类似的问题,因为一旦主设备被破坏,其它设备上的数据就可能暴露。
存在用于以对等网络中的分布式形式存储数据的技术,但是这种系统经常存在其它问题。示例包括围绕BitTorrent协议构建的各种系统。这些系统通常在没有中央权限的情况下运行。但是在这些系统中,当数据被改变时或如果被改变(或者为了隐藏或混淆改变的目的),则没有求助方式或方法来检测这些改变。此外,许多分布式对等存储网络,如许多实现BitTorrent协议,在每个对等体上保存文件(或其它块)的完整副本,可能使完整文件保持开放以供不信任方检查。
为了缓解这些问题和其它问题,在一些实施例中,当写入数据时,被称为“仲裁器”的组件(其可以是中间件并且可以在翻译器20中实现)可能能够采取输入完全形成的数据(例如,内容单元,如文档或数据库中的值),从数据的最后一个字节开始,将该数据分段为N片段(其中N是大于1的整数,并且在许多商业相关案例中,大于5或10,并且在一些情况下可以与初始数据的大小相关),并将每片段放在物理(或虚拟)独立的区块链支持的存储数据结构上,其中每片段包含指向分段后的数据的下一个存储位置的指针。在一些实施例中,仲裁器(或其它中间件)然后将最后写入的分段(第一字节)的TXID(或其它节点标识符)返回到请求分段数据的应用。
在一些实施例中,当应用或资源请求重组分段数据时,向仲裁器(或其它中间件)提供数据的第一字节的TXID(或其它节点标识符)。在读取第一字节之后,在一些实施例中,仲裁器或中间件然后读取后续指针,直到读取空字符或序列字符的结束。一旦所有件都被读入存储器中,仲裁器或中间件就会用所得未分段数据响应应用。
在一些实施例中,可以使用其它数据结构(诸如文件或数据库)来存储分段。另外,一些实施例预处理数据并计算在分段数据之前从一开始所需的片段的数量。
在一些实施例中的另一增强是将数据分段成树状结构而不是类似列表的结构,其在读取操作期间期望适应并发并减少操作时间。
在一些实施例中,当读取或写入分散数据时,为了审核对分散数据的访问,可以将执行操作连同诸如用户凭证的其它元-元数据一起写入“辅助”链。
有利地,区块链数据结构可以阻止或防止对存储的数据分段的修改。此外,一些实施例可以跨分段存储具有一些冗余的数据,例如,用汉明码或Turbo码,使得即使一个区块链受到损害,来自其它改变的分段也将与修改的数据不一致并发出损害信号。期望对数据进行分段以利于对不同链的并发数据验证,从而在一些实施例中加速读取操作。此外,预期对数据进行分段会使数据对单个对等机器的攻击更加稳健,因为即使对等机器受到损害,也只有相对较小的分段处于风险之中。即,并非所有实施例都提供这些益处,因为描述了多个独立有用的发明,并且各种工程和成本权衡可以导致在一个方面的性能优势被部署以改进另一方面,例如,使用更快的算法来适应更慢、更便宜的硬件。
为了实现这些技术和其它技术,一些实施例可以执行图4中所示的处理100以对文档进行分段并将分段分布在具有多个不同的有向非循环图的多个存储计算节点26上,在一些情况下,那些有向非循环图中的每一个被复制在多个存储计算节点上。在一些实施例中,所存储的数据可以是各个值和具有数据库的记录的各个部分的各个字段,诸如给定表中的给定行和列位置处的值。在一些情况下,作为一个单元存储的数据可以包括元数据,如主键、表标识符、数据库标识符和租户标识符。在一些实施例中,所存储的数据可以是如上所述的文档,其大于单个值。
在一些实施例中,处理100可以包括接收将值写入数据库的写入请求,如方框102所示。在一些实施例中,该操作可以由上述安全驱动程序30执行。在一些实施例中,写入请求可以是将具有结构化查询语言语句的值写入低信任数据库14的请求,或写入文件系统中的文件的请求。或者在一些情况下,经受后续操作的值可以是已经存储在较低信任数据库14或文件系统中的值,例如,在安装处理期间处理的值,通过将数据移入上述安全分布式存储器16来保护较低信任数据库14。
接下来,一些实施例可以将值分类为较高或较低的安全性,如方框104所示。例如,写入请求可以指定将给定记录添加到表中的新行,并且该记录可以指定其中值分配给多个字段中的每一个的元组,每个字段对应于表中的不同列。在一些情况下,其中一些字段的安全性可能较低,而其它字段的安全性可能较高。在一些实施例中,安全驱动程序30可以包括将表/字段组合映射到安全指定的表,例如,指示值是较低还是较高安全性的值的二进制值。或者一些实施例可以使用下面描述的其它类型的数据安全策略。例如,社会安全号字段可以是较高安全性的值,而面向公众的帐户中的用户名可以是较低安全性的值。在另一示例中,诸如信用卡号之类的信用卡信息可以是较高安全性的值,而邮寄地址中的邮政编码可以是较低安全性的值。
接下来,一些实施例可以使数据库存储较低安全性的值,如方框106所示。在一些情况下,该操作可以包括修改由安全驱动程序30从应用程序28接收的SQL语句或其它数据库命令,并将修改的命令提供给数据库驱动程序32。例如,一些实施例可以修改所接收的命令的部分,否则这些部分将指定将较高安全性的值写入较低信任数据库14。在一些情况下,修改采用修改值本身而不是命令中的保留术语的形式,使得修改的值被写入较低信任数据库14的适当位置,其中对应的较高安全性的值将由应用程序28以另外方式写入在该位置(从而保持存储在数据库中的关系)。或者可以将指针写入文件系统中的目录来代替文件或其它文档。例如,一些实施例可以使节点标识符或其它指向节点的指针被写入,例如,在下面描述的操作中形成的要写入的数据的分段的标识符,如第一分段。
接下来,一些实施例可以确定是否存在被识别为要处理的较高安全性的值,如方框108所示。在一些情况下,一些实施例可以迭代每个较高安全性的值,或者同时处理一些或者所有较高安全性的值,并且操作108可以确定是否已经处理了全集。在确定已经处理了所分类的所有较高安全性的值之后,一些实施例可以返回到方框102并等待下一个写入请求。或者,一些实施例可以选择较高安全性的下一个值,如方框110所示,用于后续操作。
接下来,一些实施例可以将当前值分段为多个分段,如方框112所示。如上所述,在一些情况下,当前值可以是数据库的单个行的单个字段的单个值,或者在一些情况下,该值可以包括其它信息,诸如整行,或者将数据库中的值与该行的表和主键相关联的值。或者在一些情况下,该值可以是如上所述的文档,其可以包括附加数据。
接下来,一些实施例可以将当前值分段为多个分段,如方框112所示。在一些情况下,该值可以通过序列中的字符位置或字节序列中的字节位置来分段,例如,以序列化表示的值或每个连续的四个字节分段每个连续字节。在一些实施例中,分段可以包括用上述熵编码技术进行分段。例如,一些实施例可以根据在值的熵编码中的字典编码来分段,例如,每个字典条目对应于不同分段。在另一个示例中,分段可以包括将值分成多个分段的操作,每个段包含值的非连续部分,例如,将每个第五字节放入以第一字节开始的第一分段,将每个第五字节放在以第二字节开始的第二分段,将每个第五字节放在以第三字节开始的第三分段中,等等。在一些实施例中,可以将值分段为指定数量的分段,例如,将值划分为四份,使得编码值的字节的四分之一进入第一分段,四分之一进入第二分段,四分之一进入第三分段,而四分之一进入第四分段。
在一些实施例中,可以用来自网络编码(例如,线性网络编码)的技术来对值进行分段,使得以逐位运算组合所得到的分段以重构该值。例如,64字节长的给定值可以被分段为两个64字节分段,当在逐位XOR运算中组合时产生原始值。在一些实施例中,一些分段可以包含相对于其它分段的冗余信息。例如,一些实施例可以在分段之前或在用汉明码或Turbo码进行分段期间对数据进行编码,使得如果三个连续分段中的两个可用,则可以重新创建信息和另一分段,或者这样的编码可以应用较少的冗余信息,使得一个分段中的错误使得该分段与相邻连续分段中的冗余信息不一致。在一些实施例中,分段可以表示为序列,或者在一些情况下,分段可以表示为其它数据结构。例如,在一些情况下,分段可以表示为通过前缀树的路径集合。
接下来,一些实施例可以使数据库(诸如,较低信任数据库14)存储指向第一分段的指针,如方框114所示。在一些情况下,该操作还可以包括使记录被添加到由翻译器20保存的索引,该索引关联该指针,该指针可以是唯一的段标识符,其在一些情况下可以是数据结构中的单个节点的标识符,如上述有向非循环图70,或是该数据结构中节点的单个属性,具有有向非循环图的地址。在一些情况下,该关联可以具有多个地址,每个地址对应于有向非循环图的不同复制实例,诸如由DNS 18映射到对应存储计算节点26的互联网协议地址和端口号的多个不同的统一资源标识符,该存储计算节点存储有向非循环图的那些不同实例,并且在一些情况下执行上述操作,通过该操作形成节点并验证数据。在一些实施例中,使数据库存储指向第一分段的指针可以包括执行上述操作,通过该操作,从应用程序28接收的写入命令被修改为在提供该命令到数据库驱动程序32之前用指针替换较高的较高安全性的值。
一些实施例可以迭代通过每个分段,使得每个分段被存储并且在每次迭代中确定是否存在更多分段要处理,如方框116所示。在确定要处理的给定值的分段更多时,一些实施例可以选择下一个分段,如方框118所示。一些实施例然后可以选择计算设备,诸如执行上述存储计算节点26中的一个的计算设备,以存储当前分段,如方框120所示。在一些情况下,存储计算节点26的列表可以保存在循环链表中,并且一些实施例可以保存与每个存储操作一起前进的指针,使得指针循环通过列表,并使用指向存储节点以存储当前分段。或者一些实施例可以选择存储计算节点26,例如,用随机数或伪随机值发生器,诸如线性移位寄存器。在一些实施例中,可以基于分配给该分段的唯一标识符来选择用于存储给定分段的存储计算节点。在一些实施例中,唯一标识符可以是基于分段的内容的散列值,并且散列的前缀或后缀可以唯一地标识存储计算节点26中的一个。在一些实施例中,这样的前缀或后缀可以唯一地标识有向非循环图70,其可以在多个存储计算节点上复制。在一些实施例中,可以对分段本身的内容进行散列,并且前缀或后缀可以指定上述存储计算节点26中的一个或可以在多个存储计算节点26上复制的有向非循环图的实例。例如,可以保存64个不同的有向非循环图,每个都复制三次,并且分段的内容的散列的二进制表示的尾随六位数可以指定范围在0和63之间的值,并且该值可以用作要存储该分段的有向非循环图中的一个的标识符。在一些实施例中,选择有向非循环图可以使得一个或多个(诸如三个)计算设备被选择,那些是存储和保存对应的有向非循环图的计算设备。
接下来,一些实施例可以指示所选择的计算设备将该分段与指向前一分段的指针相关联地存储在存储器中,如方框122所示(除了第一分段之外,其可能没有指向前一分段的指针)。在一些实施例中,这可以包括上述翻译器20向奇数编号的一组存储计算节点26中的每一个发送指令,复制一个有向非循环图70以形成节点,其中分段内容和指针用作该节点的一个或多个属性,诸如上述叶节点88到94中的一个。在一些实施例中,形成该节点还可以包括通过上述不同类型的数据结构形成到该节点的加密散列指针,例如,可以通过二叉树中的较高级别的层次结构来形成不同的有向非循环图,在一些情况下,将附加区块添加到区块链表,每个区块具有不同的二叉树并且根据如上所述的加密散列指针链接到先前区块。
接下来,一些实施例可以返回以确定是否存在与当前值相关联的更多分段。在确定不存在更多分段之后,一些实施例可以返回到方框108并确定是否存在较高安全性的值来处理。在一些实施例中,可以同时处理多个值。在一些实施例中,值可以从前到后分段,反之亦然。
图5示出了所得数据结构130的示例,其中多个分段存储在不同的有向非循环图132、134和136中,在一些情况下,每个可能各自具有参考图3描述的有向非循环图的特征。在一些实施例中,给定值的分段可以存储在覆盖在这些有向非循环图132、134和136中的每一个上的内容图中,其可以被表征为用于区分重叠内容的验证图(并且在一些实施例中,它们用作分段的值的不可变的防篡改日志)。
在该示例中,内容图138中的分段形成链表,其中分段内容图138的第一节点存储在验证图132的叶节点139中,该第一分段被指定为内容图中的节点140。内容图中的节点140可以作为属性存储在验证图的节点138中的节点内容中,并且内容节点140可以包括指向内容图138中的下一节点的指针142,其可以存储在不同的验证图134上。在一些情况下,指针142可以被表征为内容图138中的边缘,并且可以表示为验证图134中的节点143的标识符,或者在一些情况下表示为属性的标识符,在该节点中,多个分段存储在验证图的给定节点的不同属性中。在一些实施例中,在内容图138中,节点140指向另一分段144,其然后可以指向具有验证图136的验证节点147中的指针146的另一分段。验证节点147可以包括作为节点内容的一个或多个属性,其指定用元件符号148指定的内容图138中的最终分段。在一些情况下,节点148可以指定值中没有附加节点。
因此,即使给定的恶意行为者以某种方式损害验证图132、134或136中的一个,该攻击者将仅能够访问值的一组分段并且将不能访问完成存储在分布式存储器16中的完整值所需的其它分段。此外,因为这些分段存储在具有上述散列点加密散列指针的防篡改有向非循环图中,所以篡改的证据在计算上不可能隐藏。
因此,图5示出了多个验证有向非循环图132、134和136,其中的每个可以被复制,并且每个都具有可以存储为节点内容数据的节点,该节点内容数据对内容图138进行编码,在这种情况下是分段的链表,其中每个段按顺序指向下一个分段及其对应的地址,并且在一些情况下指向底层验证图中的属性标识符。
在该示例中,分段被布置在一维链表中,但是实施例与内容图的其它布置一致。例如,一些分段可以包括指向例如跳表中的多个后续分段的指针,以利于同时检索,并且在一些情况下,分段可以与分段位置标识符相关联地存储,例如,在读取操作中,翻译器20将对分段进行排序以重构分段值的顺序。在另一示例中,编码单个值的多个分段的内容图中的分段可以存储在二叉树内容图、跳表内容图或二叉树、链表、跳表等的组合中。
示出了给定值的三个分段,但是在一些情况下预期实施例基本上包括更多分段。在一些情况下,可以对编码单个文本字符的二进制数据进行分段,例如将给定的Unicode字符分段为两个或多个分段,并且给定的值产生10个或更多或20个或多个分段,在一些情况下可能各自存储在不同的分布式非循环图中,在一些情况下,每个图可以被复制多次,例如3次或更多次。因此,给定值可以部分地存储在30个不同的存储计算节点26上。在一些情况下,可以比较不同的实例以确定权威副本,例如,根据复制的实例中的多数规则方法选择存储和返回的值。在一些情况下,例如,在图的复制实例在许可计算设备上的情况下,实施例可以在不执行工作证明或储蓄操作证明的情况下对给定值进行投票,或者存储图的设备是不可信的情况时,一些实施例可以例如根据一致性协议,如Paxos、Raft等,来确定与工作、储蓄或股份的证明的一致性。在一些实施例中,例如,在不可信系统中,可以根据行星际文件系统(IPFS)或使用各种分布式散列表方法来寻址实例。
在图5的示例中,有向非循环图132、134和136中的每一个是相同类型的有向非循环图,在这种情况下是二叉树的链表,其中边缘由密码散列指针形成。在其它实施例中,可以组合异构的一组有向非循环图,例如,不同分段存储在不同类型的图中。例如,初始分段可以存储在二叉树中,而其它分段可以存储在如图5所示的有向非循环图中,例如,存储在二叉树的链表中。
图6示出了处理150的示例,通过该处理可以从图5的数据结构130或用图4的处理写入的其它数据结构检索数据。在一些实施例中,处理150包括检测查询数据库的应用,如方框152所示。在一些情况下,这包括执行图1中所示的安全驱动程序30并接收由图1中的应用28发送到数据库驱动程序32的读取请求。一些实施例还包括从数据库接收查询响应,如方框154所示。在一些实施例中,接收查询响应可以在图1中的数据库驱动程序32向较低信任数据库14发送查询之后发生,该较低信任数据库可以返回查询响应,例如对选择满足特定条件的某些记录的SQL语句的响应。或者响应可以是在文件系统中访问的文档。在一些实施例中,查询响应可以由数据库驱动程序32接收,该数据库驱动程序然后可以将查询响应发送到应用28。该响应可以被安全驱动程序30拦截并且在被提供到应用程序28之前被安全驱动程序30修改。在一些实施例中,安全驱动程序30可以检测指向存储在图4的处理中的分段的指针(例如,在图5的数据结构中),并且将那些指针发送到翻译器22,将其转换回被发送到套装安全分布式存储器16(例如在多个分段中)中的数据结构的值。因此,给定查询响应可以包括查询响应的较低安全性部分,其对应于在图4的处理中未被分类为较高安全性的值的字段中的值,以及在图4的处理中被如此分类的较高安全性的值,或者指向安全分布式存储器16中的那些值至少的多个指针。在一些实施例中,可以用正则表达式检测这些指针,该正则表达式被配置成检测标记指针的前缀或后缀,如此,例如,具有一系列保留字符。
因此,一些实施例可以包括确定在接收到的查询响应中是否存在在图4的处理中形成的任何指针的操作,如方框156所示。在确定存在至少一些指针时,一些实施例可以确定在查询响应中是否存在要处理的更多指针,如方框158所示。一些实施例可以迭代地或同时地处理来自低信任数据库14的查询响应中表示的每个指针,以用例如图4的处理在图5的数据结构中用存储在安全分布式存储器16中的对应值替换那些指针。
在确定存在更多要处理的指针时,一些实施例可以选择下一指针,如方框160所示,并且如果关联指针与分段相关联地存储,则检索该分段和关联指针,如方框162所示。可以相对于被分段的值中的顺序以相反的顺序或相反的方式检索分段,这取决于内容图的结构,例如,基于分段的写入顺序。在一些实施例中,检索分段和关联指针可以包括使翻译器20访问索引,该索引将指针(例如,分段标识符)与一个或多个计算设备的一个或多个URL相关联,该计算设备存储有向非循环图132、134或136中的一个的复制实例,其存储指针所指向的分段。在一些实施例中,索引还可以与指针相关联地将节点标识符(例如,通过二叉树的区块和路径)识别为特定节点,该特定节点将审核的分段以及相关的当前指针存储作为该节点的属性中的节点内容,例如,在不是要检索的最后一个分段的情况下。在一些实施例中,翻译器20可以访问DNS 18以识别保存所识别的有向非循环图的安全计算节点26的互联网协议地址和端口号,或者每个安全存储计算节点26存储该有向非循环图的复制实例中的一个。翻译器20的一些实施例可以向那些存储计算节点发送请求以返回所识别的分段,并且接收存储计算节点26可以沿着由对存储该分段的指定节点的请求指定的路径遍历由对应的有向非循环图中的加密散列指针指定的边缘。或者一些实施例可以例如基于节点标识符直接导航到该分段,该节点标识符标识该分段的存储器中的地址而不需要遍历。在一些实施例中,为了加速访问,存储器中的节点的位置可以存储在与注释标识符相对应的二叉树中,或者存储在排序列表中,以利于相对快速地访问节点内容。
在一些实施例中,复制有向非循环图的存储计算节点26或一组存储计算节点26可以将指定的分段返回到翻译器20。在一些实施例中,翻译器20可以接收所请求的分段的多个实例,并且一些实施例可以基于由多个或大多数响应返回的内容来确定每个分段是否彼此匹配或者确定分段的内容,从而防止修改其中一个实例影响由系统确定的该分段的权威内容。即,并非所有实施例都提供该益处,这并不表示本文描述的任何其它特征是限制性的。
一些实施例可以在存储器中维持分段所属的值的部分或完全形成的编码,并且一些实施例可以将所检索的分段连接到在该值中累积的分段序列,如方框164所示。例如一些实施例可以将每个连续检索的分段预置或附加到该分段序列。或者在一些大型用例中,分段可能会与其它技术结合使用。例如,一些实施例可以通过对分段进行异或来组合分段以重新创建值。术语“连接”在本文中广泛用于指代这些不同操作中的每一个,通过这些操作组合不同分段中的信息以产生从中获取分段的值。在一些实施例中,可以无序地检索分段,例如,用指示序列中的位置的值标记的分段,并且一些实施例可以根据该值对分段进行排序以重新创建获取分段的值。
接下来,一些实施例可以返回以确定在方框158中是否存在更多要处理的指针。在确定不存在要处理的更多指针之后,一些实施例可以继续形成查询响应的修订版本,如方框166中所示,其中指针由被分段并存储在安全分布式存储器16中的较高安全性的值替换(例如,在图5的数据结构中用图4的处理替换)。在一些实施例中,替换操作可以由上述翻译器20或在安全驱动程序30内执行。在一些实施例中,查询响应的修订版本可以包括相同位置的替换值,与查询响应内的指针具有相同的格式,从而可以保存查询响应中不同值和元数据之间的关联,例如,区分记录的关联和将其中值指示为适用于那些记录中的特定字段的关联。在一些情况下,在不存在指针的情况下,在确定在方框156中不存在指针时,查询响应的修订版本可以是查询响应的未改变版本。
接下来,一些实施例可以向请求应用程序提供查询响应的修订版本,如方框168所示。在一些情况下,查询响应的修订版本可以由安全驱动程序30根据数据库驱动程序32的应用程序接口推进到图1中的应用28,使得被配置成与数据库驱动程序32接口连接但未考虑安全驱动程序30而设计的应用程序28将透明地接收查询数据而无需重新设计以与安全分布式存储器16接口连接。
在一些实施例中,图4的写入操作或图6的读取操作或两者可以在与所描述的那些不同的图1的系统(或其它系统)的不同部分中执行。例如,在一些情况下,这些操作可以由数据库管理系统或数据库网关执行,客户端设备通过数据库管理系统或数据库网关与数据库通信。在一些实施例中,这些操作可以由网络上的专用设备执行,客户端计算设备通过该专用设备访问数据库。在一些实施例中,这些操作可以完全在单个计算设备内执行,例如,作为单个应用程序的一部分,其中安全分布式存储的特征在单个计算设备内操作,或者在单个设备上操作,其中不同的组件在经由环回互联网协议地址访问的不同容器或虚拟化操作系统中执行。
在区块链内生成散列值
如上所述,区块链通常允许将少量的信息存储在不可变数据结构中;当链中的数据被改变的那一刻,链被破坏并且通常不再起作用。最常见的区块链实现方式是可公开访问的比特币分类账(为其设计了区块链)。
然而,许多现存的区块链系统并不适合某些用例。区块链通常是不可变的,因此一旦数据被提交到链,在大多数情况下它被认为是永久的。这可能导致可扩展性挑战,因为链可能变得非常大而没有能够减小链的大小(没有一个表明具有不可变区块链的系统对于所有实施例都是否认的或者与一些实现方式不一致)。
通过上面引用的以下称为“Docuchain”的系统的一些实施例来减轻这些和其它问题。在一些实施例中,Docuchain是用于二进制大对象的低延迟放置和获取操作的区块链软件套件。在一些实施例中,Docuchain使用用于区块链的散列函数的改进版本。
在一些实施例中,Docuchain利用抽象函数(一般还用于指方法和其它例程的术语)来定义在创建区块散列中使用各个区块的哪些属性(有时称为Merkle根)。通过改变用于构造该散列的属性,一些实施例增加或减少散列输出的模糊性。在一些实施例中,可以将lambda函数传递给BlockManager的构造函数,该BlockManager接收区块条目作为参数并返回要传递到散列函数的值,如表达式BlockManager<H,T>中的’H’所定义。
例如,如果仅在区块的Merkle根的生成中使用区块的数据,则可以移除链的头部而不会破坏链本身。或者,如果系统使用数据、位置以及可能甚至更具体的属性(诸如读取/写入时间),则链变得完全不可变并且必须(在一些实现方式中)完整地保持其完整性以便起作用。
一些实施例通过移除链内脚本语言组件并添加使散列值作为配置的一部分而不是源代码的一部分进行控制的能力来添加这种控制程度。在一些实施例中,散列函数接受不依赖于链内的区块位置的数据。在一些实施例中,散列函数仅接受可以在另一链中重新创建的值作为输入。
在其它实施例中,作为该功能的结果的类似输出可以通过在链上进行一种重构来产生。该操作可以包括将要保留的所有数据写入新链,然后在存在的任何外部数据存储中更新所有参考TXID(或者如上所述的其它指针)。
为了实现这些方法和其它实施例,一些实施例可以执行处理170,通过该处理,加密散列函数被配置成使得重构具有由加密散列函数形成的加密散列指针指定的边缘的有向非循环图的部分是可行的,例如,为了适应已经大于阈值大小的有向非循环图,并将这些图分解成更小的部分,或者产生链接回那些有向非循环图的新的有向非循环图。
在一些实施例中,处理170可以由图1的存储计算节点26执行,但不限于该实现方式,这并不表示本文的任何其它描述是限制性的。实际上,处理170的操作可以应用于具有加密散列指针作为边缘的其它类型的有向非循环图,例如,在用于加密货币的区块链中以及用于其它目的的分布式防篡改分类账中。
在一些实施例中,处理170包括获得防篡改日志,如方框172所示。在一些实施例中,防篡改日志是参考图3和图5讨论的有向非循环图中的一个,并且可以采取各种不同的形式。在一些实施例中,防篡改日志包括节点序列或作为节点集合的区块,例如,每个区块是节点的二叉树。在一些实施例中,防篡改日志可以通过有向非循环图的拓扑指示日志中添加了条目的序列。在一些实施例中,每个条目可以被表征为防篡改日志中的节点或区块。
接下来,一些实施例可以获得要保护的多个记录,如方框174所示。在一些情况下,记录可以是上述分段或文档(其不表示文档不能是分段)。在一些情况下,要保护的记录可以例如,在从如参考图1描述的翻译器20接收时由存储计算节点26获得。
一些实施例可以迭代地或同时地处理记录并确定是否有更多记录要处理,如方框176所示。在确定不再有要处理的记录时,一些实施例可以返回到方框174并等待另外的要处理的记录。在确定存在更多要处理的记录时,一些实施例可以继续在未处理的记录中选择下一条记录,如方框178所示。
然后,一些实施例可以访问防篡改日志的最近条目的内容,如方框180所示。在一些情况下,最近的条目可以是写入日志的最后区块或区块的组件内的最后节点,如区块二叉树中的叶节点或区块中的更高级节点。在一些情况下,所访问的内容可以是最近条目的一个或多个属性,诸如节点内容的一个或多个属性。在一些实施例中,那些属性可以包括上面参考图3和图5描述的有向非循环图中的节点描述的那些属性。
接下来,一些实施例可以访问抽象加密散列函数,如方框182所示。术语“抽象”是指编程构造,通过该编程构造,函数或方法的特定实现方式由除了具有占位符的其它代码定义,该占位符将函数指定为抽象(例如,对象、类、子例程或函数),并且在一些情况下,抽象函数的某些方面在其它代码中定义,例如在面向对象的编程语言中的类定义中,其中在实现类中的对象时定义了抽象函数的非抽象实现方式。在另一个示例中,抽象函数可以由被配置成从代码的调用主体或从调用由接收lambda函数的代码主体调用的代码主体接收lambda函数的代码指定为抽象。在一些情况下,实现方式可以访问具有对抽象函数的引用的代码主体的范围,例如,抽象类中的对象的实例或者将lambda函数作为参数接收的方法。
一些实施例可以确定已经访问了抽象加密散列函数,例如,在检测到存在指示已经访问了这种类型的函数或方法的保留术语时。
然后,一些实施例可以确定抽象加密散列函数的实现方式,如方框184所示。在一些情况下,可以将实现方式确定为在抽象类内实例化对象的一部分,并且在一些情况下,实现方式可以通过接收由调用代码或被调用代码定义的lambda函数来确定。在一些实施例中,该实现方式可以指定加密散列算法,诸如SHA-256或上述其它示例,或者在一些情况下,可以在抽象加密散列函数的规范中指定加密散列函数的类型,使得算法的其它方面要在实现方式中配置。在一些实施例中,实现方式可以指定由加密散列函数处理哪些输入以确定输出,而加密散列函数的抽象表示可以不指定在实现方式中使用哪些输入。因此,单个抽象加密散列函数可以在给定的代码主体内以各种不同的方式实现,例如,基于不同的标准在不同的场景中在不同的时间调用那些不同的方式。
在一些实施例中,在方框184中确定的抽象加密散列函数的实现方式可以指定将某些类型的输入用于计算加密散列值输出。在一些实施例中,可以在方框180中访问的节点内容中的子组属性中选择那些类型的输入,诸如要添加到防篡改日志的节点的相邻节点的属性和节点内容。在一些实施例中,输入类型可以是位置不可知输入,诸如在方框172中获得的防篡改日志内不指示在方框180中访问的节点位置的节点属性。例如,所选择的类型输入可以排除时间戳、日期、指示图专用的序列中位置的计数器值,如数组索引等。在一些实施例中,所选择的位置不可知输入可以包括如指定存储在最近条目中的分段内容或文档内容的属性的项目。在另一示例中,用作对所实现的加密散列函数的位置不可知输入的访问节点内容的属性可以包括指向方框180中访问的节点所指向的另一节点的加密散列指针的加密散列值,从而保留链接加密散列指针的好处。
在一些实施例中,可以应用加密散列函数的相同实现方式来计算编码在方框172中获得的防篡改日志的有向非循环图的每个加密散列指针中的每个加密散列值。或者在一些情况下,对于不同的有向散列指针,可以在不同时间访问不同的实现方式。例如,由加密散列指针编码的每个有向边缘还可以包括标识实现方式的值,例如,指示是否用抽象加密散列函数的位置不可知实现方式或取决于位置的实现方式来指定边缘的值,该取决于位置实现的实现方式包括将上述作为非位置不可知的(例如,时间戳日期、位置索引等)类型值作为输入。在一些实施例中,可以在确定给定的有向非循环图或其部分中的防篡改日志已经达到阈值大小并且创建了将随后的条目存储到防篡改日志的新的有向非循环图时,选择位置不可知实现方式,而在其它时间可以使用不取决于位置的其它加密散列函数实现方式。或者为了简化代码,可以对每个加密散列指针使用相同的位置不可知实现方式。
接下来,一些实施例可以基于来自方框180的所访问的内容,用在方框184中确定的实现方式来计算加密散列值,如方框186所示。在一些实施例中,处理170还包括将新条目的内容形成到防篡改日志,其中新条目包括在方框186中计算的散列值和在方框178中选择的当前记录,如方框188所示。在一些情况下,形成新内容可以包括修改现有条目或创建新条目。在一些实施例中,形成内容可以包括向新条目的内容中的属性添加值,诸如图3和图5的图中的上述节点中的属性。在一些实施例中,当前记录中的散列值可以在所形成的内容中被单独标记为不同的属性,或者在一些情况下,这些值可以例如基于来自方框180的所访问的内容和当前记录与单个加密散列值组合。在一些实施例中,当前记录可以远程存储,而散列摘要,诸如基于该内容的加密散列值可以存储在方框172中获得的防篡改日志中。或者一些实施例可以将当前记录存储在日志本身中以根据上述一些技术加速访问,例如参考图2和图3。
接下来,一些实施例可以将新条目预置到防篡改日志,如方框190所示。在一些实施例中,这可以包括向条目序列添加新条目,诸如向图3的数据结构70中的方框序列172、174和176添加新条目。术语“预置”不需要在一些编程构造中任何特定的数组索引或位置,只要在防篡改日志中隐式或明确地指定新条目比防篡改日志中的现有条目或其它旧条目更新。
然后,一些实施例可以确定日志的大小是否大于阈值,如方框192所示。在一些实施例中,这可以包括确定日志的大小是否大于或等于阈值,配置也与大于本文中一般使用的指定一致。在确定日志的大小不大于阈值时,一些实施例可以返回以确定在方框176中是否还有更多要处理的记录。在一些实施例中,可以通过区块的数量、节点的量或存储在有向非循环图中的数据量来测量大小,例如,以兆字节为单位测量。
在确定日志的大小确实超过阈值时,一些实施例可以继续将防篡改日志拆分成较旧的防篡改日志和较新的防篡改日志,如方框194所示。在一些实施例中,拆分的防篡改日志可以各自具有相同类型的有向非循环图,在一些情况下,较旧的防篡改日志在拆分时较大。在一些实施例中,可以通过确定在新条目之后不将新条目或下一条目预置到防篡改日志而是实例化新的有向非循环图以接收后续条目来执行拆分。在一些实施例中,较旧和较新的防篡改日志可以各自具有相同类型(例如,拓扑类别)并且具有参考图3和图5描述的有向非循环图的属性。在一些实施例中,系统可以停止向较旧的防篡改日志添加新条目并继续向较新的防篡改日志添加新条目,直到该日志超过阈值,在这种情况下,一些实施例可以将该较新的防篡改日志分成更新的防篡改日志,无限期地继续增加防篡改日志的数量。
在一些实施例中,那些防篡改日志中的初始节点或区块可以包括指向较旧的防篡改日志的加密散列指针,例如,基于连续较旧的防篡改日志的最新区块的根节点的加密散列值。在一些实施例中,该引用的内容可以用于生成种子值,如图3的区块78中,并且可以与较旧的防篡改日志的标识符相关联。在一些实施例中,较新的防篡改日志可以根据较旧的防篡改日志在图1中的不同存储计算节点26上进行实例化,或者可以在同一存储计算节点26上实例化。
因此,一些实施例可以在保持可证明的防篡改性的同时重新配置有向非循环图,从而适应任意大的数据集。
应用于在可变和不可变数据存储器之间进行仲裁数据存储的透明客户端
如上所述,在许多情况下,传统数据库不够安全。许多主流数据库提供了一定程度的许可,但这些权限通常很宽泛且难以管理,这导致了攻击和滥用的机会。此外,最广泛采用的数据库实现交易SQL(T-SQL)或类似的变体。在大多数实现方式中,糟糕的设计实践和遗留代码可能会出现诸如SQL注入攻击之类的漏洞,这些漏洞会欺骗数据库返回潜在的敏感和非预期数据。此外,表内单个单元格的其它类型的单个表值的可审核性和权限很少。此外,大多数数据库管理系统依赖于存在于数据库客户端上的驱动程序。通常,这些客户端是开源的并且易于使用,使开发更容易。(这些都不表示一些实施例也可能不会受到这些问题的子集的影响,因为描述了几个发明,并且这些发明可以独立使用而不解决本文描述的每个问题。)
为了解决这些问题,已经实现了各种方法来保护存储的数据。示例包括气隙隔离数据库或仔细管理访问数据库的权限。然而,许多方法难以管理(例如,使用巴洛克式权限模式),速度慢(例如,空气隔离),或者打破了与期望特定数据库驱动程序接口的昂贵企业应用程序的向后兼容性,这些都不表示在所有实施例中都否认了这些方法中的任何一种。
一些实施例用能够识别敏感数据的专用客户端应用(通过列类型、预定义列名称或其它预定义方法)来缓解上述一些问题。一些实施例可以在数据被传输到数据库时捕获数据并将敏感数据路由到更安全的存储机制,如上所述。因此,可以为最敏感的数据保留更安全但可能稍微更慢的存储技术,而可以用更快且更便宜的不太安全的存储解决方案来处理较不敏感的数据,如传统的关系数据库。此外,在一些实施例中,客户端应用可以从其它应用中抽象出这种差异路由以及系统之间的查询格式的改变。
在一些实施例中,可以通过在多个区块链之间分散数据来存储更敏感数据子集,如上所述。类似地,当客户端应用检测到正在查询敏感数据时(使用相同的方法),在一些实施例中,客户端应用可以在其来自数据库时采用TXID(或其它指针),将其发送到用于重组的仲裁器实例,确认请求具有有效权限,如果是,则将代替TXID放置重组数据。
因为一些实施例拦截数据路径中的数据,所以一些实施例能够产生附加的审核日志,其显示访问数据的所有尝试,如下面更详细描述。在一些情况下,可以使用请求专用的信息来标记这些访问日志,诸如:用户名、地理位置、客户端计算机IP地址等。
通过该方法,期望实现传统数据库驱动程序的其它应用程序将需要很少或不需要分散或区块链专用配置。在一些情况下,该处理对其它遗留应用完全透明。此外,可以放宽许可复杂性,其中安全性数据被路由到不同的不可变安全数据结构,因为可以容易地检测对数据的访问和修改。
预期某些类型的数据特别适合与本技术结合使用。通常,系统访问凭证(如用户名和密码)特别敏感,因为如果此类信息受到未经授权的访问,则可能会损害整个帐户。将密码存储在可在一个位置访问整个密码的本地计算机或数据库中,会为想要操纵、窃取或以其它方式滥用认证凭证的威胁行为者提供容易的目标。其它示例包括信用卡号、社会安全号或健康相关数据。
一些实施例与区块链连接作为具有仲裁器或其它中间件的存储数据结构,其能够将用户凭证的全文表示作为输入,从该凭证的最后字节开始,将该凭证分段成N个片段,并将每个片段放在物理(或虚拟)单独的区块链支持的存储数据结构上,其中每片段包含指向分段凭证的下一个存储位置的指针。当应用程序或资源请求重组分段凭证时,在一些实施例中,向仲裁器或中间件提供凭证的第一字节的位置。在读取第一字节之后,在一些实施例中,仲裁器或中间件然后读取后续指针,直到读取空字符或序列字符结束。一旦所有片段都已被读入存储器,仲裁器或其它中间件可以用所得未分段凭证来响应应用。一些实施例可以预先处理凭证并计算在对凭证进行分段之前从一开始所需的片段数。一些实施例可能要求凭证产生阈值数量的分段。一些实施例可以在分段之前对分段或凭证进行盐处理以破坏或损害彩虹表攻击。
可以用图8中的处理来实现这些和其它技术,图8示出了处理200的示例,该处理可以由客户端计算设备执行以透明地改进现有的工作负载应用以与异构的数据库混合并且特别地与数据库的组合接口连接,该数据库组合包括比应用程序被配置成与最初编写的诸如如上所述的数据库连接的安全性更高的数据库。然而,应该强调的是,本技术不限于利用上述类型的更安全的数据库的实施例,并且在一些情况下,可以与其它类型的数据库结合使用,诸如另一个关系数据库或其它类型的数据存储区,诸如被认为比访问数据的应用程序配置成与之连接的数据存储区具有较高安全性或更低延迟的数据存储区。在一些实施例中,处理200可以由上述安全驱动程序30执行,但是应该注意,在一些情况下,一些或所有功能可以在数据库网关中的翻译器20中,在数据库管理系统中,或在一些其它计算设备中执行。
在数据离开客户端计算设备之前,或者在数据到达客户端计算设备之后,预期在客户端计算设备中执行处理200在一些用例中产生某些安全性益处,其中例如,在客户端计算设备上执行的工作负载应用程序被配置成访问的数据库已被。在这种情况下,攻击者可能已经破坏了网络上的其它计算设备,并且分别在写入或读取之前或之后在客户端计算设备处合并或拆分数据,预期会减少网络的攻击面。即,实施例不限于提供这些益处的系统,并且在一些情况下,这些操作可以在被认为在网络上相对安全的另一计算设备中执行,这并不表示本文描述的任何其它特征是限制性的。
在一些实施例中,可以使处理200对在客户端计算设备上执行的工作负载应用透明,诸如在微服务架构中执行不同服务的多个主机中的一个主机上的服务,或者作为单个计算设备上的单片应用执行的应用。在一些实施例中,通过将客户端计算设备的操作系统中的进程注册为以向数据库驱动程序显示工作负载应用被配置成访问并随后用下述操作包装原始数据库驱动程序的应用程序接口,可以使处理200对该应用透明。因此,一些实施例可以响应于数据库驱动程序响应的同一组应用程序接口请求,同时提供附加功能。此外,一些实施例然后可以在工作负载应用和数据库驱动程序之间传递修改的或未修改的应用接口交换。在许多情况下,工作负载应用的源代码不可用或修改起来很昂贵。因此,期望以不需要改变该应用的代码的方式改进现有工作负载应用是特别期望的。即,本技术也适用于其中源代码可用于工作负载应用并且被修改以实现本技术的用例,这再次不表示任何其它描述是限制性的。
在一些实施例中,处理200包括注册包装数据库驱动程序的安全驱动程序,如方框202所示。在一些实施例中,安全驱动程序可以在操作系统中注册,其中工作负载应用(例如,上述应用28)使得执行在处理200的后续操作中描述的数据库访问请求,并且该操作系统也可以是下面描述的数据库驱动程序(例如,上述驱动程序34)进行操作的环境。在一些实施例中,作为注册操作的结果,当应用向数据库驱动程序发送应用程序接口请求时,安全驱动程序可以接收该请求,并且安全驱动程序可以被配置成随后作为中介在数据库驱动程序与客户端计算设备上的单个操作系统内的应用程序之间与数据库驱动程序进行通信。
在一些实施例中,可以以类似的方式处理其它类型的访问。例如,一些实施例可以包装文件系统驱动程序以获得文件系统驱动程序和工作负载应用之间的交换,例如,在文档上操作。在一些情况下,可以实例化文件系统过滤器驱动程序,其发出指示与文件系统驱动程序交换应用程序接口的事件,并且一些实施例可以将这些事件分类为与较高安全性文档有关(或者不是),并且在一些情况下,作为响应修改驱动程序行为,例如,将存储在安全分布式存储器16中的文档替换为例如具有指向这样的文档的指针的本地存储的文本文件的访问请求。
然后,一些实施例可以包括接收第一写入请求,如方框204所示。在一些情况下,该操作可以在注册安全驱动程序之后的某个时间执行,并且可以以相对频率发生。在一些实施例中,写入请求类似于上面描述的那些。在一些实施例中,写入请求是从在计算设备上执行的工作负载应用向数据库驱动程序的应用程序接口请求。在一些实施例中,该请求可以是第一远程数据库,诸如上述的较低信任数据库14或一些其它数据存储区。在一些实施例中,第一写入请求可以指定将一组值写入数据库中的一组记录中的一组字段,其可以包括将新值添加到新字段到新记录或修改现有数据。第一写入请求可以在由数据库驱动程序的应用程序接口指定的模式中格式化,并且可以操作以使数据库驱动程序响应而不管方框202的注册步骤是否已经发生,但在一些情况下,由于省略了安全驱动程序的操作,所以应用程序然后可能会以较不安全的方式继续操作。
接下来,一些实施例可以获得数据策略,如方框206所示。在一些情况下,安全驱动程序30可以在存储器中保存一组一个或多个策略,每个策略包括一组规则,诸如每个应用程序或每个较低信任数据库14的策略。
一些实施例可以包括将要写入的值分类为较高安全性的值或较低安全性的值,如方框208所示。在一些情况下,该操作可以包括从一个或多个数据策略中选择一个或多个规则,例如,基于应用程序写入数据,接收数据或意图接收数据的较低信任数据库或其它标准。一些实施例可以包括将一个或多个上述规则应用于写入请求中的每个值,以将该值分类为较高安全性或较低安全性。
在一些实施例中,规则可以各自包括一个或多个标准,通过该标准,写入数据库的数据被分类为较低安全性数据或较高安全性数据。在一些情况下,这些规则可能包括将某些类型的字段指定为较低安全性或较高安全性的规则,诸如文本字段与整数字段或指定模式内的字段。在一些实施例中,标准可以明确地列出较高安全性字段和较低安全性字段,并且由于尝试将数据放入这些字段的写入请求,数据可以被分类为较高安全性或较低安全性。在一些实施例中,标准可以将正则表达式应用于字段标识符,诸如字段名称,以确定该字段内的值是较高安全性还是较低安全性。在一些实施例中,规则可以应用于正被写入的值的内容,使得给定字段中的一些值可以是较高安全性的,而该给定字段内的其它值可以是较低安全性的。例如,一些标准可能包括模式与值的内容匹配的正则表达式,以确定这些值是较高安全性还是较低安全性,例如,将格式与电话号码、信用卡号或社会安全号码一致的值,不论其所属领域如何,都指定为较高的安全性。
接下来,一些实施例可以将较低安全性的值存储在第一远程数据库中,如方框210所示。在一些情况下,第一远程数据库可以是工作负载应用被配置成在最初安装或现货供应时与之交互的数据库。因此,工作负载应用可以被配置成与第一远程数据面对接而无需改进。在一些情况下,这可以包括将值写入较低信任数据库14,例如,与上面参考图4的方框106描述的操作一致。
然后,一些实施例可以将较高安全性的值存储在第二远程数据库中,如方框212所示。在一些情况下,第二远程数据库可以是上述较高安全性数据库中的一个,诸如那些托管在图1的安全分布式存储器16内的数据库,其实现图3和图5的数据结构。或者在一些情况下,安全的第二远程数据库可以是另一个关系数据库或其它类型的数据库,例如,一个实现相对于第一远程数据库的附加安全特征或只是与第一远程数据库隔离。在一些情况下,存储较高安全性的值可以包括上面参考图2和图4描述的操作。
接下来,安全驱动程序的一些实施例可以使得指针被存储,例如,存储指向第一远程数据库中的较高安全性的值的指针,如方框214所示。例如,这可以包括修改从工作负载应用到数据库驱动程序的应用程序接口请求,以在将修改的应用程序接口请求推进到数据库驱动程序之前用节点标识符、分段标识符、文档标识符或如上所述的其它类型的标识符替换较高安全性的值。在一些情况下,数据库驱动程序然后可以将应用程序接口请求转换成命令和适合于使第一远程数据库存储指针的数据流,该指针标识对应值存储在第二远程数据库中的何处。
接下来,实施例可以稍后读取回数据。在一些情况下,这可以包括接收查询然后接收具有包括在查询响应中的指针的查询响应,如方框216所示。在一些实施例中,查询本身可以被修改,例如,其中查询的标准取决于较高安全性的值的内容。例如,一些实施例可以用修改的查询选择所有值;然后在上述安全驱动程序或翻译器中,用从第二远程数据库检索的相应值替换指针;然后将原始查询的标准应用于这些值,以确定哪些值响应工作负载应用发出的查询。
一些实施例可以用2017年6月30日提交的题为REPLACING DISTINCT DATA IN ARELATIONAL DATABASE WITH A DISTINCT REFERENCE TO THAT DATA AND DISTINCT DE-REFERENCING OF DATABASE DATA(案卷号043788-0453422)的美国临时专利申请62/527,330中描述的技术与数据库交互,该申请的内容以引用方式并入本文中。
在一些情况下,来自工作负载应用的单个查询可以产生一系列迭代的后续查询,例如,其中执行连接操作,并且其中数据从第一和第二远程数据库合并以确定中间查询响应。例如,工作负载应用可以请求所有用户的邮寄地址,其信用卡号以指定的序列开头,而邮寄地址和信用卡号可以保存在不同的表中,信用卡号被指定为较高安全性的值,而邮件地址被指定为较低安全性的值。在一些情况下,这两个不同的表可以通过一个表中的主键链接,该表在另一个表中被引用为外键,并且来自工作负载应用的查询可以指定连接。例如,一些实施例可以检索第一数据库中的每个记录,其具有指向第二数据库中反映信用卡号的值的指针,合并这些值,确定表中具有邮寄地址的哪些外键响应于查询标准,然后针对那些记录向第一远程数据库发出后续查询。在一些情况下,为了加速这些操作,可以保存索引,其中指针与指示值是否响应于某些标准(例如,阈值数量的前缀字符或后缀字符)的值相关联,并且实施例可以访问该索引以标识从安全性数据存储区中检索值的指针子集。
在一些实施例中,可以通过分配指针或其它类型的唯一标识符来加速这些操作,该唯一标识符基于指针所指向的值的内容,例如,基于仅基于指针所指向的值内容的加密散列值。因此,例如在数据库的不同行或其它元组中具有相同值的不同实例可以对应于相同的指针。这些指针可以说是唯一标识符,因为它们唯一地标识内容,在一些情况下不会泄露该内容中的语义信息,例如,使用加密散列标识符,同时仍然具有对于例如出现在多行和数据库中的值的多个实例复制的相同唯一标识符。
在一些情况下,可以结合租户标识符(例如,通过在输入到散列函数之前将值与分隔符连接)来加密地散列值,诸如一定量的熵的随机字符串,如更长超过64个字节,因此给定租户的相同值始终散列到同一个指针,而不同租户的相同值散列到不同的指针。或者在一些情况下,唯一标识符在实例之间也可以是唯一的。因此,出现在两个不同行中的相同值在每个实例中可以具有不同的唯一标识符,但是一些实施例可能因此操作更慢。在一些实施例中,安全驱动程序可以在读回数据时检测指针的重复实例,并且使得来自第二远程数据库的单个请求针对单个值来填充由相同指针的不同实例保持的这些位置中的每一个。因此,具有相对低基数的字段仍然可以利于相对快速的连接,即使这些字段被指定为相对高的安全性,并且相对少量的值可以填充相对大量的行。
例如,通过对根据该值分类为高安全性数据进行分组,例如通过对数据进行分类,然后检测其中值相同的实例组,或者将该数据存储在散列表中并检测具有散列冲突的重复项,其中相同的值被写入散列表的相同索引中,可以执行类似的操作。在这些示例中,一些实施例然后可以将相同的唯一标识符分配给该值相同的组中的每个实例,并且使得可以用作指针的唯一标识符替换那些较高安全性的值而存储在第一远程数据库中。
在用来自第二远程数据库的值替换指针时,如方框218所示,一些实施例可以向查询应用提供修改的查询响应,如方框220所示。在一些实施例中,查询应用可以是从其写入数据的不同工作负载应用,并且在一些情况下,可能位于不同计算设备上。在一些情况下,对于给定的写入,数据被多次读取,或者在读取最新版本的值之前可以多次写入数据。
对分布式文件系统的访问请求的不可变日志记录
使用第三方场外数据存储平台(例如,DropboxTM或Google DriveTM)以及现场平台(例如,SharePointTM、ConfluenceTM、OwnCloudTM等)变得越来越普遍,但是在这些系统中,审核对这些文件的改变变成了一项困难且往往不切实际的任务。在一些情况下,文件存储在大的连续块中,这使得威胁行为者可以轻松访问,并且在许多情况下,对数据的改变不会产生可靠的记录(通过该记录可以检测到这些改变)。例如,在渗入这样的系统并进行改变时,威胁行为者还可以造假日志记录或其它记录,否则会通过该记录检测到改变(同样,没有一个是表示否认这种方法。)
如上所述,传统数据库不能充分地防止威胁行为者或内部资源(雇员、信息技术人员等)篡改数据。在此类系统具有审核日志的情况下,这些日志通常仅与记录访问权限的数据一样安全,这意味着如果数据受到损害,审核日志通常也是如此。一些产品通过使用受密码保护的文件夹或数据存储区域提供“安全存储”,但是这些产品通常不提供不可变和分布式属性,并且通常可以修改其审核日志,特别是具有高级访问凭证的雇员。
如上所述,通过将文件分散(例如,分解成分段并分配)到一个或多个区块链中,一些实施例能够向文件提供不可变和分布式属性。此外,由于文件是分布式的,因此在一些实施例中,存在重组文件的应用。通过使该重组处理成为必要,一些实施例形成控制点,通过该控制点,该实施例能够产生对使用该方法存储的文件(或数据库值或日志条目)的每次访问的区块链支持的审核跟踪。
如上所述,在一些实施例中,数据访问在应用(例如,客户端应用)中实现,该应用能够监测由操作系统的文件系统生成的事件,读取导致通知的改变以及将它们报告给称为“仲裁器”实例的应用,用于区块链中的分散和存储。在一些实施例中,分散操作的所得TXID是替换客户端文件系统上的实际数据而存储的,或者可以用上面的安全驱动程序实现如上述的类似方法。
当文件系统请求读取操作时,在一些实施例中,将存储的TXID(或其它指针)发送到仲裁器实例以进行重组,加载到位,然后用该文件打开该文件的默认应用处理程序(例如,在一些情况下,通常用Adobe ReaderTM打开PDF文件)。如果用户不希望文件系统读取器放置在整个文件系统或文件系统的子集(目录)上,则在一些实施例中,用户可以通过访问上下文菜单并将文件指向放置在ScatterFS中来分散文件。
最后,在一些实施例中,可以暴露应用程序接口(API),使得任何第三方应用程序可以传递文件句柄、缓冲器或其它数据流以用于分散和存储。
因此,一些实施例可以在多个计算设备之间分配数据,在一些情况下在托管不可变分布式数据结构的对等网络中,如区块链,并且那些实施例可以在另一个(或者同一个)区块链中记录和存储访问记录,从而监测访问数据的必要控制点并创建这种访问尝试的不可变记录。应当理解,本技术不限于基于区块链的分布式数据库,并且可以考虑用于其它分布式文件系统的类似技术,例如,网络文件系统、自认证文件系统、服务器消息块、MapR FS、Amazon S3和Starfish分布式文件系统。
在一些实施例中,可以用图9中所示的处理230来实现日志记录和日志分析。在一些实施例中,处理230可以至少部分地由实现一个或多个上述技术的系统来执行。在一些实施例中,可以在计算设备上实现日志记录,该计算设备用作信息的聚合或分解中的阻塞点,该信息存储到如上所述的分布式数据存储区或其它类型的分布式数据存储区中或从其中读取。在一些实施例中,可以以这样的方式分配信息使得每个内容单元需要访问来自不同计算设备的信息(例如,借助于分段密钥或从密文分离密钥),并且来自不同计算设备的信息可以由导致记录防篡改日志的计算设备来聚合。类似地,写入操作可以由计算设备记录,该计算设备使信息被分解并在不同计算设备之间进行分配(例如,使用分段密文或从密钥分离密文,或其组合)。因此,在一些情况下,在每次访问操作期间发生日志记录,因为日志记录由读取或写入信息所必需的计算设备实现,否则该信息是不可访问的,除非信息通过导致日志记录的计算设备。在一些实施例中,可以将信息记录在如上所述的防篡改的不可变日志中,在一些情况下,记录在存储所访问信息的相同数据结构中,诸如工作负载内容,如文件系统中的数据库条目和各种类型的文档。在一些情况下,可以实现例如由图1的上述翻译器20引起的日志记录,但是实施例不限于该实现方式,这并不表示任何其它描述是限制性的。
在一些实施例中,处理230包括接收访问分布式数据存储区的请求,如方框230所示。在一些实施例中,该请求可以是读取请求或写入请求。在一些实施例中,权利请求伴随有内容单元,诸如根据上述技术用较低信任数据库14中的指针替换的值,或者根据上述技术由低信任文件系统中的指针替换的文档,其不表示该文档不能作为数据库中的值存储在该数据库中或本文的任何其它描述是限制性的。类似地,在一些情况下,读取请求可以伴随存储在较低信任数据存储区中的代替内容单元的指针并根据上述技术读取。在一些情况下,要访问的内容单元用指向在如上所述的内容移转中的第一分段中服务的分段的指针来引用,诸如分段链表,其中内容单元的不同分段分布在不同的防篡改有向非循环图中。
在一些实施例中,处理230可以包括聚合或分解与访问请求有关的内容单元,如方框234所示。在一些实施例中,这可以包括上面参考方框112所描述的分段操作或参考方框164描述的分段连接。在图4和图4中分别描述。可替代地或另外地,这可以包括利用加密密钥加密和分离密文的存储,或者将单独存储的加密密钥和密文串联在一起以进行有效的解密。
在聚合或分解之前或之后(这并不表示本文中的任何其它步骤限于本示例中描述的序列)一些实施例可以导致在防篡改日志中的条目中记录访问请求,并且可以由参与聚合或分解内容单元的计算设备引起日志记录,如方框236所示。在一些实施例中,记录可以由使得通过聚合或分解可访问内容单元所必需的计算设备引起。在一些实施例中,日志记录可以由上述翻译器20引起,这并不表示在与所有本技术一致的所有实施例中都需要翻译器20,或者本文的任何其它描述是限制性的。
在一些情况下,引起日志记录包括选择一个或多个上述有向非循环图,如参考图5所讨论并存储在图1的存储计算节点26中的那些。在一些情况下,导致日志记录包括向这些有向非循环图中的一个或多个发送指令(例如,向监测网络套接字并响应于这些指令管理图的服务)以在有向非循环图中存储描述日志记录事件的记录,例如,根据上面参考图2和图3描述的技术将记录存储为文档,并且在一些情况下,根据上面参考图4和5描述的技术将记录分成多个分段,并且在一些情况下,根据上面参考图4和图5描述的技术将记录分成多个分段。或者在一些情况下,记录可以存储在防篡改日志之外,并且记录的加密散列和记录的时间戳可以存储为具有加密散列指针作为边缘的上述防篡改有向非循环图中的一个的节点内容。在一些实施例中,凭借这些图,对描述日志条目的记录的修改在计算上可能不可用于隐藏,因为基于那些记录的有向非循环图中的加密散列值的链序列可能产生不可克服的计算挑战来通过有向非循环图计算沿着整个路径序列计算与原始未改变的记录产生的值相冲突的散列冲突。(应该注意,节点的属性可以存储在边缘中,反之亦然。)
在一些实施例中,处理230包括日志记录描述防问请求的各种不同方面的条目。在一些实施例中,该条目备有记录,该记录包括进行访问请求的用户帐户的标识符、应用程序的标识符,诸如通过其提交访问请求的工作负载应用、访问请求的内容,诸如包括要写入的内容或识别要读取的内容单元的命令。这类记录还可以包括时间戳,诸如指示何时接收到访问请求的日期或日期和时间。在一些情况下,记录可以包括提交请求的计算设备的地理定位。在一些实施例中,备有防篡改日志中的条目的这类记录还可以包括计算设备的标识符,通过该计算设备将访问请求提交给上述系统,诸如MAC地址、互联网协议地址、浏览器指纹、硬件指纹等等。
一些实施例可以将防篡改日志存储在存储器中,如方框238所示,其在一些情况下可以包括添加新条目或修改已经存储在存储器中的防篡改日志中的条目,其可以在多个实例中根据上述技术进行复制。这可以包括形成区块的一部分以便稍后添加到这样的日志,例如区块链。
处理230的一些实施例可以包括验证防篡改日志,如240所示。验证可以包括确定防篡改日志是否指示在记录之后已经修改了记录的条目。在一些实施例中,该操作可以包括访问条目的当前日志版本,然后基于该当前日志条目计算加密散列值。然后,一些实施例可以将当前加密散列值与防篡改日志中的一个或多个其它加密散列值进行比较,例如,一些实施例可以将该加密散列值与存储在上述一个有向非循环图中的相邻节点中的加密散列值进行比较,以确定加密散列值是否匹配,或者如果它们不匹配,则指示该记录被修改。在一些实施例中,可以计算基于彼此的加密散列值序列以确定哪个匹配并且识别通过有向非循环图到达差异原因所在的节点的路径。在一些实施例中,验证可以在每次写入操作时发生,周期性地发射,在每次读取操作时发生,或者根据一些其它时间表或事件发生。
由于难以以可隐藏的方式修改日志条目,篡改的可检测性可以阻止威胁行为者修改日志条目或恶意访问数据。此外,一些实施例可以根据一些上述技术对日志条目进行分段,进一步使得修改变得困难,因为不同网络上的一组异构的不同计算设备可能需要被损害以修改每个分段,即使威胁行为者以某种方式能够损害指示篡改的机制。
在一些实施例中,处理230包括确定验证操作是否表明篡改,如方框241所示,例如指示有向非循环图内的加密散列值之间的不匹配。在检测到篡改时,一些实施例可以发出警报,如242所示。在一些实施例中,可以通过发送电子邮件、文本消息或聊天消息来发出警报。一些实施例可以进一步继续采取某些操作来锁定系统的部分,例如,禁用凭证,减少与凭证相关联的访问级别,调整下面描述的一些阈值以减少后续访问被减慢或阻止之前可以访问的数据量,或限制对低安全性数据的访问。
在一些实施例中,在确定不存在篡改的证据之后,或者在发出警报之后,一些实施例可以继续基于在防篡改日志中记录的访问请求来确定风险度量,如方框244所示。风险度量可以采用各种不同的形式,并且在一些情况下,可以针对各种不同的实体计算风险度量。例如,可以针对不同用户、工作负载应用、计算设备或其组合计算不同的风险度量。在一些实施例中,风险度量可以是在尾随持续时间内接收的访问请求的数量、访问请求的总量或其组合。在一些实施例中,风险度量基于与先前行为模式的偏差。例如,一些实施例可基于历史日志事件训练机器学习算法,诸如隐马尔可夫模型、递归神经网络等,以预测各种类型的访问请求(或此类请求的序列)的可能性,对于给定用户、工作负载应用、计算设备、网络的一部分或其组合而言,诸如特定内容单元、内容单元类型、访问请求量、访问请求频率等。然后,一些实施例可以基于记录的事件的当前尾随序列与稍后接收的访问请求来比较这些预测,并且基于可能性来确定风险度量,例如,给定先前行为的给定访问请求的概率。此类预测模型的失败可能是异常恶意行为的证据。一些实施例可以使用该概率是风险度量或者确定这些概率在多个风险度量上的聚合,诸如集中趋势的度量,如这些概率在尾随持续时间或访问请求数量上的平均值、中值或模式。
在另一示例中,风险度量可以基于正被写入的内容的单元的内容。例如,一些实施例可以计算正被写入的内容的单元的熵,并将该熵与与历史写入分布式数据存储区的其它内容单元(例如,先前的数据库条目或文档)相关联的熵的度量进行比较。在一些实施例中,该差异可以指示勒索软件攻击,其中相对高的熵加密版本的数据被写为当前版本。(尽管应该注意,一些实现方式可以使用不可变数据存储区,其中较早的值保持在适当位置,并且在一些实施例中,通过将较低信任存储器中指向当前版本的指针替换为指向最新知名版本的指针,系统可以在这种攻击的情况下回滚到较早的值。)
接下来,一些实施例可以确定风险度量是否超过或以其它方式满足第一阈值,如方框246所示。本文描述的阈值的比较不应限于取决于所应用的值的符号的比较,并不表示任何其它描述都是限制性的。术语“满足”通常用于指可以通过超过(或在一些情况下等于)阈值来满足一个阈值和可以通过小于(或在一些情况下等于)该阈值来满足其中值乘以-1的等效阈值的情况,反之亦然。在确定风险度量满足第一阈值时,一些实施例可以阻止对后续访问请求的后续响应,如方框248所示。在一些情况下,阻止可以由参与聚合或分解以上参考方框236所讨论的内容单元的计算设备来实现。
如果访问未被阻止,则一些实施例可以将风险度量与第二阈值进行比较,如方框250所示。在一些实施例中,第二阈值可以不如第一阈值严格,例如,对应于较低级别风险。在一些实施例中,在确定风险度量满足第二阈值时,一些实施例可以延迟对后续访问请求的后续响应,如方框252所示。在一些实施例中,这可以包括启动倒数计时器并确定何时在聚合或返回内容单元或分解和写入内容单元之前已经过了指定的持续时间,在一些情况下是对于与多个内容单元有关的访问请求中的每个内容单元。因此,一些实施例可以实现软阻拦机制,通过该软阻拦机制,在某个级别提供功能,同时在发生脚本攻击的情况下延迟为人类响应提供时间。在一些实施例中,在方框246和250中满足第一或第二阈值时,一些实施例可以使用如上所述的技术发出警报以利于调查,并且如果需要就进行人工干预。然后,实施例可以返回以在方框232中等待下一个访问分布式数据存储区的请求。
在分布式区块链中存储文件的差异
通常,基于区块链的数据库不太适合于存储大的频繁修改的数据集合,如文件或其它二进制数据二进制大对象。由于区块链的不可变性,链中的先前条目(可能表示数据库中的文件或值)通常不能被删除或覆盖。因此,文件的每个版本都可以添加到区块链分类帐的大小,并且文件存储在分类帐中并经常修改,区块链分类帐的大小可能变得过于庞大而无法有效访问。
为了克服区块链的不可变属性的上述负面后果,一些实施例仅存储文件随时间的改变(差异),而不是在每次改变时存储文件的整个副本。
一些实施例可以接收对修改的文件(或其它数据块)的写入请求,并确定数据是否已从先前版本改变。在一些实施例中,在最初读取数据时,可以计算数据的散列摘要(例如,MD5散列)并将其保存在存储器中。在写入时,可以基于要重写到存储器的数据来计算新的散列,并且可以将该散列与较早的散列进行比较以确定文件是否已经改变。
在检测到改变时,一些实施例可以确定早期版本(例如,最新版本)与当前版本之间的增量。在一些情况下,数据库可以存储较早改变的增量,并且一些实施例可以迭代一系列增量以重新创建文档或其它文件的先前版本。在获得最新版本时,一些实施例可以确定具有新版本的增量,例如,通过确定版本之间的一组最长公共子序列并且例如以统一格式存储所得差异。
在大多数情况下,期望所得差异将远小于文件(或其它二进制大对象)的新版本。因此,预期将差异存储在区块链中比存储整个新版本的计算成本更低。此外,由于文件本身最终存储在区块链中(而不仅仅是散列摘要),因此预计系统对各种攻击(诸如散列冲突攻击)更加鲁棒。在这种攻击中,选择并设计恶意内容以产生与存储数据相同的散列,并且在数据库中将恶意数据替换可信数据。在传统系统中,区块链将产生的散列值将恶意内容验证为可信。相反,一些实施例通过将提交给数据库的数据存储在区块链中来绕过该攻击向量。此外,与仅在链中存储文档的散列摘要的系统相反,一些实施例提供对文件(或其它块)的增强控制。在仅存储散列摘要的这些较旧系统中,系统无法控制文件。这类系统可以从外部数据存储区中删除该文件,并且链中剩下的所有内容都是散列摘要。即,这类系统可以验证文件,但是它们不能再现文件。即,并非所有实施例都提供这些益处,因为设想了各种工程和成本权衡,并且描述了多个独立有用的发明,这并不表示任何其它描述是限制性的。
在一些实施例中,可以利用下面参考图10和图11描述的处理来实现上述技术,该处理基于下面参考图12描述的数据结构进行操作。
如图10中所示,一些实施例可以包括处理260,该处理将文档的新版本和先前存储的文档版本之间的差异写入到防篡改的不可变数据存储库,诸如区块链或具有加密散列指针的有向非循环图的上述示例中的一个。在一些实施例中,处理260可以由上述安全驱动程序30结合上述翻译器20或通过其它组件来执行,例如,基于驻留在网络存储器或数据库和客户端计算设备之间的网络上的网关。在一些实施例中,处理260可以由客户端应用执行,该客户端应用在客户端工作负载应用和数据库驱动程序或文件系统驱动程序之间进行包装或以其它方式接口连接,例如,在相同操作系统中作为工作负载应用执行的文件系统驱动程序和执行图10和图11的操作的处理。
在一些实施例中,本地计算设备的文件系统包括其中布置有文件的目录的层次结构,例如,具有元数据的各种示例的二进制大对象,如文件名、创建日期、修改日期、作者、对访问的许可等。在一些实施例中,这些目录可以是存储在执行工作负载应用的计算设备上或存储在远程网络连接存储设备上的本地目录。在一些实施例中,目录中的一些文件可以用具有计算机可读指针的文本文件替换,例如,用如上所述的技术存储的文档,并且一些实施例可以拦截(例如,在过滤时直接接收、通过、观察等)由文件系统资源管理器应用程序读取或写入访问请求到文件系统驱动程序,并检测代替文档设置在目录中的这些指针。然后,一些实施例可以响应于对存储在防篡改的不可变数据存储库中的文档执行相应的操作,如上所述的那些或其它类型的远程存储器。在一些情况下,这可能包括创建新版本,更新存储在目录中的指针以及各种其它操作。此外,这些技术可以类似地应用于数据库读取和写入操作,例如,存储先前存储的值和相对较大的数据库与数据库中那些值的新版本之间的差异。
在一些实施例中,处理260包括接收将文档的新版本写入防篡改的不可变数据存储库的请求,如方框262所示。在一些实施例中,该操作可以由上述安全驱动程序或其它客户端站点仲裁器执行。例如,用图8的处理。在一些实施例中,该请求可以包括将文档指定为较高安全性和指向存储在客户端计算机可访问的目录或数据库中的文档的先前版本的指针。例如,用户可能先前已将先前版本读取到客户端计算设备工作负载应用的本地存储器中,转换先前版本,然后请求存储新版本,使得在方框162的操作中接收请求。
接下来,一些实施例可以确定文档的新版本与文档的先前版本不同,如方框264所示。在一些实施例中,这可以通过从防篡改的不可变数据存储库中检索先前版本来执行,例如,用如下面参考图11所述的读取处理。或者一些实施例可以通过在防篡改的不可变数据存储库之外存储与指向具有这些文档的散列摘要的指针相关联的索引来加速该确定。在一些实施例中,散列摘要是基于文档内容的加密散列值,或基于文档内容的非加密散列值。应当注意,并非所有散列函数都是具有上述属性的加密散列函数由这些函数展示。在一些情况下,非加密散列函数可以比加密散列函数更快地计算,或者实施例可以使用加密散列函数来增强安全性。因此,一些实施例可以在不从防篡改的不可变数据存储库中检索文档的先前版本的情况下进行方框264的确定,例如,通过基于新版本计算新的散列摘要并将该新的散列摘要与存储在防篡改的不可变数据存储库之外的先前计算的先前版本的散列摘要进行比较,例如,与指向索引中的先前版本的指针相关联。在确定散列值匹配时,一些实施例可以终止处理260,因为可以确定先前版本与新版本相同。
或者,在确定文档的新版本与文档的先前版本不同时,一些实施例可以继续从防篡改的不可变数据存储库获得文档的先前版本,如方框266所示。在一些实施例中,这可以包括利用读取操作来检索先前版本,例如,如参考图11所描述的那些,其在一些情况下可以参与上面参考图2、图5、图6和图7描述的处理。
接下来,一些实施例可以确定将先前版本转换为文档的新版本所需的一组改变,如方框268所示。在一些实施例中,该操作可能在计算上相对昂贵并且包括在确定将先前版本转换为新版本所需的最小一组改变的处理中,确定两个文档之间的最长匹配子字符串。在一些情况下,这些改变可能仅限于删除,附加文本(例如,预置或后置)以及改变现有文本的值。在一些实施例中,可以使用diff操作来进行确定,其中将先前版本和新版本输入到diff函数中,diff函数可以返回该组改变。在一些实施例中,可以使用Hunt-McIlroy算法来实现改变,如贝尔实验室计算科学技术报告,1976的Hunt和McIlroy的题为an algorithmfor differential file comparison的文章中所描述,其内容以引用方式并入本文中。
在一些情况下,为了加速比较,可以将两个文档中的每一行转换为该行的散列摘要,该散列摘要在操作时相对较快,例如,将具有散列函数的每一行转换为64位或更短,诸如32位或更短或16位或更短的相应行的内容的散列摘要。因此,可以将两个文档中的每一个转换为散列摘要的有序列表,并且一些实施例然后可以比较散列摘要的两个有序列表以识别可能在两个版本之间没有改变的文本序列。例如,一些实施例可以识别列表的开头和结尾处的多个行,其中没有改变。在检测到改变开始的行时,一些实施例然后可以在一个列表中向前搜索直到找到匹配,从而潜在地检测插入。
然后,一些实施例可以将该组改变存储在防篡改的不可变数据存储库中,如方框270所示。在一些情况下,这可以包括在图3的数据结构上执行图2的操作以存储文档,或根据上面参考图5和图6描述的技术对文档进行分段并以该方式存储文档。
一些实施例还可以包括存储指向与该组改变相关联的文档的先前版本的指针,如方框272所示。在一些实施例中,指向文档的先前版本的指针可以存储在防篡改的不可变数据存储库中作为该组改变的元数据,从而形成版本图的节点和边缘,如下面参考图12所描述的那样。在一些实施例中,文档可以被编码为各组改变的链表,例如,在上述数据结构中,各组改变之间的指针跟踪回到文档的初始版本,并且可以通过检索每组改变然后迭代地应用它们来检索文档,如下面参考图11更详细地描述。
在一些实施例中,可以将来自方框270的新存储的一组改变的更新指针存储在文件系统(或数据库单元)中,来代替在方框262中写入新版本的请求所提交的先前指针。因此,对该文件的后续读取请求可以标识该新指针并检索新的一组改变,然后通过先前版本跟踪回到初始版本,如下面参考图11更详细地描述。可以对存储在数据库中的值执行如上所述的类似操作,替换数据库单元中的指针以引用新版本。
在一些实施例中,版本图可以分支。例如,用户可以请求写入文档的先前版本或者写入到文档的先前版本的新版本,从而形成版本图的并行改变,该版本图彼此共享其子组版本历史,然后稍后在版本图中分支一部分。预计这将进一步压缩数据并增加可以存储在防篡改的不可变数据存储库中的给定存储量中的文档量。
图11示出了从存储文档的版本图的防篡改的不可变数据存储库读取文档或其它内容单元的处理280的示例,作为跟踪回到初始版本的文档版本之间的差异序列。在一些实施例中,处理280可以在图10的方框266中获得文档的先前版本的处理中执行,或者在接收到工作负载应用程序访问存储文档的请求时执行,例如,在拦截请求时文件系统驱动程序以访问用指向存储在一个上述数据结构中的文档的指针替换的文档。
在一些实施例中,处理280包括接收识别指向防篡改的不可变数据存储库中的文档的最新版本的指针的读取请求,如方框282所示。在一些情况下,指针可以指向先前版本,例如,在用户请求回滚到先前版本时。在一些实施例中,可以用上述技术拦截读取请求(通过该技术拦截写入请求)。
接下来,一些实施例可以读取由当前指针定位的版本,如方框284所示,例如通过执行上述读取操作,通过该读取操作在图3或图5的数据结构中检索文档,或者接收到其它数据库条目。
然后,一些实施例可以确定红色版本是文档的初始版本还是其它内容单元,如方框286所示。在一些情况下,初始版本可以在存储时显式标记为初始版本,或初始版本由于缺少指向早期版本的指针,可以隐含地指定为初始版本。如上所述,指针可以与后续版本相关联地存储,如参考方框272所讨论。
在确定所检索的版本不是初始版本时,一些实施例可以指定与所检索的版本相关联的指针,例如,作为检索到的版本的元数据存储在防篡改的不可变数据存储库中,作为当前指针,如方框288所示。
接下来,一些实施例可以向后进先出缓冲器添加与检索到的版本相关联的一组改变,例如,存储在由当前指针识别的防篡改的不可变数据存储库中的位置或位置序列,如方框290所示。在一些情况下,缓冲器可以表征为堆栈。然后,一些实施例可以返回到方框284,以在方框284中读取由更新的当前指针定位的下一个早期版本。
在方框286中遇到初始版本时,一些实施例可以进行到方框292并将文档的副本初始化为初始版本,例如,将文档的工作副本设置为等于检索到的初始版本。然后,一些实施例可以确定是否存在要处理的缓冲器中的更多改变,如方框294所示。在一些情况下,一些实施例可以确定缓冲器是否为空还是存在更多值,即堆叠在缓冲器中的该组改变。
一些实施例可以在确定存在更多改变时,从缓冲器检索下一组改变,如方框296所示,在一些情况下,这可以包括从缓冲器中删除下一组改变以更新缓冲器,以反映下一组改变将被应用。在一些情况下,这可能被表征为从堆栈弹出一组改变。
接下来,一些实施例可以将下一组改变应用于文档的当前工作副本,如方框298所示。在一些情况下,这可以包括访问一组删除操作、改变操作和附加操作。在一些实施例中,这些改变可以各自与要应用改变的行号,要应用改变的序列以及在一些情况下要应用的内容相关联,例如指示替换文本或附加文本(或位)。
然后,一些实施例可以返回到方框294以确定缓冲器中是否存在更多改变。在到达缓冲器的末端(例如,堆栈的底部)时,一些实施例可以进行到方框300并返回文档的副本。在一些情况下,可以将文档的副本返回到被配置成访问文档的工作负载应用,例如,基于在操作系统中映射到特定工作负载应用的文件系统扩展。在一些实施例中,读取操作对于用户可以是透明的,并且可以对用户显示为好像用户正在本地存储的或网络存储的文档副本上操作,其中该用户体验和不与上述安全分布式存储器16连接的用户体验相同或基本相同,从而提供更高的安全性而不会对用户造成影响,或者在一些情况下需要对昂贵的工作负载应用程序进行改造。(即,实施例不限于提供这些益处的系统,这并不表示其它描述是限制性的。)
在一些实施例中,图10和图11的处理可以产生如图12中所示的数据结构310。在一些实施例中,数据结构310可以包括上面参考图5的数据结构130描述的验证图,以及上面参考图5描述的内容图138。在该示例中,内容图138可以是文档的最新存储版本,其可以是来自早期版本的一组改变。在一些实施例中,早期版本可以例如是文档的初始版本,存储在图12中所示的另一内容图314中。内容图314可以像内容图138一样包括一系列内容节点,诸如分段,其通过分段之间的指针连接,通过该指针,可以在读取操作期间组装文档的初始版本或与给定版本相关联的一组改变。因此,在一些实施例中,数据结构310可以存储第三重叠图,其可以是版本图312。在该示例中,版本图312包括边缘316,该边缘可以是从存储在内容中的最新版本到存储在内容图314中的早期初始版本的指针。在一些实施例中,指针可以指向存储早期版本的内容图的初始分段。
图13是示出根据本技术的实施例的示例性计算系统1000的图。本文描述的系统和方法的各个部分可以包括类似于计算系统1000的一个或多个计算机系统或在其上执行。此外,本文描述的处理和模块可以由类似于计算系统1000的一个或多个处理系统执行。
计算系统1000可以包括经由输入/输出(I/O)接口1050耦合到系统存储器1020、输入/输出I/O设备接口1030和网络接口1040的一个或多个处理器(例如,处理器1010a-1010n)。处理器可以包括单个处理器或多个处理器(例如,分布式处理器)。处理器可以是能够执行或以其它方式执行指令的任何合适的处理器。处理器可以包括中央处理单元(CPU),其执行程序指令以执行计算系统1000的算术、逻辑和输入/输出操作。处理器可以执行代码(例如,处理器固件、协议栈、数据库管理系统、操作系统或其组合),其创建程序指令的执行环境。处理器可以包括可编程处理器。处理器可以包括通用或专用微处理器。处理器可以从存储器(例如,系统存储器1020)接收指令和数据。计算系统1000可以是包括一个处理器(例如,处理器1010a)的单处理器系统,或是包括任何数量的合适处理器(例如,1010a-1010n)的多处理器系统。可以采用多个处理器来提供本文描述的技术的一个或多个部分的并行或顺序执行。本文描述的诸如逻辑流程的处理可以由执行一个或多个计算机程序的一个或多个可编程处理器执行,以通过对输入数据进行操作并生成对应的输出来执行各功能。本文描述的处理可以由专用逻辑电路执行,并且装置也可以实现为专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。计算系统1000可以包括多个计算设备(例如,分布式计算机系统)以实现各种处理功能。
I/O设备接口1030可以提供用于将一个或多个I/O设备1060连接到计算机系统1000的接口。I/O设备可以包括接收输入(例如,来自用户)或输出信息(例如,对用户而言)的设备。I/O设备1060可以包括,例如,在显示器(例如,阴极射线管(CRT)或液晶显示器(LCD)监测器)上呈现的图形用户界面、指示设备(例如,计算机鼠标或轨迹球)、键盘、小键盘、触摸板、扫描设备、语音识别设备、手势识别设备、打印机、音频扬声器、麦克风、摄像头等。I/O设备1060可以通过有线或无线连接而连接到计算机系统1000。I/O设备1060可以从远程位置连接到计算机系统1000。例如,位于远程计算机系统上的I/O设备1060可以经由网络和网络接口1040连接到计算机系统1000。
网络接口1040可以包括网络适配器,其提供计算机系统1000到网络的连接。网络接口1040可以利于计算机系统1000与连接到网络的其它设备之间的数据交换。网络接口1040可以支持有线或无线通信。网络可以包括电子通信网络,诸如互联网、局域网(LAN)、广域网(WAN)、蜂窝通信网络等。
系统存储器1020可以被配置成存储程序指令1100或数据1110。程序指令1100可以由处理器(例如,处理器1010a-1010n中的一个或多个)执行以实现本技术的一个或多个实施例。指令1100可以包括用于实现本文描述的关于各种处理模块的一种或多种技术的计算机程序指令的模块。程序指令可以包括计算机程序(以某些形式称为程序、软件、软件应用程序、脚本或代码)。计算机程序可以用编程语言编写,包括编译或解释语言,或声明或程序语言。计算机程序可以包括适用于计算环境的单元,包括作为独立程序、模块、组件或子例程。计算机程序可以或可以不对应于文件系统中的文件。程序可以存储在文件的一部分中,该文件将其它程序或数据(例如,存储在标记语言文档中的一个或多个脚本)保存在专用于所讨论的程序的单个文件中,或者保存在多个协调文件中(例如,存储一个或多个模块、子程序或代码部分的文件)。可以部署计算机程序以在位于一个站点本地或分布在多个远程站点上并通过通信网络互连的一个或多个计算机处理器上执行。
系统存储器1020可以包括有形程序载体,其上存储有程序指令。有形程序载体可以包括非瞬时性计算机可读存储介质。非瞬时性计算机可读存储介质可以包括机器可读存储设备、机器可读存储基板、存储器设备或其任何组合。非瞬时性计算机可读存储介质可以包括非易失性存储器(例如,闪存、ROM、PROM、EPROM、EEPROM存储器)、易失性存储器(例如,随机存取存储器(RAM)、静态随机存取存储器(SRAM)、同步动态RAM(SDRAM))、大容量存储器(例如,CD-ROM和/或DVD-ROM、硬盘驱动程序)等。系统存储器1020可以包括非瞬时性计算机可读存储介质,其可以具有存储在其上的程序指令,该程序指令可由计算机处理器(例如,处理器1010a-1010n中的一个或多个)执行以引起本文所述的主题和功能操作。存储器(例如,系统存储器1020)可以包括单个存储器设备和/或多个存储器设备(例如,分布式存储器设备)。用于提供本文描述的功能的指令或其它程序代码可以存储在有形的非瞬时性计算机可读介质上。在一些情况下,整个指令集可以同时存储在介质上,或者在一些情况下,指令的不同部分可以在不同时间存储在相同介质上。
I/O接口1050可以被配置成协调处理器1010a-1010n、系统存储器1020、网络接口1040、I/O设备1060和/或其它外围设备之间的I/O流量。I/O接口1050可以执行协议、定时或其它数据转换,以将来自一个组件(例如,系统存储器1020)的数据信号转换成适合于由另一个组件(例如,处理器1010a-1010n)使用的格式。I/O接口1050可以包括对通过各种类型的外围总线附接的设备的支持,诸如外围组件互连(PCI)总线标准或通用串行总线(USB)标准的变体。
本文描述的技术的实施例可以使用被配置成托管实施例的不同部分或实例的计算机系统1000的单个实例或多个计算机系统1000来实现。多个计算机系统1000可以提供本文描述的技术的一个或多个部分的并行或顺序处理/执行。
本领域技术人员将理解,计算机系统1000仅仅是说明性的,并不旨在限制本文描述的技术的范围。计算机系统1000可以包括可以执行或以其它方式提供执行本文描述的技术的设备或软件的任何组合。例如,计算机系统1000可以包括云计算系统、数据中心、服务器机架、服务器、虚拟服务器、台式计算机、膝上型计算机、平板计算机、服务器设备、客户端设备、移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏机、车载计算机或全球定位系统(GPS)等或者是其组合。计算机系统1000还可以连接到未示出的其它设备,或者可以作为独立系统操作。另外,在一些实施例中,由所示组件提供的功能可以组合在更少的组件中或分布在附加组件中。类似地,在一些实施例中,可以不提供一些所示组件的功能或者可以使用其它附加功能。
本领域技术人员还将理解,虽然各种项目被示为在使用时存储在存储器中或存储设备上,但是这些项目或它们的一部分可以在存储器和其它存储设备之间传输以用于存储器管理和数据的完整性。或者,在其它实施例中,一些或所有软件组件可以在另一设备上的存储器中执行,并经由计算机间通信与所示计算机系统通信。系统组件或数据结构中的一些或全部也可以存储(例如,作为指令或结构化数据)在计算机可访问介质或便携式物品上,以由适当的驱动程序读取,其各种示例在上面描述。在一些实施例中,存储在与计算机系统1000分开的计算机可访问介质上的指令可以经由传输介质或诸如电信号、电磁信号或数字信号之类的信号传输到计算机系统1000,经由诸如网络或无线链接之类的通信介质传送。各种实施例还可以包括在计算机可访问介质上接收、发送或存储根据前述描述实现的指令或数据。因此,本技术可以用其它计算机系统配置来实践。
在方框图中,所示组件被描绘为离散功能块,但是实施例不限于其中如所示组织本文描述的功能的系统。由每个组件提供的功能可以由与当前描述的组织不同的软件或硬件模块提供,例如,这样的软件或硬件可以混合、组合、复制、分解、分布(例如,在数据中心内或在地理上),或以其它方式组织不同。本文描述的功能可以由执行存储在有形非瞬时性机器可读介质上的代码的一个或多个计算机的一个或多个处理器提供。在一些情况下,尽管使用单数术语“介质”,指令可以分布在与不同计算设备相关联的不同存储设备上,例如,每个计算设备具有不同的指令子集,实现与使用本文的单数术语“介质”一致。在一些情况下,第三方内容传递网络可以托管通过网络传送的一些或所有信息,在这种情况下,在某种程度上,据说提供或以其它方式提供信息(例如,内容),可以通过发送指令来提供信息以从内容传送网络中检索该信息。
读者应该理解,本申请描述了几种独立有用的技术。申请人不是将这些技术分成多个独立的专利申请,而是将这些技术归为单一的文件,因为它们的相关主题适用于应用处理中的经济。但是,这些技术的独特优势和方面不应该混为一谈。在一些情况下,实施例解决了本文所述的所有缺陷,但应理解,这些技术是独立有用的,并且一些实施例仅解决这些问题的一部分或提供对于审查本发明技术的本领域技术人员显而易见的其它未提及的益处。由于成本限制,本文公开的一些技术目前可能未被要求保护,并且可以在后续申请中要求保护,诸如接续申请或通过修改本权利要求。类似地,由于空间限制,本文件的摘要和发明内容部分都不应被视为包含所有这些技术或这些技术的所有方面的综合列表。
应当理解,说明书和附图并非旨在将本技术限制于所公开的特定形式,而是相反,意图是覆盖落入由所附权利要求限定的本发明技术的精神和范围内的所有修改、等效物和替代物。鉴于该描述,本领域技术人员将清楚该技术的各个方面的进一步修改和替代实施例。因此,该描述和附图仅被解释为说明性的,并且是为了教导本领域技术人员实施本技术的一般方式。应理解,本文所示和描述的本技术的形式将被视为实施例的示例。元件和材料可以替换本文所示和描述的元件和材料,可以反转或省略部件和处理,并且可以独立地利用本技术的某些特征,所有这些对于本领域技术人员来说在获益于本发明技术的描述之后是显而易见的。在不脱离所附权利要求中描述的本技术的精神和范围的情况下,可以对本文描述的元件进行改变。本文使用的标题仅用于组织目的,并不意味着用于限制说明书的范围。
如在整个本申请中所使用,单词“可以”以允许的意义使用(即,意味着可能),而不是强制意义(即,意味着必须)。词语“包括”、“包含”、“含”等意味着包括但不限于。如在整个本申请中所使用,单数形式“一”、“一个”和“该”包括复数指示物,除非内容明确地另有说明。因此,例如,对“一元件”或“一个元件”的引用包括两个或多个元件的组合,但对一个或多个元件使用其它术语和短语,诸如“一个或多个”。术语“或”除非另有说明,否则是非排它性的,即包含“和”以及“或”。描述条件关系的术语,例如“响应于X,Y”,“在X、Y时”,“如果X,Y”,“当X,Y时”等包含因果关系,其中前因是必要的因果条件,前因是充分的因果条件,或者前因是后果的促成因果条件,例如,“状态X在条件Y获得时发生”是通用的,“X仅在Y时发生”并且“X在Y和Z时发生。”这种条件关系不仅限于立即跟随前因获得的后果,因为某些后果可能会延迟,在条件语句中,前因连接到其后果,例如,前因与后续发生的可能性有关。将多个属性或功能映射到多个对象(例如,执行步骤A、B、C和D的一个或多个处理器)的语句包括映射到所有这些对象的所有这些属性或函数和映射到属性或功能的子集的所有这些属性或函数的子集(例如,各自执行步骤A-D的所有处理器,以及处理器1执行步骤A,处理器2执行步骤B和步骤C的一部分,并且处理器3执行步骤C和步骤D的一部分的情况),除非另有说明。此外,除非另有说明,否则一个值或动作“基于”另一个条件或值的语句包括条件或值是唯一因素的实例和条件或值是多个因素中的一个因素的实例。除非另有说明,否则不应将一些集合的“每个”实例具有某些属性的语句理解成以排除较大集合中某些其它相同或相似成员不具有该属性的情况,即,每个集合不一定表示每个属性。除非明确指出,否则不应将关于所述步骤的顺序的限制读入权利要求中,例如,用如“在执行X,执行Y之后”之类的显式语言,与可能不恰当地被认为表示序列限制的语句相反,如“对项目执行X,对经过X的项目执行Y”用于使声明更具可读性而非指定序列。关于“A、B和C中的至少Z”等的语句(例如,“A、B或C中的至少Z”)是指所列类别中的至少Z(A、B和C)并且每个类别中不需要至少Z单元。除非另外特别说明,否则从讨论中可以明显看出,应当理解,在整个说明书中,利用诸如“处理”、“计算”、“估算”、“确定”等术语的讨论是指特定装置的动作或处理,诸如专用计算机或类似的专用电子处理/计算设备。
在该专利中,某些美国专利、美国专利申请或其它材料(例如,文章)已通过引用并入。然而,这些美国专利、美国专利申请和其它材料的文本仅在这些材料与本文所述的语句和附图之间不存在冲突的范围内通过引用并入。如果发生此类冲突,则以本文件的文本为准。
参考以下列举的A组实施例将更好地理解本技术,其中参考编号的实施例涉及本组中的那些:
1.一种有形的非瞬时性的机器可读介质,其存储指令,当由一个或多个处理器执行时,实现包括以下的操作:用一个或多个处理器接收写入命令,该写入命令请求将与写入命令相关联的文档存储在不可变的数据结构,其可在将文档存储在数据结构中之后防止试图修改文档的攻击者隐藏文档被修改;用一个或多个处理器形成至少部分有向非循环图,该有向非循环图具有链接各个节点对的多个节点和边缘,其中:有向非循环图的节点具有区分有向非循环图的不同节点的相应节点标识符;有向非循环图的节点有节点内容;有向非循环图的至少一些节点中的每一个具有包括多个加密散列值的节点内容;每个节点的加密散列值均为(i)基于有向非循环图的另一个相应节点的节点内容输出的加密散列函数,以及(ii)与另一个相应节点的节点标识符相关联,从而指定有向非循环图的边缘;并且形成至少部分有向非循环图包括:将编码至少一些文档的数据写入有向非循环图的第一组节点的节点内容;并且从第一组节点开始,遍历有向非循环图的边缘,并通过确定访问节点的加密散列值,形成经由遍历访问的节点的节点内容;并且用一个或多个处理器将有向非循环图存储在存储器中。
2.根据实施例1所述的介质,其中:文档是大于1千字节的文件;有向非循环图包括二叉树;文档存储在二叉树的一个或多个叶节点中;有向非循环图包括与第一组节点不相交的第二组节点,第二组节点是二叉树的一部分,并且在有向非循环图的边缘遍历期间访问节点;遍历包括形成遍历发生的防问节点,使得在遍历期间形成至少部分二叉树;遍历包括从二叉树的叶节点遍历到二叉树的根节点;形成至少部分有向非循环图包括形成整个二叉树;并且将有向非循环图存储在存储器中包括将有向非循环图的三个或多个不同实例存储在三个或多个不同子网上的三个或多个不同计算设备中。
3.根据实施例1-2中任一项所述的介质,其中:有向非循环图是二叉树;至少部分文档存储在二叉树的一个或多个叶节点中;并且二叉树的根节点具有节点内容,该节点内容包括基于二叉树的每个节点的节点内容的加密散列值。
4.根据实施例3所述的介质,其中:整个文档存储在单个叶节点的节点内容中;文档以加密形式编码在单叶节点的节点内容中;并且在加密成加密形式之前用熵编码压缩文档。
5.根据实施例3所述的介质,其中:文档存储在二叉树的多个叶节点中;文档的不同部分存储在不同叶节点的节点内容中;在二叉树中与叶节点相邻的节点的节点内容各自包括:与二叉树中的相应节点相邻的第一相邻叶节点的第一标识符;基于第一相邻叶节点的节点内容的加密散列的第一加密散列值;与二叉树中的相应节点相邻的第二相邻叶节点的第二标识符;并且基于第二相邻叶节点的节点内容的加密散列的第二加密散列值。
6.根据实施例3所述的介质,其中将有向非循环图存储在存储器中包括将节点附加到节点的链表,该附加节点具有节点内容,该节点内容包括(i)基于链表中每个节点的节点内容的加密散列值,以及(ii)基于二叉树中每个节点的节点内容的加密散列值。
7.根据实施例1-6中任一项所述的介质,包括:接收请求从不可变数据结构检索文档的读取命令;访问有向非循环图的第一组节点以检索至少部分文档;确定是否至少部分地通过以下方式修改了至少部分文档:基于第一组节点的节点内容计算一个或多个加密散列值;将一个或多个计算的密码散列值与有向非循环图中与第一组节点相邻的节点的节点内容的一个或多个对应的密码散列值进行比较;并且基于该比较确定至少部分文档未被修改。
8.根据实施例7所述的介质,其中:计算一个或多个加密散列值包括将第一组节点中的至少一些节点的节点内容输入到SHA-256散列函数中;并且比较包括确定函数的输出与存储在有向非循环图的相邻节点的节点内容中的对应值匹配。
9.根据实施例7所述的介质,其中确定至少部分文档是否已被修改包括:基于有向非循环图中的每个节点的节点内容,访问具有给定加密散列值的节点内容的有向非循环图的节点;并基于第一组节点的节点内容重新计算给定的加密散列值;并且确定给定的加密散列值与重新计算的加密散列值相同。
10.根据实施例9所述的介质,其中确定至少部分文档是否已被修改包括:遍历从有向非循环图中最近添加的节点延伸到与第一组节点相邻的节点的密码散列值链;并验证当前节点内容为链中的每个加密散列值产生匹配的加密散列值。
11.根据实施例7所述的介质,其中:数据结构存储占用超过100Gb存储空间的超过100,000个的文档。
12.根据实施例11所述的介质,其中:在接收到读取命令的250毫秒内,文档被检索并验证为未被修改。
13.根据实施例1-12中任一项所述的介质,其中:数据结构的读取等待时间与nlog(n)成比例,其中n是数据结构中的条目的数量。
14.根据实施例1-13中任一项所述的介质,其中:将编码至少一些文档的数据写入有向非循环图的第一组节点的节点内容包括用于将文档存储在有向非循环图中的步骤。
15.根据实施例1-14中任一项所述的介质,其中:形成至少部分有向非循环图包括用于形成具有对应于密码散列指针的边缘的有向非循环图的步骤。
16.根据实施例1-15中任一项所述的介质,包括:将文档分段成多个分段;并且将第一分段子集存储在有向非循环图中;将第二分段子集存储在另一个有向非循环图中,第二子集是与第一子集不同的组。
17.根据实施例16所述的介质,其中分段包括:确定符号序列在文档或语料库中出现的频率;在基于至少一些频率选择的符号序列的边界处对文档进行分段。
18.根据实施例1-17中任一项所述的介质,包括:将来自文档的第一信息子集存储在有向非循环图中;将来自文档的第二信息子集存储在第二有向非循环图中;将来自文档的第三信息子集存储在第三有向非循环图中,其中:第一信息子集、第二信息子集和第三信息子集的每个成对组合包含足够的冗余信息,使得如果不是相应成对组合的一部分的给定信息子集不可用,则给定信息子集可从相应的成对组合中检索,但不能从成对组合的各个成员中检索。
19.根据实施例1-18中任一项所述的介质,包括:将可变关系数据库的第一部分存储在数据结构中;并基于数据库提供企业应用程序。
21.一种方法,包括:根据实施例1-19中任一项所述的操作。
22.一种系统,包括:一个或多个处理器;以及存储器,其存储指令,其在由处理器执行时使处理器实现包括以下的操作:根据实施例1-19中任一项所述的操作。[A组结束]
参考以下列举的B组实施例将更好地理解本技术,其中参考编号的实施例涉及本组中的那些:
1.一种有形的非瞬时性的机器可读介质,其存储指令,当由一个或多个处理器执行时,实现包括以下的操作:用一个或多个处理器获得要保护的多个记录;用一个或多个处理器形成防篡改日志,该防篡改日志被配置成防止攻击者不可察觉地修改存储在防篡改日志中的多个记录中的任何一个,其中:防篡改日志包括在防篡改日志指定的条目序列中的不同时间按顺序添加到防篡改日志的多个条目;每个条目包括:区分条目的标识符,多个记录中的相应记录,相对于由防篡改日志指定的条目序列中的相应记录的先前连续记录的标识符,基于先前连续条目相对于由防篡改日志指定的条目序列中的相应记录的记录和加密散列值的加密散列值;通过基于未指定条目序列中的位置的值,防篡改日志中的给定条目的加密散列值与条目序列是序列不可知的;通过选择将哪种类型的参数输入到用于计算至少一些加密散列值的加密散列函数中来形成给定条目的加密散列值,从而排除指定序列中的位置的参数;并且用一个或多个处理器将防篡改日志存储在存储器中。
2.根据实施例1所述的介质,其中:所选择的参数类型排除由防篡改日志指定的条目的序列中的时间、日期和顺序;所选择的参数类型包括由防篡改日志记录的记录,其中多个记录是各自的实例;并且通过提供lambda函数来配置加密散列函数。
3.根据实施例2所述的介质,其中:所选择的参数类型基本上包括获得由防篡改系统记录的记录,其中多个记录是相应的实例。
4.根据实施例3所述的介质,其中:所选择的参数类型包括由防篡改系统记录的记录,其中多个记录是相应的实例。
5.根据实施例1-4中任一项所述的介质,其中选择将哪些类型的参数输入到加密散列函数中包括:确定加密散列函数或方法被指定为支持委托或继承的编程语言中的抽象函数或方法;并确定抽象类或方法的非抽象实现方式,该实现方式包括选择参数类型。
6.根据实施例1-5中任一项所述的介质,其中:每个记录是基于具有16个或更多节点的相应有向非循环图中的每个节点的属性的加密散列值。
7.根据实施例6所述的介质,其中:每个有向非循环图是二叉树;二叉树的叶节点存储由关系数据库中的占位符引用的值;并且每条记录都是基于数据库中占位符引用的值的加密散列值。
8.根据实施例1-7中任一项所述的介质,包括:将在给定条目处或附近的防篡改日志拆分成较新的防篡改日志和较旧的防篡改日志,其中较新的防篡改日志和较旧的防篡改日志两者中的加密散列值在拆分后对受保护的记录有效。
9.根据实施例8所述的介质,其中:执行拆分而不改变较新的防篡改日志或较旧的防篡改日志中的每个加密散列值。
10.根据实施例9所述的介质,其中:执行拆分而不改变较新的防篡改日志或较旧的防篡改日志中的任何加密散列值。
11.根据实施例8所述的介质,其中:拆分包括改变较新的防篡改日志中的条目之间的指针而不改变较新的防篡改日志中的加密散列值。
12.根据实施例8所述的介质,其中:操作包括确定防篡改日志的大小已经或将要超过阈值;并且响应于确定防篡改日志的大小已经或将超过阈值而进行拆分。
13.根据实施例1-12中任一项所述的介质,其中:由于基于未指定条目序列中的位置的值,防篡改日志中的每个条目的加密散列值对于条目序列是序列不可知。
14.根据实施例1-13中任一项所述的介质,其中:不同的加密散列函数实现方式用于不同条目的不同加密散列值。
15.根据实施例1-14中任一项所述的介质,其中:对于被配置成接受比加密散列函数的单向压缩函数更长的输入,重复包括加密散列函数,直到到达加密散列函数的输入的开始或结束部分为止:通过解析输入的剩余部分来获得解析部分,该剩余部分具有基于被配置成接受加密散列函数的单向压缩函数的输入长度和被配置成发出的单向压缩功能的输出长度之间的差确定的长度;将单向压缩函数的先前迭代的输出附加或预置到解析部分,以形成用于单向压缩函数的当前迭代的输入;并用单向压缩函数转换当前迭代的输入,以形成单向函数的输出。
16.根据实施例1-15中任一项所述的介质,其中:操作包括将数据库访问请求记录到防篡改日志,其中记录是基于记录的数据库访问请求。
17.根据实施例1-16中任一项所述的介质,其中:防篡改日志是防篡改日志集合的一部分,其存储超过100万个数据库值,每个数据库值分布在防篡改日志集合的多个中;防篡改日志集合的集合被配置成使数据库值在查询的100毫秒内可检索;配置防篡改日志集合的集合,使得数据库值的检索延迟根据nlog(n)进行缩放,其中n是防篡改日志集合中的数据库值的数量;并且操作包括基于与检索相关联的风险评估来限制对检索的响应。
18.根据实施例1-17中任一项所述的介质,包括:执行生成条目所基于的数据的应用程序;拦截从应用程序到数据库的写入请求,其中存储了条目所基于的数据;并且在写入请求中替换指针并使指针存储在数据库中以代替条目所基于的数据。
19.一种方法,包括:根据实施例1-18中任一项所述的操作。
20.一种系统,包括:一个或多个处理器;以及存储器,其存储指令,其在由处理器执行时使处理器实现包括以下的操作:根据实施例1-18中任一项所述的操作。[B组结束]
参考以下列举的C组实施例将更好地理解本技术,其中参考编号的实施例涉及本组中的那些:
1.一种改进被配置成访问给定数据存储库的应用程序的方法,以替换针对至少一些数据代替给定数据存储库访问异构组数据存储库,该方法包括:用计算设备从应用程序接收第一写入请求,请求经由网络将数据写入第一远程数据库,其中:第一写入请求指定要写入第一远程数据库中的第一字段的第一值;第一写入请求指定要写入第一远程数据库中的第二字段的第二值;第一写入请求符合数据库驱动程序的应用程序接口,该数据库驱动程序被配置成与第一远程数据库连接;并且数据库驱动程序和发出第一写入请求的至少部分应用程序在计算设备上执行的操作系统的同一实例中执行;用计算设备获得具有一个或多个规则的数据策略,通过该规则将值分类为较高安全性的值或较低安全性的值;用计算设备和一个或多个规则中的至少一个将第一值分类为较低安全性;用计算设备和一个或多个规则中的至少一个将第二值分类为较高安全性;响应于将第二值分类为较高安全性,通过以下方式从应用程序在所接收的第一写入请求中指定的目的地重新定向第二值:获得不显示第二值的第二值的唯一标识符;使第二个值存储在与第一远程数据库不同的第二远程数据库中;并用将唯一标识符映射到第二远程数据库中的第二值的条目更新索引;并且用计算设备形成到数据库驱动程序的一个或多个应用程序接口请求:(i)指示数据库驱动程序使第一远程数据库存储与第一字段相关联的第一值;并且(ii)指示数据库驱动程序使第一远程数据库存储与第二字段相关联的唯一标识符,其中对第一数据库具有完全访问权限的攻击者不能访问被分类为较高安全性的第二值,并且其中不修改应用程序的代码以代替第一远程数据库而与两个数据库连接。
2.根据实施例1所述的方法,其中:用在操作系统中注册的安全驱动程序作为应用程序被配置成调用的数据库驱动程序来执行接收第一写入请求;并且安全驱动程序为数据库驱动程序的应用程序接口实现应用程序接口包装。
3.根据实施例1-2中任一项所述的方法,其中:第一值和第二值对应于关系数据库的给定元组中的相同记录;给定元组包括主键值和一个或多个外键值;并且关系数据库由数据库驱动程序引起以将唯一标识符存储在给定元组中。
4.根据实施例1-3中任一项所述的方法,其中:索引将唯一标识符映射到第二远程数据库的多个不同复制实例的多个统一资源标识符。
5.根据实施例1-4中任一项所述的方法,其中:索引远离计算设备存储并由另一计算设备更新;并且从其它计算设备获得唯一标识符。
6.根据实施例1-5中任一项所述的方法,其中:唯一标识符包括基于第二值的加密散列值。
7.根据实施例6所述的方法,包括用以第二值作为输入的加密散列函数来计算加密散列值,其中:第二值比被配置成接受加密散列函数的单向压缩函数更长;并且加密散列函数包括重复执行的操作,直到达到第二值的开始或结束部分:通过解析第二值的剩余部分来获得解析部分,该剩余部分具有基于被配置成接受加密散列函数的单向压缩函数的输入长度和被配置成发出的单向压缩功能的输出长度之间的差确定的长度;将单向压缩函数的先前迭代的输出附加或预置到解析部分,以形成用于单向压缩函数的当前迭代的输入;并用单向压缩函数转换当前迭代的输入,以形成单向函数的输出。
8.根据实施例1-7中任一项所述的方法,包括:用计算设备从应用程序接收第二写入请求,第二写入请求请求将第三值与第二字段关联地写入第一远程数据库,其中第三值等于第二值;将第三值分类为较高安全性;在将第三值分类为较高安全性之后,指示数据库驱动程序使第一远程数据库将唯一标识符与第二字段关联地存储在两个不同的记录中,两个不同记录中的一个记录具有来自第一写入请求的数据而两个不同记录中的另一记录具有来自第二写入请求的数据。
9.根据实施例8所述的方法,其中操作包括在接收到所述第二写入请求之后:确定唯一标识符已经存在于索引中;并且响应于该确定,确定不将与第三值相对应的与现有条目不同的新条目添加到索引。
10.根据实施例1-9中任一项所述的方法,其中:第二数据库包括多个区块链;索引将唯一标识符映射到区块链中给定的一个区块链;第二值被分段成多个分段;并且多个分段中的不同分段存储在多个区块链中的不同区段链中。
11.根据实施例1-10中任一项所述的方法,包括:基于从应用程序到第一数据库而不是到第二数据库的查询,经由数据库驱动程序用计算设备接收查询响应;检测查询响应中的唯一标识符;用唯一标识从第二远程数据库获取第二值;形成修订的查询响应,其中唯一标识符被第一值替换;并将修改后的查询响应作为对查询的响应提供给应用程序。
12.根据实施例11所述的方法,其中:不向应用程序提供唯一标识符;该方法包括在用修订的查询响应中的第二值替换唯一标识符之前确定第二值是否响应于查询的标准。
13.根据实施例11所述的方法,包括:确定查询响应包括与第一远程数据库中的两个不同记录相关联的唯一标识符的两个实例,这两个记录分别包括第二值和第三值,第三值是与第二值相同;并从第二远程数据库中检索映射到第二值和第三值的单个值。
14.根据实施例11所述的方法,包括:确定在与应用程序相关联的读取请求中请求的数据的总量或者应用程序请求访问的凭证;并确定所请求的数据总量不超过阈值。
15.根据实施例14所述的方法,包括:在接收到另一个读取请求之后,确定在与应用程序相关联的读取请求中请求的更新的数据总量或者应用程序请求访问的凭证超过阈值;并且响应于该确定,延迟或阻止与另一个读取请求相关联的查询响应。
16.根据实施例1-15中任一项所述的方法,其中:具有一个或多个规则的数据策略包括基于被指定为较高安全性的字段的标准。
17.根据实施例1-16中任一项所述的方法,其中:具有一个或多个规则的数据策略包括基于指示较高安全性的值的正则表达式的标准。
18.一种方法,包括:根据实施例1-17中任一项所述的操作。
19.一种系统,包括:一个或多个处理器;存储器,其存储指令,其在由处理器执行时使处理器实现包括以下的操作:根据实施例1-17中任一项所述的操作。[C组结束]
参考以下列举的D组实施例将更好地理解本技术,其中参考编号的实施例涉及本组中的那些:
1.一种有形的非瞬时性的机器可读介质,其存储指令,当由一个或多个处理器执行时,实现包括以下的操作:用一个或多个处理器接收访问分布式数据存储区的请求,其中:请求是请求读取或写入与工作负载应用程序相关的内容单元;分布式数据存储区存储多个内容单元,每个内容单元分布在托管分布式数据存储区的不同数据子集的多个计算实体之间;多个计算实体中的每个计算实体对应于一个或多个不同计算设备的不同用户空间实例处的不同主机;并且每个内容单元需要来自多个计算实体的信息来读取相应的内容单元;当写入每个内容单元时,访问相应内容单元所需的信息的不同部分被写入多个计算实体中的不同计算实体,使得多个计算实体中没有一个存储访问相应内容单元所需的所有信息;用被配置成参与将来自多个计算实体的信息组合以访问内容单元的计算设备的一个或多个处理器使得在防篡改日志中的条目中记录请求,其中防篡改日志基于先前记录的条目定义一个或多个加密散列值序列;并且用一个或多个处理器将防篡改日志存储在存储器中。
2.根据实施例1所述的介质,操作包括:基于密码散列值序列中的至少一个序列与防篡改日志中的至少一些条目的一致性,确定防篡改日志是否证明对日志条目的篡改。
3.根据实施例2所述的介质,操作包括:基于请求以及在防篡改日志中记录的其它访问请求来确定风险度量;并将风险度量存储在存储器中。
4.根据实施例3所述的介质,操作包括:确定风险度量满足阈值;并且响应于该确定,延迟对后续访问请求的后续响应。
5.根据实施例3所述的介质,操作包括:确定风险度量满足阈值;并且响应于该确定,阻止对访问请求的后续响应。
6.根据实施例3所述的介质,操作包括:确定风险度量满足阈值;并且响应于该确定,禁用与该请求相关联的用户帐户。
7.根据实施例6所述的介质,其中禁用与该请求相关联的用户帐户包括:在活动会话期间禁用用户帐户,其中用户帐户通过该确定实时地被认证。
8.根据实施例1-7中任一项所述的介质,操作包括:在多个实体中选择存储于访问请求有关的给定内容单元的计算实体;从所选择的计算实体请求来自给定内容单元的信息的不同部分;并组合信息的不同部分以重新形成给定的内容单元。
9.根据实施例8所述的介质,其中:多个计算实体是多个不同子网上的不同计算设备,每个子网通过不同的防火墙与互联网分离;并且信息的不同部分与内容单元的不同分段有关或于内容单元的加密形式的密文以及密文可解密的加密密钥有关。
10.根据实施例1-9中任一项所述的介质,其中:防篡改日志存储通过其访问内容单元和记录的访问请求的信息。
11.根据实施例1-10中任一项所述的介质,其中:防篡改日志包括区块链,该区块链具有区块链的连续块和区块链的区块内的Merkle树之间的加密散列指针,该加密散列指针基于实现Merkle-散列函数的加密散列函数。
12.根据实施例11所述的介质,其中:确定区块链的分布式实例组之间的权威条目不需要来自实现该组实例中的每一个的计算设备的工作证明。
13.根据实施例1-12中任一项所述的介质,其中防篡改日志中的给定条目包括:具有凭证的用户帐户的标识符,通过该凭证请求执行对应的数据库访问操作的授权;并且对应数据库访问操作的时间戳。
14.根据实施例13所述的介质,其中给定条目还包括:数据库应用程序接口命令,通过该命令表达对应的访问操作。
15.根据实施例1-14中任一项所述的介质,其中:在条目中记录请求包括基于描述访问请求的时间的记录、与访问请求相关联的用户帐户,以及访问请求命令来记录加密散列值。
16.根据实施例15所述的介质,其中记录与加密散列值相关联地存储在防篡改日志中。
17.根据实施例15所述的介质,其中记录未存储在防篡改日志中,并且与基于记录的加密散列值的指针相关联地存储在与防篡改日志不同的数据存储库中。
18.根据实施例1-17中任一项所述的介质,包括:针对在防篡改日志中记录的历史条目训练机器学习算法;并且基于训练的机器学习算法确定后续访问请求是异常的。
19.一种方法,包括:根据实施例1-18中任一项所述的操作。
20.一种系统,包括:一个或多个处理器;存储器,其存储指令,其在由处理器执行时使处理器实现包括以下的操作:根据实施例1-18中任一项所述的操作。[D组结束]
参考以下列举的E组实施例将更好地理解本技术,其中参考编号的实施例涉及本组中的那些:
1.一种有形的非瞬时性的机器可读介质,其存储指令,当由一个或多个处理器执行时,实现包括以下的操作:用一个或多个处理器接收将文档的新版本写入防篡改的不可变数据存储库的请求,其中:防篡改的不可变数据存储库存储文档的先前版本;防篡改的不可变数据存储库存储多个其它文档的多个版本;并且防篡改的不可变数据存储库将文档的版本和其它文档存储在数据结构中,该数据结构使得先前存储的文档版本在计算上不可修改而不会使数据结构在内部验证不一致;在接收到请求之后,用一个或多个处理器确定文档的新版本与文档的先前版本不同;并且响应于确定文档的新版本与文档的先前版本不同,通过以下方式用一个或多个处理器存储文档的先前版本与文档的新版本之间的差异:获得来自防篡改的不可变数据存储库的文档的先前版本;确定一组改变,当对文档的先前版本进行改变时,通过将文档的新版本与文档的先前版本进行比较,将文档的先前版本转换为文档的新版本;将这组改变存储在防篡改的不可变数据存储库中,而无需在防篡改的不可变数据存储库中存储文档的新版本的完整副本;并且存储指向与该组改变相关联的文档的先前版本的指针,该指针直接或间接指示其中在防篡改的不可变数据存储库中获得该文档的先前版本,该先前版本是初始版本或一组差异。
2.根据实施例1所述的介质,其中:接收写入文档的新版本的请求包括从在计算设备上的操作系统中执行的工作负载应用程序接收对在计算设备上执行的文件系统驱动程序的请求;防篡改的不可变数据存储库不存储在计算设备上;计算设备的文件系统包括指向存储在防篡改的不可变数据存储库中的文档的指针;指针排列在分层目录数据结构中;指针似乎是在计算设备上执行的文件系统资源管理器工作负载应用程序中的文件;指针用文档的文件系统文件名标记;并且其中一个指针引用了防篡改的不可变数据存储库中文档的先前版本,并在文件系统中标记了文档的文件系统文件名。
3.根据实施例1-2中任一项所述的介质,其中:防篡改的不可变数据存储库包括区块链。
4.根据实施例1-3中任一项所述的介质,其中:防篡改的不可变数据储存库包括多个有向非循环图,其具有由加密散列指针基于存储在防篡改的不可变数据存储库中的文档版本定义的边缘。
5.根据实施例1-4中任一项所述的介质,其中确定文档的新版本与文档的先前版本不同包括:计算文档的新版本的散列摘要;访问存储在防篡改的不可变数据存储库之外的文档的先前版本的散列摘要;确定文档的新版本的散列摘要与文档的先前版本的散列摘要不同,其中在响应于写入请求检索来自防篡改的不可变数据存储库的文档的先前版本之前,确定文档的新版本与文档的先前版本不同。
6.根据实施例1-5中任一项所述的介质,其中获得文档的先前版本包括:检索文档的先前版本与先前版本之前的文档的另一版本之间的先前差异,先前差异包括另一组改变,该组改变将先前版本之前的文档的其它版本转换为文档的先前版本;访问与先前差异相关联的指针,该指针识别在防篡改的不可变数据存储库中先前版本之前的文档的另一版本的副本的位置;用指针检索先前版本之前的文档的其它版本;并将另一组改变应用于检索到的文档的其它版本,以形成文档的先前版本。
7.根据实施例1-6中任一项所述的介质,其中获得文档的先前版本包括:在三次或更多次迭代中迭代地通过三个或多个文档的先前版本,按顺序地应用先前组的改变,检索版本从最新版本开始直到达到初始版本,然后组合从文档的初始版本开始直到达到先前版本的版本以形成先前版本。
8.根据实施例7所述的介质,其中:三个或多个先前版本形成用于文档的版本图,该版本图包含对防篡改的不可变数据存储库的写入之间的文档的各组改变的序列。
9.根据实施例8所述的介质,其中:文档的三个或多个先前版本中的一个基于文档的三个或多个先前版本中的一个分支到不同文档中;并且在写入之后,防篡改的不可变数据存储库中的文档的两个当前版本共享先前版本的重叠子集。
10.根据实施例1-9中任一项所述的介质,其中:文档的版本图存储在防篡改的不可变数据存储库的验证图中,其中版本图的版本节点对应于防篡改的不可变数据存储库的连续写入之间的各组改变,并且版本图的边缘表示各组改变的序列。
11.根据实施例10所述的介质,其中:文档的版本图的节点具有存储在多个分段中的多个改变,该多个分段存储在分布在防篡改不可变数据存储库的多个验证图中的内容图的节点中。
12.根据实施例1-11中任一项所述的介质,其中确定该组改变包括:确定将文档的先前版本转换为文档的新版本所需的最小组改变。
13.根据实施例1-12中任一项所述的介质,其中该组改变基本上包括删除、改变和附加操作。
14.根据实施例12所述的介质,其中确定该组改变包括:将文档的新版本和文档的先前版本中的每一个的每一行散列到4字节或更少的相应散列摘要中并且比较散列摘要以识别已改变的行。
15.根据实施例1-14中任一项所述的介质,其中确定该组改变包括:找到文档的新版本与文档的先前版本之间的最长公共序列。
16.根据实施例1-15中任一项所述的介质,其中操作包括通过以下方式从防篡改的不可变数据存储库读取文档的新版本:通过从防篡改日志中沿着各组改变的链表检索各组改变序列中的每一个而从最新版本跟踪回来检索文档的初始版本;并且按顺序地应用这些改变,其中:数据存储库存储超过100,000个文档和超过100GB的数据;在与nlog(n)成比例或更快的延迟进行缩放的操作中,在不到200毫秒的时间内检索文档,其中n是防篡改的不可变数据存储库中的文档版本的数量;并且读取请求或写入请求记录在防篡改的不可变数据存储库或另一个防篡改的不可变数据存储库中。
17.根据实施例1-16中任一项所述的介质,其中操作包括:执行在企业网络上的计算设备内发出写入请求的工作负载应用程序,该企业网络被配置成访问多个企业工作负载应用程序。
18.一种方法,包括:根据实施例1-17中任一项所述的操作。
19.一种系统,包括:一个或多个处理器;存储器,其存储指令,其在由处理器执行时使处理器实现包括以下的操作:根据实施例1-17中任一项所述的操作。
[E组结束]
参考以下列出的F组实施例将更好地理解本技术,其中参考编号的实施例涉及本组中的那些:
1.一种有形的非瞬时性的机器可读介质,其存储指令,当由一个或多个处理器执行时,实现包括以下的操作:用一个或多个处理器接收一个或多个写入请求以将多个值写入关系数据库的一个或多个元组中的多个字段,该值中的不同值对应于该字段中的不同字段;用一个或多个处理器,基于对应于第一字段子集中的字段的第一值子集,选择第一值子集,将第一字段子集指定为比多个字段中的第二字段子集具较高安全性的字段;用一个或多个处理器将第一值子集中的第一值分段为多个分段,每个分段具有第一值中的信息子集,并且不同的分段具有第一值中的不同信息子集,写入请求具有将第一值写入给定元组的给定字段的指示;用一个或多个处理器经由网络指示第一计算设备将多个分段中的第一分段子集存储在存储器中;用一个或多个处理器经由网络指示第二计算设备将多个分段中的第二分段子集存储在存储器中,其中:第一计算设备不能访问第二分段子集;并且第二计算设备不能访问第一分段子集;并且用一个或多个处理器,使所述关系数据库存储所述第二值子集和指向所述分段中至少一些分段的一个或多个指针,其中:响应于一个或多个写入请求,不将第一值子集写入关系数据库;并且一个或多个指针与给定元组的给定字段相关联地存储在关系数据库中,一个或多个写入请求请求写入第一值。
2.根据实施例1所述的介质,其中:第一分段存储在第一计算设备处,指针指向第二分段;并且指针或与指针相关联的值指示第二分段存储在第二计算设备处,其中第二计算设备是存储第二分段的实例的多个计算设备中的一个。
3.根据实施例1-2中任一项所述的介质,其中:一个或多个指针是指向第一分段的单个指针,并指示所述第一分段存储在所述第一计算设备处或与指示第一分段存储在第一计算设备处的值相关联。
4.根据实施例1-3中任一项所述的介质,其中所述一个或多个指针包括:指向第一分段的第一指针,其指示所述第一分段存储在所述第一计算设备处或与指示第一分段存储在第一计算设备处的值相关联;以及指向第二分段的第二指针,其指示所述第二分段存储在所述第二计算设备处或与指示第二分段存储在第二计算设备处的值相关联。
5.根据实施例1-4中任一项所述的介质,其中:多个分段中的五个或多个分段存储在五个或更多个不同计算设备上;五个或更多个不同计算设备包括第一计算设备和第二计算设备;并且五个或更多个计算设备不存储或以其它方式访问五个或更多个分段中的至少三个。
6.根据实施例1-5中任一项所述的介质,其中:分段作为内容有向非循环图的内容节点存储在三个或更多个计算设备上,所述内容有向非循环图包括由从分段指向其它分段的指针定义的边缘。
7.根据实施例6所述的介质,其中:有向非循环图包括三个或更多个节点的链表。
8.根据实施例6-7中任一项所述的介质,其中:有向非循环图包括具有1,000个或更多个节点的跳表。
9.根据实施例6-8中任一项所述的介质,其中:有向非循环图包括二叉树。
10.根据实施例6-9中任一项所述的介质,其中:内容有向非循环图分布在多个验证有向非循环图中;验证有向非循环图各自包括由验证边链接的多个验证节点;验证有向非循环图各自存储不同的内容节点子集作为验证节点中不同验证节点的验证节点属性;验证有向非循环图的验证边缘至少部分地由在验证有向非循环图的验证节点之间链接的加密散列指针来定义;加密散列指针指示相应加密散列指针指向的相应验证节点的一个或多个验证节点属性是否已经通过基于相应加密散列指针指向的验证节点的一个或多个验证节点属性对加密散列值进行编码而被修改;并且至少一些验证节点的验证节点属性包括加密散列值。
11.根据实施例10所述的介质,其中:验证有向非循环图中的给定一个包括验证节点的链表,该验证节点具有指向验证节点的相应二叉树的指针;并且分段中给定的一个被存储为二叉树中给定的一个的叶验证节点的验证节点属性。
12.根据实施例10所述的介质,其中:每个验证有向非循环图包括验证节点的相应链表,其具有指向验证节点的相应二叉树的指针;并且内容有向非循环图是验证有向非循环图中的二叉树的叶验证节点之间的指针链表。
13.根据实施例10所述的介质,其中:加密散列是相应验证有向非循环图中的相邻验证节点的一个或多个属性的SHA-256散列。
14.根据实施例1-13中任一项所述的介质,包括:在应用程序查询关系数据库之后,从关系数据库接收包括一个或多个指针中的至少一些的查询响应;响应于接收到查询响应,确定至少一些查询响应存储在关系数据库之外;响应于该确定,基于一个或多个指针中的至少一些请求来自包括第一计算设备和第二计算设备的多个计算设备的多个分段;组合多个分段以形成第一值;形成查询响应的修订版本,其中一个或多个指针中的至少一些指针被第一值替换;并向应用程序提供查询响应的修订版本。
15.根据实施例14所述的介质,其中请求多个分段包括:请求由一个或多个指针中的至少一些识别的第一分段;接收第一分段和指向第二分段的第一相关指针;请求由第一相关指针指示的计算设备处的第二分段或与其相关联的值;接收第二分段和指向第三分段的第二相关指针;请求由第三相关分段指示的计算设备处的第三分段;并接收第三分段。
16.根据实施例14所述的介质,包括:确定从关系数据库请求数据的速率;并确定该速率超过阈值;并且响应于该确定,延迟向应用程序提供查询响应的修订版本的至少一部分。
17.根据实施例14所述的介质,其中:响应于写入请求,每个分段存储在三个或多个不同计算设备上;并且在接收到查询响应之后,基于确定由三个或多个不同计算设备中的大多数返回的给定分段的值来确定从三个或多个不同计算设备检索的给定分段的值。
18.根据实施例14所述的介质,包括:将描述至少部分查询或查询响应的记录写入区块链分类帐,该记录与引起查询的用户的标识符相关联。
19.一种方法,包括:根据实施例1-18中任一项所述的操作。
20.一种系统,包括:一个或多个处理器;存储器,其存储指令,其在由处理器执行时使处理器实现包括以下的操作:根据实施例1-18中任一项所述的操作。[F组结束]
Claims (15)
1.一种有形的非瞬时性机器可读介质,其存储指令,当由一个或多个处理器执行指令时,实现包括以下的操作:
用一个或多个处理器接收一个或多个写入请求以将多个值写入关系数据库的一个或多个元组中的多个字段,所述值中的不同值对应于所述字段中的不同字段;
基于对应于第一字段子集中的字段的第一值子集,用一个或多个处理器选择所述第一值子集,将所述第一字段子集指定为比所述多个字段中的第二字段子集具有较高安全性的字段;
用一个或多个处理器将所述第一值子集中的第一值分段为多个分段,每个分段具有所述第一值中的信息子集,并且不同的分段具有所述第一值中的不同信息子集,所述写入请求具有将所述第一值写入给定元组的给定字段的指示;
用一个或多个处理器经由网络指示第一计算没备将所述多个分段中的第一分段子集存储在存储器中;
用一个或多个处理器经由网络指示第二计算设备将所述多个分段中的第二分段子集存储在存储器中,其中:
所述第一计算设备不能访问所述第二分段子集;并且
所述第二计算设备不能访问所述第一分段子集;并且
用一个或多个处理器,使所述关系数据库存储所述第二值子集和指向所述分段中至少一些分段的一个或多个指针,其中:
响应于所述一个或多个写入请求,不将所述第一值子集写入所述关系数据库;并且
所述一个或多个指针与所述给定元组的所述给定字段相关联地存储在所述关系数据库中,其中所述一个或多个写入请求请求将所述第一值写入所述给定字段。
2.根据权利要求1所述的介质,其中:
所述第一分段存储在所述第一计算设备处,指针指向所述第二分段;并且
所述指针或与指针相关联的值指示所述第二分段存储在所述第二计算设备处,其中所述第二计算设备是存储所述第二分段的实例的多个计算设备中的一个。
3.根据权利要求1所述的介质,其中:
所述一个或多个指针是指向所述第一分段的单个指针,并指示所述第一分段存储在所述第一计算设备处或与指示所述第一分段存储在所述第一计算设备处的值相关联。
4.根据权利要求1所述的介质,其中所述一个或多个指针包括:
指向所述第一分段的第一指针,其指示所述第一分段存储在所述第一计算设备处或与指示所述第一分段存储在所述第一计算设备处的值相关联;以及
指向所述第二分段的第二指针,其指示所述第二分段存储在所述第二计算设备处或与指示所述第二分段存储在所述第二计算设备处的值相关联。
5.根据权利要求1所述的介质,其中:
所述多个分段中的五个或更多个分段存储在五个或更多个不同计算设备上;
所述五个或更多个不同计算设备包括所述第一计算设备和所述第二计算设备;并且
所述五个或更多个计算设备不存储所述五个或更多个分段中的至少三个或以其它方式访问所述五个或更多个分段中的至少三个。
6.根据权利要求1-5中任一项所述的介质,其中:
所述分段作为内容有向非循环图的内容节点存储在三个或更多个计算设备上,所述内容有向非循环图包括由从分段指向其它分段的指针定义的边缘。
7.根据权利要求6所述的介质,其中:
所述有向非循环图包括三个或更多个节点的链表;
所述有向非循环图包括具有1,000个或更多个节点的跳表;或者
所述有向非循环图包括二叉树。
8.根据权利要求6所述的介质,其中:
所述内容有向非循环图分布在多个验证有向非循环图中;
所述验证有向非循环图每个包括由验证边缘链接的多个验证节点;
所述验证有向非循环图每个存储不同的内容节点子集作为所述验证节点中不同验证节点的验证节点属性;
所述验证有向非循环图的验证边缘至少部分地由在所述验证有向非循环图的验证节点之间链接的加密散列指针来定义;并且
所述加密散列指针指示:相应加密散列指针指向的相应验证节点的一个或多个验证节点属性是否已经通过基于所述相应加密散列指针指向的所述验证节点的所述一个或多个验证节点属性对加密散列值进行编码而被修改;并且
至少一些所述验证节点的验证节点属性包括所述加密散列值。
9.根据权利要求8所述的介质,其中:
所述验证有向非循环图中给定的一个包括验证节点的链表,所述验证节点具有指向验证节点的相应二叉树的指针;并且
所述分段中给定的一个被存储为所述二叉树中给定的一个的叶验证节点的验证节点属性。
10.根据权利要求8所述的介质,其中:
所述验证有向非循环图中的每一个包括相应的验证节点的链表,所述验证节点具有指向验证节点的相应二叉树的指针;并且
所述内容有向非循环图是所述验证有向非循环图中的二叉树的叶验证节点之间的指针链表。
11.根据权利要求8所述的介质,其中:
所述加密散列是相应验证有向非循环图中相邻验证节点的一个或多个属性的SHA-256散列。
12.根据权利要求1至11中任一项所述的介质,包括:
在应用程序查询所述关系数据库之后,从所述关系数据库接收包括所述一个或多个指针中的至少一些的查询响应;
响应于接收到所述查询响应,确定至少一些所述查询响应存储在所述关系数据库之外;
响应于所述确定,基于所述一个或多个指针中的至少一些请求来自包括所述第一计算设备和所述第二计算设备的多个计算设备的所述多个分段;
组合所述多个分段以形成所述第一值;
形成所述查询响应的修订版本,其中所述一个或多个指针中的所述至少一些被所述第一值替换;并且
向所述应用提供所述查询响应的所述修订版本。
13.根据权利要求12所述的介质,其中请求所述多个分段包括:
请求由所述一个或多个指针中的所述至少一些识别的第一分段;
接收所述第一分段和指向第二分段的第一相关指针;
请求由所述第一相关指针指示的计算设备处的所述第二分段或与其相关联的值;
接收所述第二分段和指向第三分段的第二相关指针;
请求由所述第三相关分段指示的计算设备处的所述第三分段;并且
接收第三分段。
14.根据权利要求12所述的介质,其中:
响应于所述写入请求,每个分段存储在三个或更多个不同计算设备上;并且
在接收到所述查询响应之后,基于确定由所述三个或更多个不同计算设备中的大多数返回的给定分段的值来确定从所述三个或更多个不同计算设备检索的所述给定分段的所述值。
15.一种方法,包括:
根据权利要求1-14中任一项所述的操作。
Applications Claiming Priority (13)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662374271P | 2016-08-12 | 2016-08-12 | |
US201662374263P | 2016-08-12 | 2016-08-12 | |
US201662374293P | 2016-08-12 | 2016-08-12 | |
US201662374296P | 2016-08-12 | 2016-08-12 | |
US201662374307P | 2016-08-12 | 2016-08-12 | |
US201662374278P | 2016-08-12 | 2016-08-12 | |
US62/374,263 | 2016-08-12 | ||
US62/374,296 | 2016-08-12 | ||
US62/374,307 | 2016-08-12 | ||
US62/374,271 | 2016-08-12 | ||
US62/374,293 | 2016-08-12 | ||
US62/374,278 | 2016-08-12 | ||
PCT/US2017/046612 WO2018031940A1 (en) | 2016-08-12 | 2017-08-11 | Fragmenting data for the purposes of persistent storage across multiple immutable data structures |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109791594A true CN109791594A (zh) | 2019-05-21 |
CN109791594B CN109791594B (zh) | 2020-10-27 |
Family
ID=61163328
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780061575.6A Active CN109791594B (zh) | 2016-08-12 | 2017-08-11 | 在关系数据库上执行写入和存储操作的方法及可读介质 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP3485421B1 (zh) |
CN (1) | CN109791594B (zh) |
WO (1) | WO2018031940A1 (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108446376A (zh) * | 2018-03-16 | 2018-08-24 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
CN110309117A (zh) * | 2019-07-08 | 2019-10-08 | 匿名科技(重庆)集团有限公司 | 一种高可用区块链存储方法 |
CN110504002A (zh) * | 2019-08-01 | 2019-11-26 | 苏州浪潮智能科技有限公司 | 一种硬盘数据一致性测试方法与装置 |
CN110929276A (zh) * | 2019-11-14 | 2020-03-27 | 上海金桥信息股份有限公司 | 一种基于投票裁决的区块链数据屏蔽方法 |
CN111046000A (zh) * | 2019-12-24 | 2020-04-21 | 贵州大学 | 一种面向政府数据交换共享的安全监管元数据组织方法 |
CN111355715A (zh) * | 2020-02-21 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 待决议事件的处理方法、系统、装置、介质及电子设备 |
CN111444534A (zh) * | 2020-03-12 | 2020-07-24 | 中国建设银行股份有限公司 | 监测用户操作的方法、装置、设备和计算机可读介质 |
CN111459935A (zh) * | 2020-03-20 | 2020-07-28 | 深圳市芯链科技有限公司 | 物联网数据存储方法、存储系统、查询方法及存储介质 |
CN111767275A (zh) * | 2020-06-28 | 2020-10-13 | 北京林克富华技术开发有限公司 | 数据的处理方法及装置、数据处理系统 |
WO2020169124A3 (en) * | 2020-06-08 | 2021-04-01 | Alipay Labs (singapore) Pte. Ltd. | Distributed storage of custom clearance data |
CN113064870A (zh) * | 2021-03-22 | 2021-07-02 | 中国人民大学 | 一种基于压缩数据直接计算的大数据处理方法 |
CN113076161A (zh) * | 2021-04-08 | 2021-07-06 | 广州虎牙科技有限公司 | 一种页面显示方法、装置、存储介质及设备 |
CN113239190A (zh) * | 2021-04-27 | 2021-08-10 | 天九共享网络科技集团有限公司 | 文档分类方法、装置、存储介质及电子设备 |
CN113961568A (zh) * | 2021-12-22 | 2022-01-21 | 南京金宁汇科技有限公司 | 基于区块链的链式数据结构的区块快速查找方法 |
US11356270B2 (en) | 2020-06-08 | 2022-06-07 | Alipay Labs (singapore) Pte. Ltd. | Blockchain-based smart contract pools |
US11372695B2 (en) | 2020-06-08 | 2022-06-28 | Alipay Labs (singapore) Pte. Ltd. | Blockchain-based import custom clearance data processing |
US11418511B2 (en) | 2020-06-08 | 2022-08-16 | Alipay Labs (singapore) Pte. Ltd. | User management of blockchain-based custom clearance service platform |
US11416418B2 (en) | 2020-06-08 | 2022-08-16 | Alipay Labs (singapore) Pte. Ltd. | Managing user authorizations for blockchain-based custom clearance services |
US11436377B2 (en) * | 2020-06-26 | 2022-09-06 | Ncr Corporation | Secure workload image distribution and management |
US11449911B2 (en) | 2020-06-08 | 2022-09-20 | Alipay Labs (singapore) Pte. Ltd. | Blockchain-based document registration for custom clearance |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112019323B (zh) * | 2019-05-30 | 2024-05-03 | 深圳拓邦股份有限公司 | 数据加密、解密方法及装置、存储介质及电子设备 |
CN110275884B (zh) * | 2019-05-31 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 数据存储方法及节点 |
US11294875B2 (en) | 2019-05-31 | 2022-04-05 | Advanced New Technologies Co., Ltd. | Data storage on tree nodes |
CN110457922A (zh) * | 2019-08-02 | 2019-11-15 | 湖南大学 | 一种云环境下的数据完整性验证方法 |
US11343270B1 (en) | 2019-09-10 | 2022-05-24 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography optimization |
US11626983B1 (en) | 2019-09-10 | 2023-04-11 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography optimization |
US11240014B1 (en) | 2019-09-10 | 2022-02-01 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography optimization |
US11477016B1 (en) | 2019-09-10 | 2022-10-18 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography optimization |
JP7047133B2 (ja) | 2019-10-15 | 2022-04-04 | アリペイ (ハンジョウ) インフォメーション テクノロジー カンパニー リミテッド | 符号化ブロックチェーンデータのインデックス化および復元 |
US11533175B1 (en) | 2020-01-30 | 2022-12-20 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography on a smartcard |
US11322050B1 (en) | 2020-01-30 | 2022-05-03 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography optimization |
US11838410B1 (en) | 2020-01-30 | 2023-12-05 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography optimization |
US11449799B1 (en) | 2020-01-30 | 2022-09-20 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography optimization |
US11138159B1 (en) * | 2020-02-03 | 2021-10-05 | Architecture Technology Corporation | Database access gateway through distributed networks |
US11960993B2 (en) * | 2020-11-10 | 2024-04-16 | Equifax Inc. | Machine-learning techniques involving monotonic recurrent neural networks |
CN112579862B (zh) * | 2020-12-22 | 2022-06-14 | 福建江夏学院 | 基于MD5值比对的Xpath自动提取方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7080101B1 (en) * | 2000-12-01 | 2006-07-18 | Ncr Corp. | Method and apparatus for partitioning data for storage in a database |
US8504844B2 (en) * | 2008-12-19 | 2013-08-06 | Teradata Us, Inc. | System, method, and computer-readable medium for cryptographic key rotation in a database system |
US20140157439A1 (en) * | 2012-11-30 | 2014-06-05 | Leonid Ayzenshtat | Methods, apparatus, and articles of manufacture to encode auxilary data into relational database keys and methods, apparatus, and articles of manufacture to obtain encoded data from relational database keys |
CN103959302A (zh) * | 2011-06-01 | 2014-07-30 | 安全第一公司 | 用于安全分布式存储的系统与方法 |
CN104067216A (zh) * | 2011-06-27 | 2014-09-24 | 亚马逊科技公司 | 用于实施可扩展数据存储服务的系统和方法 |
CN104937556A (zh) * | 2013-01-30 | 2015-09-23 | 惠普发展公司,有限责任合伙企业 | 恢复数据库的页面 |
CN105303123A (zh) * | 2015-11-02 | 2016-02-03 | 山东大学 | 一种基于分块混淆的动态数据隐私保护系统及方法 |
CN105843879A (zh) * | 2016-03-21 | 2016-08-10 | 刘春阳 | 基于光盘的异构类型数据库存储系统及利用该系统的方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8027969B2 (en) * | 2005-12-29 | 2011-09-27 | Sap Ag | Efficient calculation of sets of distinct results in an information retrieval service |
WO2008109776A2 (en) * | 2007-03-06 | 2008-09-12 | Nitrosecurity, Inc. | Databases and database indexes |
US20130166502A1 (en) * | 2011-12-23 | 2013-06-27 | Stephen Gregory WALKAUSKAS | Segmented storage for database clustering |
US10324942B2 (en) * | 2013-07-26 | 2019-06-18 | Snap Inc. | Segment data visibility and management in a distributed database of time stamped records |
-
2017
- 2017-08-11 CN CN201780061575.6A patent/CN109791594B/zh active Active
- 2017-08-11 EP EP17840374.7A patent/EP3485421B1/en active Active
- 2017-08-11 WO PCT/US2017/046612 patent/WO2018031940A1/en unknown
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7080101B1 (en) * | 2000-12-01 | 2006-07-18 | Ncr Corp. | Method and apparatus for partitioning data for storage in a database |
US8504844B2 (en) * | 2008-12-19 | 2013-08-06 | Teradata Us, Inc. | System, method, and computer-readable medium for cryptographic key rotation in a database system |
CN103959302A (zh) * | 2011-06-01 | 2014-07-30 | 安全第一公司 | 用于安全分布式存储的系统与方法 |
CN104067216A (zh) * | 2011-06-27 | 2014-09-24 | 亚马逊科技公司 | 用于实施可扩展数据存储服务的系统和方法 |
US20140157439A1 (en) * | 2012-11-30 | 2014-06-05 | Leonid Ayzenshtat | Methods, apparatus, and articles of manufacture to encode auxilary data into relational database keys and methods, apparatus, and articles of manufacture to obtain encoded data from relational database keys |
CN104937556A (zh) * | 2013-01-30 | 2015-09-23 | 惠普发展公司,有限责任合伙企业 | 恢复数据库的页面 |
CN105303123A (zh) * | 2015-11-02 | 2016-02-03 | 山东大学 | 一种基于分块混淆的动态数据隐私保护系统及方法 |
CN105843879A (zh) * | 2016-03-21 | 2016-08-10 | 刘春阳 | 基于光盘的异构类型数据库存储系统及利用该系统的方法 |
Cited By (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108446376A (zh) * | 2018-03-16 | 2018-08-24 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
CN110309117A (zh) * | 2019-07-08 | 2019-10-08 | 匿名科技(重庆)集团有限公司 | 一种高可用区块链存储方法 |
CN110504002A (zh) * | 2019-08-01 | 2019-11-26 | 苏州浪潮智能科技有限公司 | 一种硬盘数据一致性测试方法与装置 |
CN110929276A (zh) * | 2019-11-14 | 2020-03-27 | 上海金桥信息股份有限公司 | 一种基于投票裁决的区块链数据屏蔽方法 |
CN110929276B (zh) * | 2019-11-14 | 2023-03-24 | 上海金桥信息股份有限公司 | 一种基于投票裁决的区块链数据屏蔽方法 |
CN111046000A (zh) * | 2019-12-24 | 2020-04-21 | 贵州大学 | 一种面向政府数据交换共享的安全监管元数据组织方法 |
CN111046000B (zh) * | 2019-12-24 | 2023-06-27 | 贵州大学 | 一种面向政府数据交换共享的安全监管元数据组织方法 |
CN111355715A (zh) * | 2020-02-21 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 待决议事件的处理方法、系统、装置、介质及电子设备 |
CN111444534A (zh) * | 2020-03-12 | 2020-07-24 | 中国建设银行股份有限公司 | 监测用户操作的方法、装置、设备和计算机可读介质 |
CN111459935A (zh) * | 2020-03-20 | 2020-07-28 | 深圳市芯链科技有限公司 | 物联网数据存储方法、存储系统、查询方法及存储介质 |
CN111459935B (zh) * | 2020-03-20 | 2023-09-22 | 深圳市芯链科技有限公司 | 物联网数据存储方法、存储系统、查询方法及存储介质 |
US11449911B2 (en) | 2020-06-08 | 2022-09-20 | Alipay Labs (singapore) Pte. Ltd. | Blockchain-based document registration for custom clearance |
US11418511B2 (en) | 2020-06-08 | 2022-08-16 | Alipay Labs (singapore) Pte. Ltd. | User management of blockchain-based custom clearance service platform |
WO2020169124A3 (en) * | 2020-06-08 | 2021-04-01 | Alipay Labs (singapore) Pte. Ltd. | Distributed storage of custom clearance data |
US11416418B2 (en) | 2020-06-08 | 2022-08-16 | Alipay Labs (singapore) Pte. Ltd. | Managing user authorizations for blockchain-based custom clearance services |
US11307775B2 (en) | 2020-06-08 | 2022-04-19 | Alipay Labs (singapore) Pte. Ltd. | Distributed storage of custom clearance data |
US11356270B2 (en) | 2020-06-08 | 2022-06-07 | Alipay Labs (singapore) Pte. Ltd. | Blockchain-based smart contract pools |
US11372695B2 (en) | 2020-06-08 | 2022-06-28 | Alipay Labs (singapore) Pte. Ltd. | Blockchain-based import custom clearance data processing |
US11436377B2 (en) * | 2020-06-26 | 2022-09-06 | Ncr Corporation | Secure workload image distribution and management |
CN111767275A (zh) * | 2020-06-28 | 2020-10-13 | 北京林克富华技术开发有限公司 | 数据的处理方法及装置、数据处理系统 |
CN111767275B (zh) * | 2020-06-28 | 2024-04-19 | 北京林克富华技术开发有限公司 | 数据的处理方法及装置、数据处理系统 |
CN113064870A (zh) * | 2021-03-22 | 2021-07-02 | 中国人民大学 | 一种基于压缩数据直接计算的大数据处理方法 |
CN113064870B (zh) * | 2021-03-22 | 2021-11-30 | 中国人民大学 | 一种基于压缩数据直接计算的大数据处理方法 |
CN113076161A (zh) * | 2021-04-08 | 2021-07-06 | 广州虎牙科技有限公司 | 一种页面显示方法、装置、存储介质及设备 |
CN113076161B (zh) * | 2021-04-08 | 2023-11-14 | 广州虎牙科技有限公司 | 一种页面显示方法、装置、存储介质及设备 |
CN113239190A (zh) * | 2021-04-27 | 2021-08-10 | 天九共享网络科技集团有限公司 | 文档分类方法、装置、存储介质及电子设备 |
CN113239190B (zh) * | 2021-04-27 | 2024-02-20 | 天九共享网络科技集团有限公司 | 文档分类方法、装置、存储介质及电子设备 |
CN113961568A (zh) * | 2021-12-22 | 2022-01-21 | 南京金宁汇科技有限公司 | 基于区块链的链式数据结构的区块快速查找方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3485421A4 (en) | 2019-07-03 |
CN109791594B (zh) | 2020-10-27 |
EP3485421B1 (en) | 2020-07-15 |
EP3485421A1 (en) | 2019-05-22 |
WO2018031940A1 (en) | 2018-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109791594A (zh) | 为了在多个不可变数据结构上持续存储而对数据进行分段 | |
US11611441B2 (en) | Decentralized database optimizations | |
US11265171B2 (en) | Using a tree structure to segment and distribute records across one or more decentralized, acyclic graphs of cryptographic hash pointers | |
US11947698B2 (en) | Fragmenting data for the purposes of persistent storage across multiple immutable data structures | |
US11934550B2 (en) | Replacing distinct data in a relational database with a distinct reference to that data and distinct de-referencing of database data | |
US10366247B2 (en) | Replacing distinct data in a relational database with a distinct reference to that data and distinct de-referencing of database data | |
US10075298B2 (en) | Generation of hash values within a blockchain | |
US10114970B2 (en) | Immutable logging of access requests to distributed file systems | |
US10121019B2 (en) | Storing differentials of files in a distributed blockchain | |
US20170364450A1 (en) | Immutable datastore for low-latency reading and writing of large data sets | |
US20170364699A1 (en) | Transparent client application to arbitrate data storage between mutable and immutable data repositories | |
CA3072719C (en) | Immutable datastore for low-latency reading and writing of large data sets | |
CN109964216A (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 |