CN117616507A - 为了完整性保护而使用散列树对分层数据结构中的数据进行编码 - Google Patents

为了完整性保护而使用散列树对分层数据结构中的数据进行编码 Download PDF

Info

Publication number
CN117616507A
CN117616507A CN202280048228.0A CN202280048228A CN117616507A CN 117616507 A CN117616507 A CN 117616507A CN 202280048228 A CN202280048228 A CN 202280048228A CN 117616507 A CN117616507 A CN 117616507A
Authority
CN
China
Prior art keywords
data
hash
tree
hash tree
data structure
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.)
Pending
Application number
CN202280048228.0A
Other languages
English (en)
Inventor
O·加西亚莫尔琼
Y·H·张
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips NV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips NV filed Critical Koninklijke Philips NV
Priority claimed from PCT/EP2022/068316 external-priority patent/WO2023280721A1/en
Publication of CN117616507A publication Critical patent/CN117616507A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Storage Device Security (AREA)

Abstract

一些实施例涉及数据结构。所述数据结构包括多个块以及第一散列树的部分。所述散列树是根据多个基因组块的多个散列值来计算的。所述第一散列树的部分至少包括所述第一散列树的前两个最高级别,但不包括所述第一散列树的一个或多个较低级别。

Description

为了完整性保护而使用散列树对分层数据结构中的数据进行 编码
技术领域
当前公开的主题涉及一种用于对数字数据结构中的基因组数据进行编码的编码系统、一种用于验证数字数据结构中的选定的基因组数据的验证系统、一种用于对数字数据结构中的基因组数据进行编码的编码方法、一种用于验证数字数据结构中的选定的基因组数据的验证方法、一种计算机可读介质。
背景技术
随着基因组数据的量不断增加,将这样的信息存储在适当的数据结构中是重要的。通过引用被包括在本文中的ISO/IEC 23092定义了用于编码、压缩和保护基因组数据的标准。具体地,ISO/IEC DIS23092-1,“Information technology—Genomic informationrepresentation—Part 1:Transport and storage of genomic information”(也通过引用被包括在本文中)定义了用于存储和/或流式传输基因组信息的数据结构。
已知的数据结构公开了一种分层数据结构,其中,可以存储与关于基因组数据的其他信息相关联的基因组数据,例如序列数据。例如,ISO/IEC DIS23092-1的表4公开了格式结构和分层封装级别。该表示出了针对各种类型数据的框及它们的可能的包含内容。
针对基因组数据的文件可能非常大。大小可以是数百吉字节或甚至太字节。常规的完整性度量将花费很长时间来计算这么多数据。
发明内容
具有允许更好的完整性控制的基因组数据的改进的数据结构将是有利的。例如,上文所提到的ISO/IEC 23092未描述将所有数据结构分组在一起的方式,这有效地提供文件的完整性的证明,特别是对于整个文件。考虑到完整性,向文件添加或移除数据结构,或更新基因组文件也是不可行的。没有跟踪文件如何更新或者谁对这些改变负责。长期保护基因组数据的完整性是有利的,因为它不仅与用户的医疗保健数据有关,而且与他/她的后代的医疗保健数据有关。出于该目的,在选择性数据组件上使用个体数字签名是不够的。例如,它不保护数据结构之间的关系。攻击者可能移除组件或改变其顺序。这些问题中的任一个值得个体解决。本文识别并解决了其他问题。
一些实施例涉及数字数据结构。数据结构包括多个基因组块和第一散列树的部分。散列树是根据多个基因组块的多个散列值来计算的。第一散列树的所包括的部分包括选定的节点子集,其可以是最高一个或多个级别的节点和第一散列树的选定数目的叶子的组合。应理解,第一散列树不需要是出现在数据结构中的第一散列树。
基因组数据是特别有利的应用,因为数据通常既大又有分层。然而,实施例可以应用于任何类型的数据,尤其是分层组织的数据。尽管许多实施例在基因组数据的背景下描述,但是本发明不限于基因组数据。
通常,散列树或Merkle树是树结构,其中,叶子节点中的每个包括数据的数据块的散列或从属容器的散列树的根,并且其中,非叶子节点包括下一较低级别中的节点上的散列;后者节点可以是叶子节点或非叶子节点。一种特殊类型的散列树是Verkle树;用于从其孩子计算内部节点(非叶子节点)的散列函数不是常规散列,而是向量承诺。实施例可以使用常规散列,特别是Merkle-类型散列函数(MD类型),诸如SHA家族,例如,SHA-3。Verkle类型树的叶子可以使用规则散列函数,例如,MD类型的。可以在Kuszmaul的论文“Verkle Trees”(Technical report;Massachusetts Institute of Technology:Cambridge,MA,USA,2018)中找到Verkle树的进一步的描述。多个基因组数据块可能已经被接收,例如,作为基因组数据的分区。例如,在实施例中,接收基因组数据,诸如基因组序列和/或其他基因组数据。基因组数据可能已经被划分成块,或者可能由编码系统划分成块。
通过包括顶部级别部分,维持快速验证或更新,但通过排除较低级别部分,减少存储大小。排除的较低级别部分可以是叶子的部分、所有叶子,或者甚至若干较低级别。
在实施例中,数据结构是分层数据结构。较高级别的块可以是指较低级别处的多个块。较高级别块可以包括在较低级别上计算的散列树的部分。这可能发生超过一次。例如,第一级别可以包括在第二较低级别处的块上计算的散列树的部分。第二级别可以包括在第三较低级别处的块上计算的散列树的部分,等等。第一级别可以包括在第二较低级别处的其他块上计算的另一散列树的部分。
数据结构或其部分可以被存储、检索、流式传输、接收、编码和验证。当流式传输数据结构时,排除的部分可以重新计算并包括在流式传输中。当流式传输数据结构时,流式传输可以仅包括所选定的基因组数据块和用于重新计算散列树的根所需的散列树的部分,而不访问非流式传输的数据。
在实施例中,散列树未完整存储。这也可能跨多个级别发生。有趣的是,第一级别包括针对第二较低级别的部分散列树,而第二级别也包含针对较低的第三级别的部分散列树。可以构建部分包括的散列树的分层。在实施例中,接收树参数。所包括的散列树的部分的大小由树参数确定。例如,所述树参数可以是要包括的级别的数目。在实施例中,树参数是至少2。
散列树的其他方面,例如,每个节点的孩子的数目、k元,也可以通过树参数来设定。
一方面是一种用于验证数据结构中的选定的数据的验证系统,例如,如由编码系统的实施例所编码的。验证可以通过验证散列树的根来完成。这通常是通过重新计算所述根来完成的。尽管对于更高级的散列树类型,例如,Verkle树,可以使用非对称算法。为了重新计算或以其他方式验证散列,所述散列树的部分可以从所述数据结构中检索,或者可以重新计算。例如,叶子值可能不存在,并且可能被重新计算。较低级别中的一些(或其部分)也可能在所述数据结构中不存在,并且也可能被重新计算。然而,一些散列值可能存在于所述数据结构中并且可以被检索。为了确定需要哪些值,人们可以识别从被选择用于验证的数据块开始到对应的散列树的根的路径。根的预计算和/或验证所需的沿着路径的散列树的散列值可以包括路径上的节点的值,但也可以包括路径中的节点的孩子。有趣的是,所述根可以是与被验证的数据块直接相关联的散列树的根,例如,在其叶子中包括数据块的散列值的散列树,例如,第一散列树,但是可以代替地(或者也可以)是分层更高的散列树(例如,第二散列树)的根。一旦已经重新计算了根,则可以将其与数据结构中的根进行比较。其他类型的验证包括在根上验证签名,或者像在Verkle树中那样执行向量承诺验证。
编码系统可以是可能在一个或多个电子设备中实施的电子系统。验证系统可以是可能在一个或多个电子设备中实施的电子系统。
另一方面是一种编码方法和验证方法。所述方法的实施例可以作为计算机实施的方法被实施在计算机上,或被实施在专用硬件中,或被实施在两者的组合中。针对该方法的实施例的可执行代码可以存储在计算机程序产品上。计算机程序产品的示例包括存储器设备、光学存储设备、集成电路、服务器、在线软件等。优选地,计算机程序产品包括存储在计算机可读介质上的非瞬态程序代码,以用于当所述程序产品在计算机上被运行时执行该方法的实施例。
在实施例中,所述计算机程序包括计算机程序代码,所述计算机程序代码适于当所述计算机程序在计算机上运行时执行所述方法的实施例的全部或部分步骤。优选地,计算机程序被实施在计算机可读介质上。
附图说明
将参考附图仅通过示例的方式描述另外的细节、方面和实施例。附图中的元件出于简单和清晰而被图示,并且不一定按比例绘制。在附图中,与已经描述的元件相对应的元件可以具有相同的附图标记。在附图中,
图1a示意性地示出了编码系统的实施例的示例,
图1b示意性地示出了验证系统的实施例的示例,
图2a示意性地示出了用于存储的编码数据格式的实施例的示例,
图2b示意性地示出了用于存储的编码数据格式的实施例的示例,
图2c示意性地示出了用于存储的编码数据格式的实施例的示例,
图3示意性地示出了分层散列树的实施例的示例,
图4示意性地示出了散列树的实施例的示例,
图5a示意性地示出了散列树的实施例的示例,
图5b示意性地示出了散列树的实施例的示例,
图6示意性地示出了用于流式传输或输送的编码消息的实施例的示例,
图7a示意性地示出了编码方法的实施例的示例,
图7b示意性地示出了验证方法的实施例的示例,
图8a示意性地示出了根据实施例的具有包括计算机程序的可写部分的计算机可读介质,
图8b示意性地示出了根据实施例的处理器系统的表示。
附图标记列表以下参考和缩写列表对应于图1a-3,并且被提供用于促进对附图的解释,并且不应被解释为限制权利要求。
110 编码系统
130 处理器系统
140 存储设备
150 通信接口
160 验证系统
170 处理器系统
180 存储设备
190 通信接口
200 编码系统
210 散列树单元
211-213 散列树编码
A、A1、…、A34 分层数据
220 存储单元
230 流式传输单元
240 验证单元
300 散列树
310 最高级别
311 第二最高级别
313 第三最高级别
320 叶子级别
330 选定的部分
1000 计算机可读介质
1010 可写部分
1020 计算机程序
1110 (一个或多个)集成电路
1120 处理单元
1122 存储器
1124 专用集成电路
1126 通信元件
1130 互连
1140 处理器系统
具体实施方式
尽管当前公开的主题容许许多不同形式的实施例,但是在附图中示出了一个或多个具体实施例并且将在本文中详细描述一个或多个具体实施例,应理解,本公开内容被认为是当前公开的主题的原理的示例,且并不旨在将其限于所示出和描述的具体实施例。
在下文中,为了便于理解,在操作中描述了实施例的元件。然而,将显而易见,相应的元件被布置为执行被描述为由它们执行的功能。
此外,当前公开的主题不仅限于实施例,而且包括本文所描述的或在相互不同的从属权利要求中记载的特征的每一个其他组合。
图1a示意性地示出了编码系统110的实施例的示例。图1b示意性地示出了验证系统160的实施例的示例。编码系统110包括处理器系统130、存储设备140和通信接口150。验证系统160包括处理器系统170、存储设备180和通信接口190。
例如,通信接口150可以包括被配置用于接收基因组数据的输入接口,该基因组数据例如为基因组序列和/或其他基因组数据。处理器系统130可以例如通过存储在存储设备140中的软件被配置为生成数据结构。数据结构包括多个基因组块和第一散列树的部分。应注意,代替于基因组数据,可以使用其他类型的数据,特别是其他分层数据。
例如,通信接口190可以包括被配置为接收数据结构的输入接口。处理器系统170可以被配置为利用所获得的数据结构中的第一散列树的最高级别来验证第一散列树的重新计算的根。
存储设备140和/或180可以包括在电子存储器中。存储设备可以包括非易失性存储设备。存储设备140和/或180可以包括非本地存储设备,例如,云存储。在后者情况下,存储设备可以被实施为到非本地存储设备的存储设备接口。
系统110和/或160可以通过计算机网络彼此、与外部存储设备、与输入设备、与输出设备和/或与一个或多个传感器进行通信。计算机网络可以是因特网、内联网、LAN、WLAN等。计算机网络可以是因特网。系统包括连接接口,其被布置为根据需要在系统内或系统外进行通信。例如,连接接口可以包括连接器,例如有线连接器,例如以太网连接器、光学连接器等,或者无线连接器,例如天线,例如Wi-Fi、4G或5G天线。传感器可以是用于从样本获得基因组测序数据的测序设备。
系统可以被配置用于数字通信,其可以包括例如接收基因组数据、存储数据结构、流式传输数据结构、获得例如接收或检索数据结构,例如以用于验证。
系统110和160的执行可以在处理器系统中实施,例如,一个或多个处理器电路,例如微处理器,其示例在本文中示出。附图和描述描述了可以是处理器系统的功能单元的功能单元。例如,图2a可以被用作处理器系统的可能功能组织的蓝图。(一个或多个)处理器电路未与这些附图中的单元分开示出。例如,附图中所示的功能单元可以全部或部分地实施在计算机指令中,该计算机指令存储在系统110和160处,例如在系统100和160的电子存储器中,并且可由系统110和系统160的微处理器执行。在混合实施例中,功能单元部分地在硬件中实施,例如作为协处理器,例如密码协处理器,并且部分地在系统110和160上存储和运行的软件中实现。
在系统110和160的各种实施例中,可以从各种备选方案中选择通信接口。例如,接口可以是到局域网或广域网(例如,因特网)的网络接口、到内部或外部数据存储设备的存储接口、键盘、应用接口(API)等。
系统110和160可以具有用户接口,其可以包括诸如一个或多个按钮、键盘、显示器、触摸屏等的公知的元件。用户接口可以被布置用于容纳用于配置系统、检索基因组数据、显示基因组数据、验证基因组数据等的用户交互。
存储设备可以实施为电子存储器(比如说闪存),或者磁存储器(比如说硬盘等)。存储设备可以包括一起组成存储设备140、180的多个分立的存储器。存储设备可以包括瞬态存储器,比如说RAM。存储设备可以是云存储。
系统110可以在单个设备中实施。系统160可以在单个设备中实施。通常,系统110和160各自包括运行存储在系统处的适当的软件的微处理器;例如,该软件可能已经被下载和/或存储在对应的存储器中,例如,诸如RAM的易失性存储器或者诸如闪存的非易失性存储器。备选地,系统可以全部或部分地在可编程逻辑中实施,例如,作为现场可编程门阵列(FPGA)。这些系统可以全部或部分地实施为所谓的专用集成电路(ASIC),例如,为其特定用途定制的集成电路(IC)。例如,电路可以用CMOS实施,例如,使用硬件描述语言,诸如Verilog、VHDL等。特别地,系统110和160可以包括用于密码函数的电路,诸如散列函数或签名。
处理器电路可以以分布式方式实施,例如,作为多个子处理器电路。存储设备可以分布在多个分布式子存储设备上。存储器的部分或全部可以是电子存储器、磁存储器等。例如,存储设备可以具有易失性和非易失性部分。存储设备的部分可能是只读的。
编码系统110可以被实现为单个设备或多个设备。验证系统160可以被实现为单个设备或多个设备。
图2a示意性地示出了编码系统200的实施例的示例。在图2a中示出了具有多个级别的分层数据结构。在最高级别处,单个数据块被示出为标记为A。在第二最高级别处,示出了多个块,在该示例中,示出三个数据块,标记为A1、A2和A3。在第二最高级别处的数据块中的两个数据块在其下面具有又进一步的分层级别。在第三最高级别处,示出了两个数据块序列:数据块A11、A12、直到A14从属于数据块A1;数据块A31、A32、直到A34从属于数据块A3。在分层数据结构中可能存在超过三个级别。在任何数据块下面可以存在超过四个从属块,例如,8个或更多、20个或更多等。
对于序列中的多个块,构建散列树。图2示出了散列树单元210。散列树单元可以是编码系统200的功能单元。散列树单元210被配置为构建针对数据块序列的散列树。散列树也称为Merkle树。散列树可以是二进制散列树。本文还示出了散列树的示例,例如,参考图3、图4和图5。
例如,诸如基因组数据的数据可以被分成多个基因组数据块的序列214。序列214被示出为具有3个块,但常常可以具有超过三个块,例如,甚至更多,例如,超过10个、超过100个等。除了基因组数据之外,多个块可以包括具有额外数据的额外数据块,例如,与基因组数据相关联的信息,例如,其起源、含义、目的等。在图2中示出了额外块A11、A12和基因组数据块A13直到A14;在图2中示出了额外块A31、A32和基因组数据块A33直到A34。
输入接口可以被配置用于接收基因组数据,例如以数据块的形式,但是也可以被配置为接收另外的数据项。例如,可以从组合在数据结构中的多个文件中检索另外的数据项和/或基因组数据。另外的数据项可以被分配给第一散列树的另外的叶子,例如,它们的散列值可以被包括在散列树的叶子中。
也称为Merkle树的散列树是一种树,其中,叶子节点用数据块的密码散列进行标记,并且每个非叶子节点用其孩子节点的标签的密码散列来进行标记。在这种情况下,在211处构建的散列树可以具有针对其叶子的块A11直到A14的散列。大多数节点通常将具有两个孩子,尽管一个或多个节点可能仅具有一个,例如,以考虑不是二次幂的块的数目。作为变型,散列树可以具有带有超过三个孩子的节点。
在序列A11-A14之上的数据结构的分层部分中,包括散列树的部分。例如,散列树单元210可以通过将散列函数至少应用于多个基因组数据块中的基因组数据来计算针对多个基因组块A13直到A14的多个散列值。散列函数优选地是密码强散列函数,例如,SHA-3。任选地,针对额外数据块,例如,块A11和A12,计算额外散列。散列树单元210为多个散列值计算第一散列树,从而将多个散列值分配给第一散列树的叶子。在实施例中,第一散列树具有至少三个级别。在实施例中,第一散列树具有至少四个叶子。
散列函数可能是正则散列函数,特别是Merkle-构造,包括单向压缩函数。散列树或Merkle树中的节点不一定是通过应用这样的散列函数来计算的。可以使用其他类型的指纹算法,诸如向量承诺,例如用于Verkle Trees,或者其他认证标签。可能存在多个数据块序列,包括多个基因组数据块序列。图2示出了这样的序列的第二示例:块A31-A34。类似于对于序列A11-A13,同样对于这些块,计算散列值并构建散列树。
有趣的是,对于为数据块序列计算的散列树所获得的散列树信息被包括在其之上分层的块中。例如,块A1在块A11-A14之上是分层的。散列树信息被包括在较高级别处的一个或多个块中。在示例中,块A1包括散列树信息HTA1。同样,在该示例中,块A3包括从由散列树单元210针对序列A31-A34计算的散列树获得的散列树信息HTA3。
在实施例中,散列树信息至少包括散列树的根,并且优选地还包括紧接在其下方的级别。例如,散列树信息可以包括散列树的两个最高级别。有趣的是,完整的散列树不包括在散列树信息中。排除了散列树的较大或较小部分。例如,在实施例中,从叶子开始的最低级别中的一个或多个可以从散列树信息中排除。排除散列树的部分减少了针对数据结构的存储或流式传输要求。如果需要它们,则排除的信息可以稍后重新计算,例如,为了验证,然而,由于这些级别接近叶子,它们是在相对少的信息上计算的。例如,为了重新计算叶子中的散列值,需要计算仅单个数据块上的散列。然而,为了重新计算,比如说,接近散列树的根的节点,可能需要在计算中包括更多的块。
在实施例中,较低级别散列树可以完全包括在数据结构中,而较低散列树的根被用于另外的散列树的叶子中。可以部分地包括另外的散列树,特别是可以省略包括较低散列树的根的叶子。而且,可以省略另外的散列树的其他部分,特别是较低或最低级别中的一个或多个。
通过包括接近顶部的级别,例如,至少前两个级别,尽管更多级别是可能的,但是计算时间减少最多,而通过排除接近底部的级别,存储要求减少最多。
构建散列树可以进行超过一次。例如,图2a示出了块A31-A34的序列的另一示例。散列树单元210可以被配置为计算针对块的散列值,计算散列树,并且包括树的部分,例如,第一数目的级别,比如说前两个级别,但是排除树的至少部分,例如,针对分层更高块的散列树信息中的最低或更低级别,在这种情况下是HTA3。
包括散列树信息的块,在这种情况下,块A1和A3可以专用于存储散列树信息。散列树信息可以连同其他信息一起被包括,例如,与分层较低和/或分层级别中的数据有关的信息。
构建散列树可以在多个级别处完成。例如,图2a示出了块序列的另一示例:A1-A3。块A1-A3在比块A11-A14和A31-A34更高的分层级别处。这些块中的一个、或多个或全部包含较低分层级别处的散列树的散列树信息;在这种情况下为块A1和A3。散列树单元213可以计算针对该序列中的块的散列值,构建散列树,并将散列树的部分(例如,顶部部分)包括在分层更高块中;在这种情况下为块A。散列树信息被标记为HTA。在该第二级别处可能存在多个序列,例如,序列B1、B2等(在图2a中未示出)。在块A的级别处可能存在多个块,例如,块B、C(在图2a中未示出)。
散列树信息可以在验证中用于验证用于计算散列树信息的信息的完整性。通常,在一个或多个散列树中包括更多数据使得可以验证更多数据是有利的;优选地,所有基因组信息被用于计算一个或多个散列树。然而,可能发生包括的数据不与其他数据一样敏感,例如参考数据、指令数据等。基因组的一些部分比其他部分显著地更敏感,例如所谓的垃圾DNA。由于基因组数据能够非常大,因此从完整性保护中排除数据可以显著地加速数据结构的验证。在实施例中,多个基因组块的部分被标记为受完整性保护,并且多个基因组块的部分被标记为不受完整性保护,仅被标记为受完整性保护的部分被包括在第一散列树中。
散列树允许检测计算散列树的数据中的修正。有趣的是,散列树允许对数据进行选择性验证。例如,对于部分验证,重新计算散列树,只要它取决于为重新计算所选择的块,并且只要散列树中的散列值从存储设备中排除,同时使用仅取决于未选择的数据块的散列树中的所存储的散列值。
然而,散列树单独并不防止恶意改变。例如,恶意改变可能改变数据并重新计算和替换所有散列树。为了避免这一点,编码系统可以被配置为在散列树的根上计算数字签名,并将数字签名包括在数据结构中。图2a示出了这一点的示例。块A包括针对块A1-A3的散列树信息,以及散列树信息上的签名。为了减少计算,可以不在整个散列树信息上计算签名,而仅在散列树的根上计算签名。
在实施例中,一个或多个或所有基因组块以压缩形式被存储。例如,块A13-A14或块A33-A34中的一个、或多个、或全部可以被压缩。为了帮助完整性保护,可以在额外散列值上计算散列树:在未压缩块上计算的散列值以及在压缩块上计算的散列值。
在实施例中,一个或多个或所有基因组块以压缩和加密形式存储。通常,基因组块在加密块之前进行压缩。例如,块A13-A14或块A33-A34中的一个、或多个、或全部可以被压缩,并且然后被加密。为了帮助完整性保护,散列树可以在额外散列值上计算:在未压缩和未加密块上计算的散列值、在压缩和未加密块上计算的散列值,以及在压缩和加密块上计算的散列值。这些是任选的增强,实施例可以仅包括比如说压缩和加密块上的散列值,或者比如说仅未压缩和未加密块上的散列值。
散列树的另一优点在于,如果仅修正(例如修改)选定的块,则可以通过使用散列树中为未修改的块计算和存储的散列值来快速重新计算散列树。如果使用了一个或多个签名,那么也可以重新计算它们。
在实施例中,设备可以保持跟踪这样的修改。例如,可以接收针对基因组数据的修改,例如,包括添加、删除和/或修正中的一项或多项的修改。比如说,可以全部或部分地重新计算一个或多个散列树,并且可以在存储设备中更新该树。有趣的是,修改可以作为额外块存储。当使用基因组数据时,可以应用修改。修改可以包括在额外块中,该额外块可以在新的散列树中使用或者可以包括在现有散列树中。这具有可以跟踪对基因组数据的修改的优点。
对基因组数据的修改可以例如包括对元数据的修改。对基因组数据的修改可以例如包括对基因组序列数据的修改。对基因组数据的修改可以例如包括新的数据,包括新的元数据。可以应用对数据结构的修改,并且可以重新计算依赖于该修改的(例如,从经修改的部分计算的)散列树的任何部分。另外,或者代替地,修改本身可以记录在数据结构中,例如,以帮助可说明性。修改可以存储在新的数据块中。叶子级别的新数据块也可以避免散列树的大部分被重新计算。例如,如果在修改之前存在块1到100,那么修改可以被放置在块101中。有利地,修改被放置在末尾的块中,使得散列树的大部分可以被重新使用,而无需重新计算。在这种情况下,可以重复使用块1和块2上的散列、块3和块4上的散列等。这也在更高级别处工作,依赖于下一级别上的块1-4的散列也可以在该示例中重新使用,等等。当读出数据时,可以在数据中需要之处应用块101中的修改。
在系统200中构建的数据结构可以以各种方式使用。
例如,系统200可以包括存储单元220。存储单元220可以被配置为将数据结构写入到计算机可读介质,例如非瞬态计算机可读介质。
例如,系统200可以包括流式传输单元230。流式传输单元230可以被配置为在计算机可读介质(例如,瞬态计算机可读介质)上流式传输数据结构或其部分。例如,可以通过计算机网络进行流式传输。
图2b和图2c示意性地示出了存储的编码的实施例的示例。这些示例也可以用于流式传输,尽管在流式传输中人们可以选择排除数据结构的部分。例如,在流式传输中,编码设备可以接收参数指示的数据结构的选定的部分。编码设备然后可以仅流式传输选定的部分,任选地还流式传输在选定的部分之上分层的块。例如,在流式传输中,编码设备可以计算未存储的散列树的那部分,并将它们包括在流式传输中。例如,如果传送设备在计算上更强,则这可以加速接收设备处的验证。
存在许多可以使分层数据结构线性化以进行存储和/或流式传输的方式。例如,可以在具有指针或标签等的块中指示分层关系。块可以以各种顺序写入。图2b示出了其中块被深度优先写出的示例。图2c示出了其中块被宽度优先写出的示例。
在实施例中,编码系统被配置用于流式传输数据结构或其部分。在流式传输完整性保护的数据块时,输送消息可以被包括在流中,例如在流的开始处。输送消息可以包括:
-散列树的一个或分层的总体签名,以及
-用于计算从所输送的一个或多个节点开始到总根的一个或多个路径中的节点所要求的所有散列节点,使得在接收端接收到所输送的数据块时可以立即执行完整性验证。
返回到图2a。例如,系统200可以包括验证单元240。验证单元240可以被配置为验证数据结构或其部分。例如,验证单元240可以验证诸如图2b或2c中存储或流式传输的数据结构。验证可能需要所有完整性数据的验证。例如,可以重新计算所存储的(一个或多个)散列树的所有部分,并且可以将重新计算的部分与存储的部分进行比较。完整性验证还可以包括对签名的验证。有趣的是,验证也可以应用于数据结构的选定的部分。例如,验证单元可以通过将散列函数至少应用于所选定的基因组数据块中的基因组数据来重新计算数据结构中的多个基因组块的选定的部分的多个散列值,并且根据重新计算的多个散列值重新计算第一散列树的根,该第一散列树用于所选定的部分多个基因组块,并且根据针对未选择的部分多个基因组块的所包括的第一散列树的级别。
散列树可以被重新计算,只要它取决于被选择用于验证的块,并且只要散列树中的散列值从存储设备中排除。对于未被选择并且散列值可用的块的部分,然后可以使用来自存储/流式传输的散列树的散列值。
验证可以在客户端-服务器验证系统中进行,其中,整个数据结构被存储在服务器处,并且要验证的数据块在执行验证的客户端处可用。例如,在实施例中,可以使用以下验证过程;注意,顺序可能不同。
1.客户端通知服务器要验证的数据结构中的数据块的(一个或多个)ID。
2.服务器识别从与正被验证的数据块相关联的节点开始到散列树的一个或分层的总根的(一个或多个)路径,
3.服务器识别用于计算在第2部分中识别的(一个或多个)路径中的节点所要求的数据块或容器,
4.服务器检索(如果可用的话)或计算与第3部分中识别的数据块或容器相关联的散列节点,
5.服务器将在第4部分中计算的检索/计算的散列节点传送到客户端。
6.客户端通过将散列函数应用于所选定的数据块来为被选择用于数据完整性验证的数据结构中的数据块计算多个散列值。
7.客户端根据所计算的正被验证的数据块的多个散列值(第6部分)和从服务器接收的计算/检索的散列节点(第5部分)重新计算(一个或多个)散列树的分层的总根,该散列节点是用于沿着通向总根的(一个或多个)路径计算节点所要求的。
8.客户端验证在所获得的数据结构中的散列树的一个或分层的顶部的重新计算的总根。
图3示意性地示出了散列树300的实施例的示例。散列树(诸如在图3中的)可以用于散列树计算211、212、213等等。散列树具有多个级别。最高级别310具有单个节点,即散列树的根。第二最高级别311包含至少两个节点。在实施例中,级别311的两个节点被包括在存储器中。图3中还示出了第三最高级别312和叶子级别320,例如,最低级别。树的选定的部分被存储在数据结构中。图3示出了用于存储的所选定的部分330。选定的部分330可以包括前两个级别。选定的部分330可以包括多于最高的两个级别。选定的部分330可以包括级别的部分。例如,第三最高级别的部分。
在实施例中,可以在编码期间使用例如在输入接口处接收的树参数,例如,树大小参数。树大小参数可以指示散列树的多少要被存储在数据结构中。树大小参数可以指示散列树的较大部分要被存储;树大小参数可以指示散列树的较小部分要被存储。以这种方式,用户可以指示是否要优化针对选定的部分的文件大小或验证速度。
对应的验证系统,例如,验证系统160,可以类似于编码系统110和/或编码系统200工作。验证系统可以在终端用户的级别上工作,但也可以在中间的级别处工作,例如,数据结构的源与数据结构的终端用户之间的服务器处。验证可以在服务器处以及在终端用户的设备处完成。
例如,验证系统可以包括被配置用于接收数字数据结构的至少部分的输入接口,数据结构包括多个基因组块和第一散列树的部分,其包括第一散列树的前两个最高级别,但不包括第一散列树的一个或多个较低级别。注意,验证系统不需要接收如由编码设备生成的整个数据结构。例如,可以仅接收数据结构中的基因组数据块的部分,例如,仅接收当前感兴趣的数据块。验证设备也不需要接收所有的散列树。例如,仅依赖于未被发送和接收的数据块的散列树的部分可以通过仅传送仅取决于未接收到的数据的散列树的最高级别上的散列值来概括。例如,如果未接收到块1-4,那么需要块1-4的散列,而不是取决于块1和2或块3和4的散列。假设接收到块5,那么取决于块1-4的散列对于块1-4来说是足够的信息,以在散列树根上验证签名。换句话说,如果特定散列树节点仅取决于未被接收的块,那么不需要发送或接收所述特定散列树节点以下的散列树节点,也就是说,特定散列树节点所取决于的散列树节点。如果发送特定散列树节点所取决于的更高散列树节点,并且该更高节点也仅取决于未发送的数据块,则甚至可能不需要特定的散列树节点。但是,这是任选的,人们可以传送迄今为止其在数据结构中可用的完整散列树。例如,接收到的散列树可以包括多个较高级别中的全部,并且省略多个较低级别中的全部。
使用所获得的基因组数据块,例如接收基因组数据块和所接收的散列树的部分,重新计算散列树的根。对于取决于接收到的块的散列树的那些部分,可以重新计算散列值,对于取决于未接收到的块的散列值,可以使用接收到的散列值。可以将重新计算的散列树节点,特别是散列树根与接收到的散列树节点进行比较。此外,如果在散列树根上存在签名,则也可以对其进行验证。如果在散列值和/或签名中发现差异,则可以进行适当的错误处理,例如,可以向用户报告错误,可以拒绝文件等。
代替于验证所有接收到的基因组数据块,相同的方法可以被用于验证接收到的基因组数据块的部分。
下文说明了若干进一步的任选的细化、细节和实施例。以下实施例通常可以应用于启用基因组文件或大数据文件的长期完整性保护。在ISO/IEC 23092的背景下描述了实施例。ISO/IEC 23092定义了用于编码、压缩和保护基因组数据的标准。实施例在该背景下是有利的,然而,实施例也可以在该背景之外应用。
在当前MPEG-G安全解决方案ISO/IEC FDIS23092-3:2019(E)中,存在若干安全问题:
●不存在覆盖总体MPEG-G文件的签名。
●不存在检查数据集组的总体完整性的签名。在7.4.2中,保护rfmd、dgmd和dtpr框。然而,不保护其他框,例如,dtcn、dghd、rfgn、labl和lbll。
●签名可以保护包含基因组数据的访问单元的集合,或包含功能数据的其他较低级别数据结构,解析为值字段的字节(在ISO/IEC 23092-1:2019,6.3中定义)。然而,如果它是访问单元的集合,则这可以包括多达2^32个访问单元,其中,它们中的每个包括多达256个块。这使难以在不必对相同集合中受保护的其他访问单元进行计算的情况下检查选定的访问单元的随机访问的有效性。
●在数据结构由数字签名选择性地和个体地保护的情况下,当前解决方案通常不能防止由入侵者对数据结构的未授权的添加、移除或重新排序。
●未指定验证数据结构属于给定文件的过程。未指定如何验证两个数据结构一起属于相同文件的部分。
●实施例解决了这些问题中的一个或多个。包括以下各项中的一项或多项:
●问题1:当前MPEG-G解决方案将数字签名应用于个体数据结构(或容器)。但是,没有方法有效地对所有元素进行分组,提供整个文件的完整性的证明。优选地,这是在保持随机访问时以低开销实现的。
●问题2:基因组数据可能被压缩和解压缩,也可能被加密和解密。压缩算法和新的软件实施方式可能容易出现软件缺陷和/或设计错误。因此,需要允许验证加密压缩数据(ECD)、明文压缩数据(PCD)和明文解压缩数据(PDD)的完整性和正确性。
●问题3:更新基因组文件。针对数据文件完整性验证的结构优选地使能该需要。
●问题4:更新基因组文件。针对数据文件完整性验证的结构优选地使能跟踪改变以及针对那些改变的可说明性。
●问题5:数据集组ID非常短(8位)。这使具有允许一些用例(诸如合并或检索)的唯一标识符不可行。
实施例提出利用Merkle树的分层来增强基因组文件,诸如MPEG-G文件,其中,每个Merkle树被绑定到文件中的数据结构,从而允许:
●将文件的所有或选定的数据结构作为一个整体的长期完整性保护,具有低存储和计算开销,而不阻碍随机访问。这允许在任何级别处(包括数据集组处)有效验证数据结构,并将所有数据结构链接在一起。
●基因组数据在加密和压缩、压缩和解压缩时的完整性保护。
●可追溯性和可说明性
●与当前解决方案相比较的改进的性能
长期在上述第一项目符号中被突出显示的原因在于,基因组信息对于用户和他/她的亲属的健康相关。这意味着基因组信息优选地不仅在用户的寿命期间,而且在他/她的孩子和孙子的寿命期间保持机密和私有。当前MPEG-G解决方案依赖于常规数字签名,其不是抗量子的,并且其可能在可预见的时间内被破坏。解决该问题的一个选项是利用抗量子签名替换现有的数字签名,然而,抗量子签名比ECDSA更笨重且更慢。因此,这将导致较低效率的解决方案,该解决方案要求针对完整性保护下的每个数据结构的个体签名。所提出的解决方案依赖于Merkle树(基于散列函数),并且因此是一种长期确保完整性的自然解决方案,其中添加了仅树的根需要被签名的益处。
该提出的方法不妨碍随机访问的原因在于,可能访问容器并检索所要求的MT节点,以验证容器中的数据尚未修正,并且容器是总体文件的部分,而不必访问整个文件中的数据。
虽然在参考数据结构的其特定分层的MPEG-G标准的背景下描述了实施例,但是大多数特征和功能通常适用于将数据组织成个体组件的任何数据格式。实施例对于处理被分割并存储到较小数据单元的分层中的大量数据是特别有益的。
以下描述了多个实施例,每个实施例建立在先前的实施例上,例如,实施例2建立在实施例1上,实施例3建立在实施例2上,等等。实施例1、2、3、4和5分别解决了前述问题1、2、3、4、5。存在总共14个实施例。
此外,在呈现实施例之后,描述实施例如何与备选解决方案进行比较,以及实施例可以如何应用于GA4GH安全解决方案以保护文件完整性。
实施例1
该实施例解决了问题1。它将MPEG-G文件中的分层数据结构(或容器)与Merkle树(MT)相关联。通常,较高级别处的容器封装较低级别处的数据结构。由于MPEG-G文件中的数据结构以分层方式组织,因此较低级别处的MT的根用作较高级别处的MT的叶子。
在该实施例中,描述了Merkle树的五个级别{1、2、3、4、5}。最低级别是1,并且最高级别是5。在每个级别处,Merkle树的根是通过对以预定义顺序(诸如存储叶子数据的顺序)连结的树的选定的叶子散列码进行散列处理来获得的。Hash()指代生成括号中指定的数据结构的散列码的函数。
●级别1(MT_AU;MT_DS):是指MPEG-G文件中的访问单元(AU)和描述符流(DS)级别处的MT。
○每个访问单元形成Merkle树,其叶子可以包括:
■Hash(AU标头),
■Hash(AU信息),
■Hash(AU保护),以及
■针对访问单元中的每个数据块的Hash(块)。
通常,叶子可以包括ISO/IEC DIS23092-1的表25中定义的AU容器中的所有元素或元素的子集。每个访问单元MT的根被指代为MTR_AU。
○每个描述符流形成Merkle树,其叶子可以包括:
■Hash(DS标头),
■Hash(DS保护),以及
■针对描述符流中的每个块的Hash(块)。
通常,叶子可以包括ISO/IEC DIS23092-1的表32中定义的DS容器中的所有元素或元素的子集。每个描述符流MT的根被指代为MTR_DS。
●级别2-a:是指MPEG-G文件中的属性组(AG)级别处的MT。
○每个属性组形成Merkle树,其叶子可以包括:
■Hash(AG标头)
■一个或多个MTR_AU
通常,叶子可以是ISO/IEC DIS23092-6中定义的属性组容器中的所有元素或元素的子集。
○每个属性组MT的根被指代为MTR_AG。
级别2-b:是指MPEG-G文件中的注释表(AT)级别处的MT。
○每个注释表形成Merkle树,其叶子可以包括:
■Hash(AT标头)
■Hash(AT元数据)
■Hash(AT保护)
■一个或多个MTR_AG
通常,叶子可以是ISO/IEC DIS23092-6中定义的注释表容器中的所有元素或元素的子集。
○每个注释表MT的根被指代为MTR_AT。
●级别3(MT_DT):是指MPEG-G文件中的数据集(DT)级别处的MT。
○每个数据集形成Merkel树,其叶子可以包括:
■Hash(数据集标头)
■Hash(数据集元数据)
■Hash(数据集保护)
■Hash(数据集参数集)
■Hash(主索引表)
■一个或多个MTR_AU/MTR_DS/MTR_AT
通常,叶子可以是ISO/IEC DIS23092-1的表19中定义的数据集容器中的所有元素或元素的子集。
○每个数据集MT的根被指代为MTR_DT。
●级别4(MT_DSG):是指MPEG-G文件中的数据集组(DG)级别处的MT。
○每个数据集组形成MT,其叶子可以包括:
■Hash(DG标头)
■Hash(参考)
■Hash(参考元数据)
■Hash(标签列表)
■Hash(DG元数据)
■Hash(DG保护)
■一个或多个MTR_DT
通常,叶子可以是ISO/IEC DIS23092-1的表9中定义的数据集组容器中的所有元素或元素的子集。
●每个数据集组MT的根被指代为MTR_DG。
●级别5(MT_MPEGG):是指MPEG-G文件顶部的MT,其将多个数据集组放在一起。
○文件级别处的MT可以包括叶子,其包括:
■Hash(文件标头)
■一个或多个MTR_DG
○文件级别处的MT的根被指代为MTR_MPEGG。
○在文件级别处,引入了新的Merkle树完整性数据容器(mtid)以用于存储用于验证文件完整性的MT数据。mtid框可以直接放置在文件标头(flhd)之后,或者放置在文件的末尾,以便于更新。
○在其最小形式中,mtid框包含总根MTR_MPEGG上的签名和签名者的ID,该签名者可以是文件所有者或管理者。
○签名是用函数Sign(PrivK,MTR_MPEGG)生成的,其中,PrivK是签名者的私钥,具有由证书颁发机构(CA)签名的相关联的公钥证书作为身份的证明。
虽然在该实施例中使用了五个级别的MT,但是级别的数目不限于五个。它可以增加以容纳引入到MPEG-G标准中的容器的额外级别,或者减少以用于具有容器的较少级别的文件格式。
假设二进制Merkle树被用于从叶子计算根,在美国专利US 4309569“Method ofproviding digital signatures”中描述了验证叶子的方式。
该过程在图4中图示,其中,示例Merkle树具有四个叶子:通过分别对四个数据元素D0、D1、D2和D3进行散列处理生成的L0、L1、L2和L3,其针对总体完整性被保护。三者具有最高级别410、第二最高级别420、叶子级别430和数据440。
例如,D0可以是具有和ID的AU,D1可以是元数据,并且D2-D3可以是基因组数据块。注意,为了仅传送虚线块,在输送模式中,也可以传送其他虚线节点,以允许重新计算根节点。还可以传送根节点或根节点上的签名N0-3,以允许验证重新计算的根值。
树包括两个内部节点N0-1和N2-3以及根N0-3。为了验证数据元素D1,例如,公开了叶子L0和中间节点N2-3。给定数据元素D1,将L1计算为Hash(D1)是可能的。利用L0和L1,将N0-1计算为Hash(L0|L1)是可能的;利用N0-1和N2-3,将公共根N0-3计算为Hash(N0-1|N2-3)是可能的。
注意,对应于MPEG-G中的数据结构的个体Merkle树的级别与二进制Merkle树内的内部节点的级别之间存在差异。外部Merkle树级别的范围从与访问单元或描述符流相关联的最低级别到与顶部级别数据容器(诸如数据集组)相关联的最高级别。在具有2^n个数据元素的二进制Merkle树的情况下,在最低级别处,二进制Merkle树具有2^n个叶子,这些叶子是通过对2^n数据元素独立地进行散列处理生成的,并且然后二进制Merkle树具有n个级别的中间节点。在每个级别l处,其中l=1,…,n,节点的数目由2^(n-l)给出。二进制Merkle树的根节点在级别n处。
当构建二进制Merkle树时,对于特定级别处的奇数个叶子或节点,可以将最后一个叶子或节点与自己连结起来。考虑具有叶子A、B、C、D和E的五节点示例。过程如下:
●叶子级别:存在5个叶子,A和B通向节点AB,C和D通向节点CD。E是单个的,因此通向节点EE。
●级别1:存在3个节点,AB和CD通向节点ABCD,EE是单独的,因此变为EEEE。
●级别2:最后,存在两个节点,ABCD和EEEE,其给出了根节点ABCDEEEE。
实施例2:
该实施例解决了问题2。它包括在实施例1中引入级别0,其中,级别0低于级别1。这完成如下:
●用作针对每个访问单元或描述符流的Merkle树中的叶子的Hash(块)由针对该块的(多达)三个值计算的块MTR_block的MT根替换:
○Hash(ECD),压缩和加密块的散列
○Hash(PCD),压缩块的散列
○Hash(PDD),在解压缩之后的块的散列
并非总是要求所有三个值。取决于被包括和验证的值,或多或少准确地检查针对完整性故障的原因是可能的。
上述散列值可以各自被分配给叶子。这允许精确定位错误,例如,作为具有压缩等的错误。注意,可以在不同的地点检查完整性。如果服务器无权访问解密密钥,则服务器不能检查解密数据,但是服务器可以检查加密数据。
此外,在示例中,Merkle树的根可以是:
●MTR_Block=Hash(Hash(Hash(ECD)|Hash(PCD))|Hash(PDD))。注意,在这种情况下,针对根的不同计算(遵循例如三元树结构)也是合理的,例如Hash(Hash(ECD)|Hash(PCD)|Hash(PDD))。
●这允许在解密和解压缩过程的不同阶段处以及在标准的分布式实施方式中的不同位置(例如,客户端和云)处检查数据的完整性。
例如,假设MPEG-G客户端从存储在云中的MPEG-G文件请求数据。云可以检查用户的凭证,并使用Merkle树中的信息,即Hash(ECD),来检查加密和压缩的数据尚未被修正。然后,云可以向MPEG-G客户端传送加密和压缩的数据:(i)被压缩以节省带宽,(ii)由于云本身无权访问用户数据而被加密。当MPEG-G客户端接收到数据时,它可以首先使用Hash(ECD)来检查其完整性。然后,它对数据进行解密,并可以使用Hash(PCD)来检查解密和压缩数据的完整性。最后,它对数据进行解压缩,并且可以使用Hash(PDD)来检查解密和解压缩数据的完整性。
实施例3:
该实施例解决了问题3。为此目的,当在级别0、1、2、3或4处的数据结构中添加和/或修正数据时,那么:
●针对在级别i处的该新数据结构计算新的/经更新的MT
●执行以下过程,直到MTR_MPEGG以及相应地MTR_MPEGG上的签名在级别5处被更新。
○新的(或经更新的)叶子将被添加到下一更高级别MT。新的(或经更新的)叶子的值是在当前级别i处的MT的MTR的值。
○由于下一更高级别处的MT具有新的/经更新的叶子,因此其根也被更新。
实施例4:
该实施例解决了问题4。为此目的,一个选项是在实施例1中描述的mtid框中包括跟踪表,以跟踪MPEG-G文件中的改变/更新(**)。对应于自从创建文件以来第i个生成的签名的表中的第i个条目,其中,i=0,1,2,…,包含:
●所有或选定的根值MTR_DG、MTR_DT、MTR_AT、MTR_AG、MTR_AU、MTR_DS和Merkle树节点,以允许有效的验证和存储。对于更多细节,参见实施例6-8。
●被指代为SIGNATURE_MTR_MPEGG(i)的当前MTR_MPEGG上的签名,其被计算为Sign(PrivK,i|MTR_MPEGG|SIGNATURE_MTR_MPEGG(i-1)),其中,
○SIGNATURE_MTR_MPEGG(-1)=“”
○PrivK是签名者的私钥,具有由证书颁发机构(CA)签名的相关联的公钥证书作为身份的证明。
○当以长期完整性保护为目标时,基于散列的签名算法是优选的,诸如LMS,参见例如RFC8554或抗量子算法之一,例如Falcon、SPHINCS(当前在NIST的标准化下)。特别地,如果在一些条目中使用预量子签名算法(例如,ECDSA),则在这种情况下,一旦ECDSA被破坏,例如,由于量子计算机,则这些条目可能不能被验证。
●签名者的ID
当在时间i处修正文件时,其中,i=1,2,…,
●MTR_MPEGG要被更新,如实施例3中所描述的。
●新条目可以被包括在mtid中的跟踪表中。为了促进跟踪,跟踪数据可以包括:
○SIGNATURE_MTR_MPEGG(i)
○新添加的数据(在数据添加的情况下)或修正的数据与先前数据相比较的差异。
○已经修正或添加的叶子。
此外,
●当人们访问叶子的数据时,通过经历到当前Merkle树根的路径,人们可以检查针对该数据片的文件完整性和所有相关修正。
●当人们在mtid中的跟踪表中搜索特定数据项时,人们找到用于对该数据片的添加/修正的所有信息。
实施例5:
该实施例解决了问题5。这可以通过以下来完成:
●使datasetGroupID足够长(例如,256位长)并随机生成它。
●特别地,利用MTR_DG替换datasetGroupID。为了确保datasetGroupID是唯一的,包括对MTR_DG的计算中的额外输入,即足够长的随机数N_MTR_DG。
●类似地,datasetID可以利用MTR_DS替换。为了确保datasetGroupID是唯一的,包括对MTR_DG的计算中的额外输入,即足够长的随机数N_MTR_DG。
该改变的优点是每个数据集或数据集组被分配唯一标识符。这是一个优点,因为当前MPEG-G标准包括用于合并文件的用例和基于这些标识符检索条目的API。如果标识符范围小到8位,则合并两个数据集组可能要求重命名标识符。如果不重命名标识符,那么对API的调用可能返回错误的结果。使用MTR_DG和MTR_DS作为datasetGroupID和datasetID解决了这两个问题。
实施例6:MT存储开销和计算性能权衡与优化:
通常,对于少量存在的数据结构,可以存储整个Merkle树(MT),以改进完整性验证的效率,而不产生很多存储开销。另一方面,对于通常大量存在的数据结构,在存储开销与计算资源之间的权衡是优选的。对于具有2^n个叶子的二进制MT,如果所有2^n个叶子可用,则MT节点和根的计算采用(2^n-1)个散列运算。在二进制MT中存在总共2^n-1个节点,包括所有中间节点和根。
该实施例提出,作为优化,存储二进制MT的从根计数的顶部m级别的节点,1≤m≤n。如果将该组节点连同所有叶子一起存储,则验证叶子的计算负担减少到节点对上的[2^(n-m+1)-1+(m-1)]散列运算。叶子的存储避免了对数据结构进行昂贵的散列运算,特别是在数据结构很大的情况下。
在图5a中示出了该优化,其中,虚线三角形表示部分Merkle树。图5a中示出了最高级别510处的根节点511,比如说级别n处的根节点511。还指示了520处的级别n-(m-1)和530处的级别n-m,以及540处的级别1和550处的叶子级别(级别0)。存在522处指示的m个级别,以及521处的n个级别。级别520包括2n-(m-1)个节点。级别530包括2n-m个节点。波点三角形部分包括2m-1个节点。级别1具有2n-1个节点。级别0具有2n个节点。
三角形560指示在需要时可以在运行中生成的节点。三角形560包括2n-m+1-1个节点。不存储树500的无波点部分,例如,级别530及以下。存储顶部级别,例如级别520及以上。
本示例中的整个Merkle树具有2^n个叶子。存储顶部m个级别中的叶子和节点两者,包括根。当需要验证特定叶子时,在底部(n-m+1)级别中的三角形560在运行中重新计算。
可以存在大量的叶子,例如,多达2^32。如果要求的话,能够存在更多的叶子。块大小也可以变化。较小的块大小允许以小的开销进行更细粒度的完整性检查,尽管散列树的大小可能增加。例如,树大小参数可以被用于确定块大小。
存储的MT的部分可以是文件的部分。可以存储为单独的文件。这可以作为数据结构的部分被存储。
例如,如果n=32,m=24,并且假设32字节的散列码大小,则它为树的顶部部分和2^32个叶子存储(2^24-1)个散列(~2^24*32字节)。验证叶子采取(2^9-1)个散列运算以用于重新计算底部的部分MT,加上23个散列以到达根。(2^9+22)运算非常快。存储器开销在很大程度上取决于数据结构的叶子数目。
作为备选方案,如果不存储2^n个叶子,仅通过存储顶部m个级别的节点仍然可以将需要针对完整性验证计算的叶子数目减少到2^(n-m+1)。在这种情况下,存储开销由(2^m-1)个散列给出,并且用于重新计算Merkle树根的时间由以下给出:
Tbinary_MT=[2^(n-m+1)-1+(m-1)]*t节点+2^(n-m+1)*t叶子
其中,t节点是用于在两个节点上进行散列处理的时间,并且t叶子是用于通过在数据结构上进行散列处理生成叶子的时间。
在没有任何叶子或节点的存储的情况下,计算时间变成:
Tbinary_MT=[2^n-1]*t节点+2^n*t叶子
还使用具有n=4和m=2的图5b所示的示例解释了在客户端-服务器设置中的二进制MT的操作,其中,文件驻留在服务器处,并且验证在客户端处进行。图5b示出了具有级别4-1和叶子级别的散列树。级别4具有节点R;级别3具有节点N31和N32;级别2具有节点N21、N22、N23和N24;级别1具有节点N11-N18;叶子级别具有对应于数据D1-D16的节点L1-L16。
假设级别3和级别4中的所有节点以及所有叶子被预先计算并存储,例如,在数据块中。为了验证D12(突出显示),可以采取以下步骤:
1.服务器生成节点{N15、N17、N18,N24}(突出显示)。通常,服务器处的散列运算数由{[2^(n-m+1)-1]-(n-m+1)}给出。
2.服务器将散列{L11、N15、N24、N31}连同根的签名一起传送给客户端。通常,需要传送的散列数是n。
3.客户端生成:
●通过对数据组件D12进行散列处理的叶子L12
●节点{N16、N23、N32、R}(突出显示)使用从服务器接收的散列。通常,在客户端处对散列对的散列运算数是n。
4.客户端使用相关联的公钥对接收到的签名进行解密,并且将解密散列码与生成的根R进行比较。如果它们彼此匹配,则验证是成功的。
将该方法的成本与当前MPEG-G进行比较,其要求每个数据结构一个数字签名针对完整性被保护,该方法具有:
●一旦需要验证两个数据结构,则降低计算开销。原因在于,数字签名验证的成本比散列计算贵得多。MT方法涉及针对文件的MT根的单个签名验证。
●降低存储开销,假设相同的数据结构受到完整性保护。原因在于,当前MPEG-G要求每个数据结构的数字签名,并且签名大小大于散列值,特别是在使用抗量子签名的情况下。
下表总结了不同级别的Merkle树的性质,包括树名、叶子的最大数目、存储需求、验证叶子的散列运算数以及二进制树中的内部级别的数目。
实施例7:使用认证标签代替针对加密数据容器的散列码
注意,MPEG-G允许通过在GCM模式下使用AES来保护具有对称密钥的不同容器。这意味着数据容器可以通过使用对应的对称密钥进行加密和认证。认证是通过检查存储的取决于整个数据容器的认证标签来执行的。现有MPEG-G解决方案中的认证标签可以重新用作数据容器的指纹,以便减少CPU和存储器要求。特别地,AES-CCM认证标签可以替换例如实施例1的级别1中的散列(块)或实施例2中的散列(ECD)。如果认证标签被重新用作指纹,那么不需要重新计算或存储数据容器(MT叶子)的散列。
实施例8:选择性完整性保护
在实施例中,所有数据结构或容器被保护。然而,在一些情况下,用户可能选择部分保护。该实施例描述了可以如何实现对数据结构的选择性保护。
为此目的,每个容器类型可以具有字段来指示通常如何选择容器类型的数据结构。例如,字段的值可以是:
●0-没有一个被选择(Merkle树不包括该容器级别及以下的所有数据结构)
●1-全部被选择
●2-通过ID选择数据结构
●3-通过标志选择数据结构,例如,根据其在较高级别容器中的位置,使用一系列位来指示数据
结构的选择
以下是针对其包括在MT验证中的数据集组、数据集、注释表、访问单元和块容器的通用选择模式的示例设置:
●mt_select_dg=1(选择所有数据集组)
●mt_select_dt=2(通过ID选择数据集)
●mt_select_at=2(通过ID选择注释表)
●mt_select_au=2(通过ID选择访问单元)
●mt_select_bl=1(选择所有有效载荷块)
针对每个容器类型的这些通用选择设置可以针对个体容器进行覆写。注意,一旦容器被排除,则其所有从属数据结构被排除,而不管其选择设置。
实施例9:用于改进完整性验证的速度的散列码的选择性存储
散列码的存储可以以存储开销为代价改进针对签名验证的速度。如实施例6中所描述的,存储成本朝向更接近根的容器级别(更少数目的散列码)并且关于用于改进计算速度的更多益处(每个散列码表示更大的数据块)更轻。该实施例描述了可以如何选择性地存储MT散列码(或节点)。
为此目的,每个容器类型可以具有字段以指示通常要如何选择其对应的MT散列码以用于存储,包括二进制树中的叶子和其他节点两者(参考实施例6)。例如,字段的值可以是:
●0-没有节点
●1-二进制MT中的所有节点,包括所有叶子和中间节点
●2-仅所有叶子
●3-二进制MT的顶部m个级别中的节点
●4-前n个叶子
●5-所有叶子加上二进制MT的顶部m个级别中的节点
●6-前n个叶子加上二进制MT的顶部m个级别中的节点
以下是针对MT在文件(MPEGG)、数据集组(DG)、数据集(DT)、注释表(AT)和访问单元(AU)级别处的通用存储模式的示例设置:
●mt_store_mpegg=1(将所有MT节点存储在总体文件级别处,其中,叶子是MTR_DG)
●mt_store_dg=1(将所有MT节点存储在数据集组级别处,其中,叶子是MTR_DT)
●mt_store_dt=1(将所有MT节点存储在数据集级别处,其中,叶子是MTR_AT)
●mt_store_at=1(将所有MT节点存储在注释表级别处,其中,叶子是MTR_AU)
●mt_store_au=0(未存储访问单元级别处的MT节点)
对于存储模式3-6,需要(一个或多个)额外字段以用于指定要存储的二进制MT中的顶部级别的数目(m)和叶子的数目(n)。针对每个容器类型的这些通用MT存储设置可以针对个体容器进行覆写。
实施例10:完全或目标完整性验证
在存储Merkle树上的散列码中的一些或全部的情况下,为了验证特定组件的完整性,仅需要重新生成覆盖讨论中的组件的散列码。然后,验证从讨论中的组件追溯到树的根的所有散列码,并且最终检查签名。
实施例11:灵活的Merkle树组织-二进制树vs K-ary树、单个树vs多个树分层
以上实施例中的描述集中于如在MPEG-G文件数据结构中组织的Merkle树的分层。每个受保护的数据结构与独立Merkle树相关联。实施例通常假设二进制Merkle树,例如,树中的每个节点最多具有两个孩子。因此,诸如MPEF-G文件的数据文件可以具有二进制Merkle树的分层,每个Merkle树对应于数据容器。作为二进制树配置的备选方案,K元Merkle树包括各自通过一次对k个从属节点进行散列处理来计算的节点。在极端情况下,k可以等于叶子的总数,从而导致一的树深度。换句话说,根是通过对所有N个叶子的级联进行直接散列处理来计算的。假设散列函数具有O(N)的线性时间复杂度,并且为了便于与二进制模型进行比较,N=2^n,用于重新计算N元Merkle树的根的时间由以下给出:
TN-ary_MT=2^(n-1)*t节点+2^n*t叶子
其中,t节点是用于在两个节点上进行散列处理的时间,并且t叶子是用于通过在数据结构上进行散列处理生成叶子的时间。
如实施例6中所描述的,用于重新计算具有存储的顶部m级别的节点的二进制Merkle树的根的时间由以下给出:
Tbinary_MT=[2^(n-m+1)-1+(m-1)]*t节点+2^(n-m+1)*t叶子
利用(2^m-1)个散列码的存储开销来比较两种方法,其中,1≤m≤n,假设:(1)t叶子>>t节点,(2)叶子的数目相对小,例如,在MT_AU的情况下,其中,叶子的最大数目是256,并且(3)对于二进制Merkle树方法,没有节点和叶子的混合存储:
TN-ary_MT≈(2^n-2^m+1)*t叶子
Tbinary_MT≈2^(n-m+1)*t叶子
当m=n时,TN-ary_MT≈t叶子,而Tbinary_MT≈2*t叶子
当m=n-l时,其中,1≤l≤(n–1),
Tbinary_MT≈2^(n-m+1)*t叶子=2^(l+1)*t叶子
TN-ary_MT≈[2^n-2^(n-l)+1]*t叶子>2^(l+1)*t叶子*{2^[n-(l+1)]-2^[n-2(l+1)]}>2^(l+1)*t叶子≈Tbinary_MT
基于以上关于完整性验证速度的计算,在假设与生成叶子相比较在节点上进行散列处理的可忽略的计算时间的情况下,可以得出结论:
●当存储开销≤(2^n-4)个散列时,二进制MT方法更快。原因在于,在m=(n-1)或[2^(n-1)-1]的存储开销的情况下,Tbinary_MT≈4t叶子。该计算时间保持不变,直到存储开销变得足够大以覆盖下一级别,例如,m=n或(2^n-1)的存储开销。而对于N元方法,当存储开销≤(2^n-4)个散列时,TN-ary_MT≥4t叶子
●当存储开销在(2^n-3)与2^n个散列之间时,N元树方法更快。
●在二进制MT方法中,当存储开销>2^n个散列时,2^n个叶子可以首先存储,开销的剩余部分可以被用于存储内部MT节点,这导致验证速度的进一步提高。
仅考虑节点上的散列的计算时间,当m>1时,二进制方法总是优于N元方法,因为:Tbinary_MT_nodes_only=[2^(n-m+1)-1+(m-1)]*t节点<2^(n-1)*t节点<TN-ary_MT_nodesonly
因此,总体上,二进制MT方法比N元方法具有更好的性能,除了在从(2^n-3)到(2^n+2)个散列的窄存储开销范围内,这对应于仅存储顶部m≥(n-1)级别的节点或存储所有叶子加上根(m=1)的情况。在这样的特定存储开销约束下,验证速度没有明显的赢家。
这些分析结果可以为基于选定的叶子的数目(实施例8)和存储模式设置(实施例9)来选择二进制或N元Merkle树方法提供指导。注意,在客户端-服务器设置中,其中,文件驻留在服务器处并且验证在客户端处进行,二进制方法仅向接收器传送n个节点,而N元方法要求传送(2^n-1)个叶子节点。
也能够存在用于允许更灵活的Merkle树组织的优点。一种灵活性是允许每个文件具有多个Merkle树,例如,MT_1、MT_2、…,每个包括属于具有完整性的相同队列的数据以作为一个整体独立地被保护,或者每个具有针对特定完整性保护要求的不同参数集。支持嵌套的Merkle树也是可能的,例如,通过将k个Merkle树合并为一个大树,其中,总体MT的根计算为更深级别的k个Merkel树的根的散列:MTR_Overall=Hash(MTR_1|MTR_2|…|MTR_k)。
实施例12:分为针对功能组件和数据组件的Merkle树
与实施例10有关的备选实施例是将功能和数据组件组织成单独的Merkle树分层,其然后结合在一起以形成新的总根。功能组件包括不同容器级别的标头、元数据和保护结构,而数据组件对应于包含有效载荷块数据的结构。由于功能组件通常很重要并且大小很小,因此似乎有理由强制要求所有功能组件由Merkle树保护,而无需进行选择,同时允许对数据组件进行选择性保护。这样的布置的一个潜在优点是功能组件的更快验证。例如,为了验证数据集的元数据,数据集中的个体访问单元的散列码不参与验证。仅针对数据组件的Merkle树的根处的散列码被用于验证。以下示例图示了将功能和数据组件分为两个单独的Merkle树并且然后将它们结合成单个总根的想法:
MTR_MPEGG
―MTR_Functional
―MTR_Functional_DG_1=Hash(Header_DG_1|Metadata_DG_1|Protection_DG_1|MT_Functional_DT_11|MT_Functional_DT_12|…)
―MTR_Functional_DG_2=Hash(Header_DG_2|Metadata_DG_2|Protection_DG_2|MT_Functional_DT_21|MT_Functional_DT_22|…)
―MTR_Data
―MTR_Data_DG_1
―MTR_Data_DG_2
在该示例中,总根MTR_MPEGG取决于作为Hash(MTR_Functional|MTR_Data)的功能和数据Merkle树的根。MTR_Functional是通过在数据集组级别处对函数MT根的级联进行散列处理来获得的。以MTR_Functional_DG为前缀的这样的根是通过在数据集级别处对数据集组标头、元数据、保护和从属功能MT根的级联进行散列处理来生成的。由于在生成根值时,散列函数将相同级别处的数据组件当作多个输入,这类似于K元Merkle树。
实施例13:时间戳
时间戳可以被包括在每个Merkle树数据结构中,以指示Merkle树的完整性保护的新鲜度。时间戳可以连同顶部Merkle树的根MTR_MPEGG一起存储和签名。此外,可以施加新鲜期,使得在MT数据的期满之前利用经更新的时间戳自动重新生成总体MT根上的签名。期满的时间戳指示文件可能不是最新的,并且能够是由入侵者用来伪装为当前版本并撤消任何最新更改的旧版本。
备选方案在于,当一些数据结构以特定日期为特征时,日期被用作这些数据结构中的输入(例如,作为额外叶子)。例如,假设用户在几天内对患者的基因组数据执行了一些分析。如果分析反映在多个数据结构中,这些数据结构已经在不同的时刻(不同的小时、不同的天)被修正,那么在建立Merkle树的新的总体分层时,数据结构中的每个可以具有不同的时间戳。用户可以在签名MTR_MPEGG时包括时间戳。签名的时间戳优选地是最新的时间戳。
实施例14:针对输送模式的使用
MPEG-G定义了用于数据的存储和输送的选项。在实施例中,当输送数据时,消息也可以受到完整性保护。
当传送数据结构(例如数据块)时,消息可以以以下开始:
●验证数据结构/数据块的完整性所要求的Merkle树中的节点,以及
●文件签名。
这允许验证数据块以及作为文件的部分的数据块的完整性,而不必首先接收整个文件。
消息可以包括MTR_MPEGG上的签名,例如,是否这是第一消息。稍后的消息不需要再次包括该签名,因为这将是冗余的。该签名也仅需要针对第一消息进行验证。这在图6中图示,其中,客户端从服务器检索n个数据块。该n个数据块在n个消息中进行交换。第一消息可以包括:文件签名、签名者的公钥(如果在接收器处尚不可用)、用于验证第一数据块所要求的Merkle树路径中涉及的节点以及数据块本身。当客户端接收到该信息时,客户端可以对接收到的数据计算散列(块1),使用生成的散列和路径中所要求的节点来计算树的根,并且使用生成的根和签名者的公钥来验证签名。
在图6中示出了客户端610和服务器620。消息1(630)包括签名(631)、用于验证块1(631)所要求的Merkle树路径中涉及的节点以及块1(633)。消息2(640)包括用于验证块2(641)所要求的Merkle树路径中涉及的节点以及块2(642)。消息3(650)包括用于验证块3(651)所要求的Merkle树路径中涉及的节点以及块3(652)。
稍后接收的消息的处理类似,不同之处在于,不再需要包括/检查签名,因为它对整个文件是唯一的。
与基于备选解决方案的比较
上述实施例在其数据结构中使用Merkle树来实现对MPEG-G文件的长期完整性保护。备选解决方案包括在23092-3:2019-3,7.4中修正/扩展当前MPEG-G解决方案。
例如,在备选解决方案中,可能包括两个改变:使用长期签名算法和定义允许将签名容器链接在一起的过程。
第一点可以通过使用抗量子算法来解决,例如,基于散列的签名算法,诸如LMS、XMSS或SPHINCS,而不是ECDSA。
至于第二点,可以考虑不同的方法。下面,描述了三个选项:
1.第一种方法包括在文件标头中包括唯一文件标识符,例如,随机生成的256位长的标识符。该文件标头由系统管理者签名。为了将文件中的所有数据容器绑定在一起,可以以这样的方式更新MPEG-G规格:当容器被签名时,那么该签名容器可以包括唯一文件标识符。如果这样做了,那么当用户从文件中检索数据容器时,用户需要:
●检索并验证签名主文件标头,并提取文件标识符ID_file。
●检索数据容器,验证其签名,并检查数据容器中的ID是否等于ID_file。
2.先前的方法在于,可以合并不同MPEG G文件中的数据。当合并两个文件时,可以创建包括新文件标识符的新文件标头。文件标头可以包括合并历史,其包括先前文件的标识符。如果这样做了,那么当用户从文件中检索数据容器时,用户需要:
●检索并验证签名主文件标头,并从先前的未合并文件中提取文件标识符ID_file以及先前文件标识符。
●检索数据容器,验证其签名,并检查数据容器中的ID是否等于ID_file或来自先前未合并文件中的ID_file之一。
3.另一备选方案包括在每个容器中具有唯一长标识符(例如,随机生成的256位长标识符)。当容器被签名时,签名可以包括父容器的标识符。如果要验证容器的签名,则遵循以下过程:
●检查容器的签名并且检索父容器的ID
●重复直到父容器的ID对应于MPEG-G标头文件
●检查签名
●检索父容器的ID
4.另一选项是使用第7.4节中的MPEG-G第3部分中指定的保护框,并且定义将它们链接在一起的过程。例如,当要验证访问单元中的数据块时,可以执行以下步骤中的一个或多个或全部:
1.数字签名必须存在于对给定块的访问单元保护中;
2.该第一签名的验证必须是成功的。
3.在数据集保护框中必须存在数据集级别处的给定访问单元的访问单元保护的签名。
4.该第二签名的验证必须是成功的。
5.在数据集组保护框中必须存在数据集组级别处的给定数据集的数据集保护框的签名。
6.该第三签名的验证必须是成功的。
如果步骤中的任一个失败,则完整性验证过程失败。如果步骤成功,则评价下一步骤。
即使在个体地执行上述所有步骤的情况下,在当前MPEG-G规格中也缺少将它们链接在一起的该验证过程。此外,在将所有数据集组链接在一起的总体文件上没有签名的定义。
将上述方法与使用Merkle树的实施例进行比较,使用Merkle树的实施例更有效且更全面。存在若干原因:
a)基于MT的解决方案不仅验证个体组件的完整性,而且验证它们一起属于总体MPEG-G文件的部分。它防止了文件中的数据结构的任何未授权的添加、移除或重新排序。
b)针对这一点的第一原因在于,MPEG-G方法要求每个容器存储签名,并且基于散列的签名(例如,SPHINCS)很大。例如,参见Bernstein等人的论文“SPHINCS:practicalstateless hash-basedsignatures”。
c)由于针对每个容器的基于散列的签名需要独立验证,因此计算开销大得多。
确保GA4GH文件中的完整性保护的应用
全球基因组学与健康联盟(GA4GH)在其论文(“GA4GH File EncryptionStandard”,2019年10月21日)中描述了如何加密和完整性保护然后交换的64千字节的个体块。对块中的每个进行加密,并且添加消息认证码(MAC)。然而,该解决方案不阻止攻击者在通信期间插入、移除或重新排序整个块(这在Crypt4GH第1.1节中说明)。
处理该问题的方法包括定义Merkle树,其中,64千字节的那些块中的每个是叶子。这相当于实施例1中的级别1。数据块也可以是如实施例2中的个体小Merkle树。
可以对Merkle树的根进行签名,或者备选地,可以使用与Crypt4GH中相同的密钥和MAC算法来计算MAC。
假设存在64千字节的n个块。当要发送数据块时,然后要传送以下信息:
a)Merkle树根上的签名(或MAC),以及
b)允许检查数据块的二进制Merkle树中的对应的log(n)个节点(这包括Merkle树的块索引和节点ID),
c)加密和MAC保护的数据块(根据Crypt4gh,大小高达64千字节)。
注意,如果在输送数据时由于潜在的碎片问题而将块大小选择为B=64千字节,那么可以考虑以上的点a)和b)中的额外完整性数据。这意味着块的总大小可以高达B=64千字节,并且由于由a)和b)引起的开销,数据块可能稍微较小。
当接收到消息时,接收方使用Merkle树中接收到的log(n)个节点来重新计算Merkle树的根并识别数据块的位置。然后,接收方检查Merkle树上的签名。最后,接收方检查接收到的数据块。注意,根签名仅需要针对第一消息进行签名。这与实施例14相同。
观察到,不管Crypt4GH第1.1节中的说明-Crypt4GH的当前规格也可能提供一些完整性保护,例如,如果数据块中包括索引,则防止数据块的未授权的插入、移除或重新排序。该特征具有独立的兴趣。该索引识别块的相对位置。如果该索引包括在Crypt4GH中的每个交换块中,那么不可能再对这些块进行重新排序。接收器还可以基于该索引来检查是否存在重复。如果接收器已经接收到具有索引k的块,那么接收器也可以检查它是否已经接收到具有块索引1、2、…、(k-1)的所有块。
该最后一种“基于索引”的方法与基于MT的方法不同。一个优点在于,虽然“基于索引”的方法关于如何传送数据,但是MT方法也给出了关于如何存储数据的信息。这意味着,如果攻击者可能影响传送分组的过程,则攻击者可能以正确的顺序放置索引,但是交换块。然后,接收方可能以错误的顺序组装文件。关于基于MT的方法,这是不可行的,因为MT给出了关于块如何组织和存储在文件中的信息。
图7a示意性地示出了用于对数字数据结构中的数据进行编码的编码方法700的实施例的示例。编码方法包括:
-获得(705)作为多个数据块的数据,
-通过将散列函数应用于多个数据块来计算(710)针对多个数据块的多个散列值,
-计算(715)针对多个散列值的第一散列树,该多个散列值被分配给第一散列树的叶子,第一散列树的一个或多个较高级别被生成,
-在数据结构中包括(720)多个数据块和第一散列树的部分,所述部分不包括第一散列树的叶子的至少部分。
获得多个基因组数据块可以包括直接接收基因组数据块。
图7b示意性地示出了用于验证数字数据结构中的选定的基因组数据的验证方法750的实施例的示例。验证方法750包括:
-接收(755)数据结构的至少部分,数据结构包括多个数据块和散列树的部分,不包括第一散列树的叶子的至少部分,
-通过将散列函数应用于所选定的数据块来计算(760)被选择用于数据完整性验证的数据结构中的数据块的多个散列值,
-识别(765)从被选择用于验证的数据块开始到对应的散列树的根的路径,
-在数据结构中可获得的情况下则检索(770)或计算沿着路径的散列树的散列值,
-根据至少所计算的多个散列值来验证(775)散列树的根。
执行方法的许多不同的方式是可能的,如对于本领域技术人员而言将是显而易见的。例如,步骤的顺序可以以所示的顺序执行,但是步骤的顺序可以改变或一些步骤可以并行地执行。此外,在各步骤之间,可以插入其他方法步骤。插入步骤可以表示诸如在本文中所描述的方法的细化,或可以与该方法无关。例如,一些步骤可以至少部分地并行执行。此外,给定步骤可能在下一步骤开始之前尚未完全完成。
该方法的实施例可以使用软件来执行,其包括用于使处理器系统执行方法700和/或750的指令。软件可能仅包括由系统的特定子实体采取的那些步骤。软件可以存储在合适的存储介质中,诸如,硬盘、软盘、存储器、光盘等。该软件可以作为信号沿着线或无线或使用数据网络(例如,因特网)发送。该软件可以可用于下载和/或在服务器上远程使用。该方法的实施例可以使用比特流来执行,该比特流被布置为配置可编程逻辑,例如,现场可编程门阵列(FPGA),以执行该方法。
将意识到,当前公开的主题还扩展到计算机程序,特别是载体上或载体中的计算机程序,其适于将当前公开的主题付诸实践。该程序可以采取源代码、目标代码、代码中间源和目标代码的形式,例如,部分编译的形式,或者该程序可以采取适用于实施该方法的实施例的任何其他形式。涉及计算机程序产品的实施例包括对应于所阐述的方法中的至少一种方法的处理步骤中每个的计算机可执行指令。这些指令可以细分为子例程和/或存储在一个或多个可以静态或动态链接的文件中。涉及计算机程序产品的另一实施例包括对应于所阐述的系统和/或产品中至少一个的设备、单元和/或部分中每个的计算机可执行指令。
图8a示出了具有可写部分1010的计算机可读介质1000和也具有可写部分的计算机可读介质1001。计算机可读介质1000以光学可读介质的形式示出。计算机可读介质1001以电子存储器的形式示出,在这种情况下是存储卡。计算机可读介质1000和1001可以存储数据1020,其中,数据可以指示指令,该指令在由处理器系统运行时使处理器系统执行根据实施例的用于编码或验证基因组数据的方法的实施例。计算机程序1020可以作为物理标记或通过对计算机可读介质1000的磁化被嵌入在计算机可读介质1000上。然而,任何其他适合的实施例也是能设想到的。此外,将意识到,尽管计算机可读介质1000在此处被示出为光盘,但是计算机可读介质1000可以是任何适合的计算机可读介质,诸如硬盘、固态存储器、闪存等,并且可以是非可记录或可记录的。计算机程序1020包括用于使得处理器系统执行编码和/或验证数据的所述方法的指令。
图8b示出了根据编码系统和/或验证系统的实施例的处理器系统1140的示意性表示。处理器系统包括一个或多个集成电路1110。图8b示意性地示出了一个或多个集成电路1110的架构。电路1110包括处理单元1120,例如,CPU,其用于运行计算机程序组件来执行根据实施例的方法和/或实施其模块或单元。电路1110包括用于存储程序代码、数据等的存储器1122。存储器1122的部分可以是只读的。电路1110可以包括通信元件1126,例如,天线、连接器或两者,等等。电路1110可以包括专用集成电路1124,以用于执行该方法中定义的处理的部分或全部。处理器1120、存储器1122、专用IC1124和通信元件1126可以经由互连1130(比如总线)彼此连接。处理器系统1110可以被布置用于分别使用天线和/或连接器进行接触和/或无接触通信。
例如,在实施例中,处理器系统1140(例如,编码或验证系统)可以包括处理器电路和存储器电路,该处理器被布置为运行存储在存储器电路中的软件。存储器电路可以是ROM电路或者非易失性存储器,例如,闪存。存储器电路可以是易失性存储器,例如,SRAM存储器。在后一种情况下,该设备可以包括非易失性软件接口,例如,硬盘驱动器、网络接口等。其被布置用于提供软件。
虽然设备1140被示为包括每个描述的部件之一,但是在各种实施例中,各种组件可以是重复的。例如,处理器可以包括多个微处理器,所述多个微处理器被配置为独立地执行本文描述的方法,或者被配置为执行本文描述的方法的步骤或子例程,使得多个处理器协作来实现本文描述的功能。此外,在设备1140在云计算系统中实施的情况下,各种硬件部件可以属于单独的物理系统。例如,处理器可以包括第一服务器中的第一处理器和第二服务器中的第二处理器。
本发明包括以下另外的实施例
实施例1.一种用于对数据结构中的数据进行编码的编码系统,所述编码系统包括:
-输入接口,其被配置用于接收所述数据,
-处理器系统,其被配置为:
-获得作为多个数据块的所述数据,
-通过将散列函数应用于所述多个数据块来计算针对所述多个数据块的多个散列值,
-计算针对所述多个散列值的第一散列树,所述多个散列值被分配给所述第一散列树的叶子,所述第一散列树的一个或多个较高级别被生成,
-在所述数据结构中包括所述多个数据块以及所述第一散列树的全部或部分,所述部分不包括所述第一散列树的所述叶子的至少部分。
实施例2.根据实施例1所述的编码系统,其中,所述处理器系统被配置为:计算第二散列树,所述第一散列树的根被分配给所述第二散列树的叶子,并且多个另外的散列值被分配给所述第二散列树的多个另外的叶子,另外的散列值被生成为另外的散列树的根和/或通过对另外的数据块进行散列处理而被生成;并且在所述数据结构中至少包括所述第二散列树的根。
实施例3.根据前述实施例中的任一项所述的编码系统,其中,所述数据结构包括以容器的分层所组织的数据块,所述处理器系统被配置为计算针对所述分层中的每个容器的散列树,并且散列树的每个叶子要么是所述容器内的数据块的所述散列值,要么是对应于从属容器的散列树的根。
实施例4.根据前述实施例中的任一项所述的编码系统,其中,所述处理器系统被配置为:在散列树的根上计算数字签名,具体地在散列树的叶子中具有散列树根的散列树的根上计算数字签名;并且将所述数字签名包括在所述数据结构中。
实施例5.根据前述实施例中的任一项所述的编码系统,其中,所述处理器系统被配置为存储所述数据结构和/或流式传输所述数据结构或所述数据结构的部分,所述部分包括所述数据块的至少部分和对应于所述数据块的散列树的至少部分。
实施例6.根据前述实施例中的任一项所述的编码系统,其中,所述多个数据块和/或数据容器的子集被标记为受完整性保护,并且所述多个数据块和/或数据容器的剩余部分被标记为不受完整性保护,仅被标记为受完整性保护的部分被包括在散列树中。
实施例7.根据前述实施例中的任一项所述的编码系统,其中,所述输入接口被配置用于接收一个或多个树参数,所述处理器系统被配置为在所述数据结构中包括根据所述一个或多个树参数从散列树中的一个散列树或散列树中的分层中选择的一组节点。
实施例8.根据前述实施例中的任一项所述的编码系统,其中,所述输入接口被配置为接收对所述数据的修改,修改包括添加、删除和/或修正中的一项或多项,所述处理器系统被配置为应用所述修改并且选择性地重新计算和更新散列树的对应于所述数据的经修改部分的部分。
实施例9.根据前述实施例中的任一项所述的编码系统,
-其中,散列树的叶子还包括:采取未压缩形式的数据块的散列和采取压缩形式的所述数据块的散列,所述数据块以压缩形式被包括在所述数据结构中;或者
-其中,散列树的叶子还包括:采取未压缩和未加密形式的数据块的散列、采取压缩和未加密形式的所述数据块的散列、采取压缩和加密形式的数据块的散列,所述数据块以压缩和加密形式被包括在所述数据结构中。
实施例10.一种用于验证数据结构中的选定的数据的验证系统,所述验证系统包括:
-输入接口,其被配置用于接收所述数据结构的至少部分,所述数据结构包括多个数据块以及散列树的部分,不包括第一散列树的叶子的至少部分,
-处理器系统,其被配置为:
-通过将散列函数应用于所选定的数据块来计算被选择用于数据完整性验证的所述数据结构中的数据块的多个散列值,
-识别从被选择用于验证的数据块开始到对应的散列树的根的路径,
-计算或在所述数据结构中能获得的情况下检索沿着所述路径的所述散列树的散列值,
-根据至少所计算的多个散列值来验证所述散列树的所述根。
实施例11.根据实施例10所述的验证系统,其中,所述数据结构包括散列树的分层,所述处理器系统被配置为识别从散列树的分层的叶子开始到总根的路径。
实施例12.根据实施例1-11中的任一项所述的编码和/或验证系统,其中,所述系统是设备。
实施例13.根据实施例1-12中的任一项所述的编码和/或验证系统,其中,所述多个数据块包括基因组数据。
实施例14.一种用于对数据结构中的数据进行编码的编码方法,所述编码方法包括:
-获得作为多个数据块的所述数据,
-通过将散列函数应用于所述多个数据块来计算针对所述多个数据块的多个散列值,
-计算针对所述多个散列值的第一散列树,所述多个散列值被分配给所述第一散列树的叶子,所述第一散列树的一个或多个较高级别被生成,
-在所述数据结构中包括所述多个数据块以及所述第一散列树的部分,所述部分不包括所述第一散列树的所述叶子的至少部分。。
实施例15.一种用于验证数据结构中的选定的数据的验证方法,所述验证方法包括:
-接收所述数据结构的至少部分,所述数据结构包括多个数据块以及散列树的部分,不包括第一散列树的叶子的至少部分,
-通过将散列函数应用于所选定的数据块来计算被选择用于数据完整性验证的所述数据结构中的数据块的多个散列值,
-识别从被选择用于验证的数据块开始到对应的散列树的根的路径,
-计算或在所述数据结构中能获得的情况下检索沿着所述路径的所述散列树的散列值,
-根据至少所计算的多个散列值来验证所述散列树的所述根。
实施例16.一种用于对数字数据结构中的基因组数据进行编码的编码系统,所述编码系统包括:
-输入接口,其被配置用于接收所述基因组数据,
-处理器系统,其被配置为:
-获得作为多个数据块的基因组数据,
-通过将散列函数至少应用于所述多个基因组数据块中的基因组数据来计算针对多个基因组块的多个散列值,
-计算针对所述多个散列值的第一散列树,所述多个散列值被分配给所述第一散列树的叶子,所述第一散列树具有至少三个级别,
-在所述数据结构中包括所述多个基因组块以及所述第一散列树的部分,所述部分包括所述第一散列树的前两个最高级别,但不包括所述第一散列树的一个或多个较低级别。
实施例17.根据前述实施例中的任一项所述的编码系统,其中,所述处理器系统被配置为:计算第二散列树,所述第一散列树的根被分配给所述第二散列树的叶子,多个另外的数据项被分配给所述第二散列树的多个另外的叶子;并且在所述数据结构中至少包括所述第二散列树的根。
实施例18.根据前述实施例中的任一项所述的编码系统,其中,所述数据结构是具有多个级别的分层数据结构,所述处理器系统被配置为针对所述分层数据结构的每个级别计算散列树,并且在针对高于最低级别的级别的散列树中包括针对所述分层数据结构的较低级别计算的散列树的根。
实施例19.根据前述实施例中的任一项所述的编码系统,其中,所述输入接口被配置用于接收树参数,所述处理器系统被配置为根据所述树参数在所述数据结构中包括所述第一散列树的较大或较小部分。
应当注意,上述实施例说明而不是限制当前公开的主题,并且本领域技术人员将能够设计许多替代实施例。
在权利要求中,括号中的任何附图标记都不应被解释为对权利要求的限制。词语“包括”及其变形的使用不排除权利要求中所述的那些之外的元件或步骤的存在。元件前面的词语“一”或“一个”不排除多个这样的元件的存在。诸如“至少一个”的表达当在元素列表之前时表示从列表中选择所有元素或元素的任何子集。例如,表达“A、B和C中的至少一个”应当被理解为仅包括A、仅包括B、仅包括C、A和B两者、A和C两者、B和C两者、或者A、B和C的全部。当前公开的主题可以通过包括若干不同元件的硬件以及通过适当编程的计算机来实施。在列举了若干部分的设备权利要求中,这些部分中的若干可以由同一项硬件来实施。尽管在互不相同的从属权利要求中记载了特定措施,但是这并不指示不能有利地使用这些措施的组合。
在权利要求中,括号中的附图标记指的是示例性实施例的附图中的附图标记或实施例的公式,因此增加了权利要求的可理解性。这些附图标记不应被解释为对权利要求的限制。

Claims (17)

1.一种用于对数据结构中的数据进行编码的编码系统,所述编码系统包括:
-输入接口,其被配置用于接收所述数据,
-处理器系统,其被配置为:
-获得作为多个数据块的所述数据,
-通过将散列函数应用于所述多个数据块来计算针对所述多个数据块的多个散列值,
-计算针对所述多个散列值的第一散列树,所述多个散列值被分配给所述第一散列树的叶子,所述第一散列树的一个或多个较高级别被生成,
-在所述数据结构中包括所述多个数据块以及所述第一散列树的全部或部分,所述部分不包括所述第一散列树的所述叶子的至少部分。
2.根据权利要求1所述的编码系统,其中,所述处理器系统被配置为:计算第二散列树,所述第一散列树的根被分配给所述第二散列树的叶子,并且多个另外的散列值被分配给所述第二散列树的多个另外的叶子,另外的散列值被生成为另外的散列树的根和/或通过对另外的数据块进行散列处理而被生成;并且在所述数据结构中至少包括所述第二散列树的根。
3.根据前述权利要求中的任一项所述的编码系统,其中,所述数据结构包括以容器的分层所组织的数据块,所述处理器系统被配置为计算针对所述分层中的每个容器的散列树,并且散列树的每个叶子要么是所述容器内的数据块的所述散列值,要么是对应于从属容器的散列树的根。
4.根据前述权利要求中的任一项所述的编码系统,其中,所述处理器系统被配置为:在散列树的根上计算数字签名,具体地在散列树的叶子中具有散列树根的散列树的根上计算数字签名;并且将所述数字签名包括在所述数据结构中。
5.根据前述权利要求中的任一项所述的编码系统,其中,所述处理器系统被配置为存储所述数据结构和/或流式传输所述数据结构或所述数据结构的部分,所述部分包括所述数据块的至少部分和对应于所述数据块的散列树的至少部分。
6.根据前述权利要求中的任一项所述的编码系统,其中,所述多个数据块和/或数据容器的子集被标记为受完整性保护,并且所述多个数据块和/或数据容器的剩余部分被标记为不受完整性保护,仅被标记为受完整性保护的部分被包括在散列树中。
7.根据前述权利要求中的任一项所述的编码系统,其中,所述输入接口被配置用于接收一个或多个树参数,所述处理器系统被配置为在所述数据结构中包括根据所述一个或多个树参数从散列树中的一个散列树或散列树中的分层中选择的一组节点。
8.根据前述权利要求中的任一项所述的编码系统,其中,所述输入接口被配置为接收对所述数据的修改,修改包括添加、删除和/或修正中的一项或多项,所述处理器系统被配置为应用所述修改并且选择性地重新计算和更新散列树的对应于所述数据的经修改部分的部分。
9.根据前述权利要求中的任一项所述的编码系统,
-其中,散列树的叶子还包括:采取未压缩形式的数据块的散列和采取压缩形式的所述数据块的散列,所述数据块以压缩形式被包括在所述数据结构中;或者
-其中,散列树的叶子还包括:采取未压缩和未加密形式的数据块的散列、采取压缩和未加密形式的所述数据块的散列、采取压缩和加密形式的数据块的散列,所述数据块以压缩和加密形式被包括在所述数据结构中。
10.一种用于验证数据结构中的选定的数据的验证系统,所述验证系统包括:
-输入接口,其被配置用于接收所述数据结构的至少部分,所述数据结构包括多个数据块以及散列树的部分,不包括第一散列树的叶子的至少部分,
-处理器系统,其被配置为:
-通过将散列函数应用于所选定的数据块来计算被选择用于数据完整性验证的所述数据结构中的数据块的多个散列值,
-识别从被选择用于验证的数据块开始到对应的散列树的根的路径,
-计算或在所述数据结构中能获得的情况下检索沿着所述路径的所述散列树的散列值,-根据至少所计算的多个散列值来验证所述散列树的所述根。
11.根据权利要求10所述的验证系统,其中,所述数据结构包括散列树的分层,所述处理器系统被配置为:
-识别从散列树的所述分层的叶子开始到总根的路径。
12.根据权利要求1-11中的任一项所述的编码和/或验证系统,其中,所述系统是设备。
13.根据权利要求1-12中的任一项所述的编码和/或验证系统,其中,所述多个数据块包括基因组数据。
14.一种用于对数据结构中的数据进行编码的编码方法(700),所述编码方法包括:
-获得(705)作为多个数据块的所述数据,
-通过将散列函数应用于所述多个数据块来计算(710)针对所述多个数据块的多个散列值,
-计算(715)针对所述多个散列值的第一散列树,所述多个散列值被分配给所述第一散列树的叶子,所述第一散列树的一个或多个较高级别被生成,
-在所述数据结构中包括(720)所述多个数据块以及所述第一散列树的部分,所述部分不包括所述第一散列树的所述叶子的至少部分。
15.一种用于验证数据结构中的选定的数据的验证方法(750),所述验证方法包括:
-接收(755)所述数据结构的至少部分,所述数据结构包括多个数据块以及散列树的部分,不包括第一散列树的叶子的至少部分,
-通过将散列函数应用于所选定的数据块来计算(760)被选择用于数据完整性验证的所述数据结构中的数据块的多个散列值,
-识别(765)从被选择用于验证的数据块开始到对应的散列树的根的路径,
-计算或在所述数据结构中能获得的情况下检索(770)沿着所述路径的所述散列树的散列值,
-根据至少所计算的多个散列值来验证(775)所述散列树的所述根。
16.根据权利要求15所述的验证方法,其中,所述数据结构包括散列树的分层,所述方法包括识别从散列树的所述分层的叶子开始到总根的路径。
17.一种包括表示指令的数据(1020)的瞬态或非瞬态计算机可读介质(1000),所述指令在由处理器系统运行时使所述处理器系统执行根据权利要求14和/或15所述的方法。
CN202280048228.0A 2021-07-06 2022-07-01 为了完整性保护而使用散列树对分层数据结构中的数据进行编码 Pending CN117616507A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163218525P 2021-07-06 2021-07-06
US63/218,525 2021-07-06
EP21207844.8 2021-11-11
PCT/EP2022/068316 WO2023280721A1 (en) 2021-07-06 2022-07-01 Encoding of data in a hierarchical data structure using hash trees for integrity protection

Publications (1)

Publication Number Publication Date
CN117616507A true CN117616507A (zh) 2024-02-27

Family

ID=89956600

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280048228.0A Pending CN117616507A (zh) 2021-07-06 2022-07-01 为了完整性保护而使用散列树对分层数据结构中的数据进行编码

Country Status (1)

Country Link
CN (1) CN117616507A (zh)

Similar Documents

Publication Publication Date Title
US10778441B2 (en) Redactable document signatures
CN109791594B (zh) 在关系数据库上执行写入和存储操作的方法及可读介质
US10621150B2 (en) System and method for enforcing the structure and content of databases synchronized over a distributed ledger
CN110785760B (zh) 用于登记数字文档的方法和系统
US9977918B2 (en) Method and system for verifiable searchable symmetric encryption
CN111033506B (zh) 利用匹配操作和差异操作的编辑脚本核实
Naveed et al. Dynamic searchable encryption via blind storage
CA2731954C (en) Apparatus, methods, and computer program products providing dynamic provable data possession
US7770015B1 (en) Signatures for multiple encodings
US7412480B2 (en) Device and method for updating code
US9300471B2 (en) Information processing apparatus, information processing method, and program
US11757655B1 (en) Systems and methods for distributed extensible blockchain structures
CN111201519A (zh) 用于低时延读取和写入大型数据集的不可变数据存储
US11818246B2 (en) Blockchain data structures and systems and methods therefor for multipath transaction management
He et al. Public integrity auditing for dynamic regenerating code based cloud storage
CN107612969B (zh) 基于B-Tree布隆过滤器的云存储数据完整性审计方法
Mo et al. Enabling non-repudiable data possession verification in cloud storage systems
Wei et al. Preimage attacks on 4-round keccak by solving multivariate quadratic systems
CN117616507A (zh) 为了完整性保护而使用散列树对分层数据结构中的数据进行编码
EP4181148A1 (en) Encoding of data in a hierarchical data structure using hash trees for integrity protection
WO2023280721A1 (en) Encoding of data in a hierarchical data structure using hash trees for integrity protection
EP2843587A1 (en) Method for generating evidence-data for a long-term data storage system for datasets
EP4142211A1 (en) Document integrity protection
Östersjö Sparse Merkle trees: Definitions and space-time trade-offs with applications for balloon
Aditya et al. Employing bloom filters for enforcing integrity of outsourced databases in cloud environments

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication