数据完整性的保护和验证方法、 设备和系统 技术领域 本公开涉及电子数据的完整性保护, 具体地, 涉及电子数据完整性的保护和验证 方法、 设备以及系统。
背景技术
相对于纸质媒体, 电子数据 ( 例如图像、 文本、 音频、 视频等 ) 容易被篡改, 也容易 在传输或保存过程中出现误差或丢失。 在很多应用中, 用户都需要检查电子数据的完整性, 以确认数据未被篡改或者未出现误差或丢失。 例如, 随着电子签名法等法律法规的颁布, 电 子数据可以和纸质媒体一样作为法庭的证据。因此, 确保电子数据的完整性日益成为重要 的需求。 发明内容在下文中给出关于本公开的一些方面的简要概述, 以便提供对于本公开的基本理 解。应当理解, 这个概述并不是对本公开的穷举性概述。该概述也并非意图确定本公开的 关键或重要部分, 也不是意图限定本公开的范围。其目的仅仅是以简化的形式给出某些概 念, 以此作为稍后论述的更详细描述的前序。
根据本公开的一个方面, 提供了一种数据完整性的保护方法。 该方法包括 : 将数据 分成多个数据块 ; 利用第一哈希函数来计算每个数据块的哈希值, 得到多个分块哈希值, 所 述多个分块哈希值形成第一哈希链 ; 利用第二哈希函数、 根据所述第一哈希链来计算第二 哈希链, 所述第二哈希链包括多个链哈希值, 每个链哈希值与所述第一哈希链中的对应的 分块哈希值关联, 并与所述第二哈希链中的相邻链哈希值关联 ; 及利用所述第二哈希链中 的最后一个链哈希值来生成所述数据的验证信息。
根据本公开的另一方面, 提供了一种数据完整性的保护设备。 该设备包括 : 数据分 块装置, 用于将数据分成多个数据块 ; 完整性信息生成装置, 该完整性信息生成装置用于利 用第一哈希函数来计算每个数据块的哈希值, 得到多个分块哈希值, 所述多个分块哈希值 形成第一哈希链 ; 该完整性信息生成装置还用于利用第二哈希函数、 根据所述第一哈希链 来计算第二哈希链, 所述第二哈希链包括多个链哈希值, 每个链哈希值与所述第一哈希链 中的对应的分块哈希值关联并与所述第二哈希链中的相邻链哈希值关联 ; 及验证信息生成 装置, 用于利用所述第二哈希链中的最后一个链哈希值来生成所述数据的验证信息。
根据本公开的另一方面, 提供了一种数据完整性的验证方法。 该方法包括 : 将待验 证的数据分成多个数据块 ; 利用第一哈希函数来计算每个数据块的哈希值, 得到多个分块 哈希值, 所述多个分块哈希值形成第一哈希链, 并且每个分块哈希值与所述多个数据块中 的一个对应 ; 利用第二哈希函数、 根据所述第一哈希链来计算第二哈希链, 所述第二哈希链 包括多个链哈希值, 每个链哈希值与所述第一哈希链中的对应的分块哈希值关联, 并与所 述第二哈希链中的相邻链哈希值关联 ; 以及根据所述第二哈希链中的最后一个链哈希值以 及所述待验证的数据的验证信息来判断所述数据是否完整。
根据本公开的另一方面, 提供了一种数据完整性的验证设备。 该设备包括 : 数据分 块装置, 用于将待验证的数据分成多个数据块 ; 哈希计算装置, 该哈希计算装置用于利用第 一哈希函数来计算每个数据块的哈希值, 得到多个分块哈希值, 所述多个分块哈希值形成 第一哈希链, 并且每个分块哈希值与所述多个数据块中的一个对应 ; 该计算装置还用于利 用第二哈希函数、 根据所述第一哈希链来计算第二哈希链, 所述第二哈希链包括多个链哈 希值, 每个链哈希值与所述第一哈希链中的对应的分块哈希值关联, 并与所述第二哈希链 中的相邻链哈希值关联 ; 以及验证装置, 用于根据所述第二哈希链中的最后一个链哈希值 以及所述待验证的数据的验证信息来判断所述数据是否完整。
根据本公开的另一方面, 提供了一种数据完整性的保护系统。该系统包括上述的 保护设备和验证设备。
另外, 本公开的实施例还提供了用于实现上述方法的计算机程序。
此外, 本公开的实施例还提供了至少计算机可读介质形式的计算机程序产品, 其 上记录有用于实现上述方法的计算机程序代码。 附图说明 参照下面结合附图对本公开实施例的说明, 会更加容易地理解本公开的以上和其 它目的、 特点和优点。附图中的部件只是为了示出本公开的原理。在附图中, 相同的或类似 的技术特征或部件将采用相同或类似的附图标记来表示。
图 1 是示出了根据本公开的一个实施例的用于数据完整性的保护的方法的示意 性流程图 ;
图 2 是示出了根据本公开的一个实施例的用于数据完整性的验证的方法的示意 性流程图 ;
图 3(A) 是示出了基于第一哈希链来生成第二哈希链的方法的一个示例的示意性 流程图 ;
图 3(B) 是示出了基于第一哈希链来生成第二哈希链的方法的另一示例的示意性 流程图 ;
图 4 是示出了根据本公开的一个实施例的用于数据完整性的保护的系统的示意 图;
图 5 是示出了根据本公开的另一实施例的用于数据完整性的保护的系统的示意 图;
图 6(A) 是示出了生成具有双哈希链结构的完整性信息和利用这样的信息来验证 数据完整性的一个示例的示意图 ;
图 6(B) 是示出了生成具有双哈希链结构的完整性信息和利用这样的信息来验证 数据完整性的另一示例的示意图
图 7 是示出了利用第二哈希链中的最后一个链哈希值来验证数据的完整性的一 个示例的示意图 ;
图 8 是示出了利用第二哈希链中的最后一个链哈希值来验证数据的完整性的另 一示例的示意图 ;
图 9 是示出用于定位错误数据块的方法的一个示例的示意图 ;
图 10 是示出用于定位错误数据块的方法的另一示例的示意图 ; 图 11 是示出用于定位错误数据块的方法的又一示例的示意图 ; 图 12(A)、 (B)、 (C) 是分别示出了图像或视频数据的分割方法的示意图 ; 图 13 是示出了根据一个实施例的用于数据的完整性保护的设备的示意性框图 ; 图 14 是示出了根据另一实施例的用于数据的完整性保护的设备的示意性框图 ; 图 15 是示出了根据一个实施例的用于数据的完整性验证的设备的示意性框图 ; 图 16 是示出用于实现本公开的计算机的结构的示例性框图。以及
具体实施方式
下面参照附图来说明本公开的实施例。 在本公开的一个附图或一种实施方式中描 述的元素和特征可以与一个或更多个其它附图或实施方式中示出的元素和特征相结合。 应 当注意, 为了清楚的目的, 附图和说明中省略了与本公开无关的、 本领域普通技术人员已知 的部件和处理的表示和描述。
本公开的实施例提供了对电子数据的完整性进行保护和验证的方法、 设备和系 统。本公开的实施例或技术方案中所提及的 “数据” 均是指电子数据, 并且所述数据可以是 图像、 文本、 视频、 音频或其任意组合等任何形式的电子数据, 本公开对此不作限定。
图 1 是示出了根据本公开的一个实施例的用于对数据的完整性进行保护的方法 的示意性流程图。在图 1 示出的实施例中, 信息生成方可以生成与要保护的数据相关的双 层哈希链, 作为数据的完整性信息。
如图 1 所示, 该方法可以包括步骤 103、 105、 107 和 109。
具体地, 在步骤 103 中, 信息生成方设备 ( 简称信息生成方 ) 将要保护的数据分成 多个数据块。可以按照任何适当的顺序对数据进行分割。例如, 可以按照时间或传输顺序 将数据分成数据块。又如, 可以按照空间顺序将数据分成数据块, 图 12(C) 示出了将一幅图 像从空间上分成多个块的一个示例, 在该示例中, 图像 P 被划分成 16 个块 A1-A16。又如, 可 以按照时间和空间顺序二者来分割数据, 如在图 12(A) 所示的示例中, 将每帧图像作为一 个数据块、 按照时间顺序分割图像序列, 即每帧图像 f1, f2, ..., 或 fn 分别作为一个数据块 A1, A2, ..., 或 An ; 又如在图 12(B) 所示的示例中, 将图像序列按照时间顺序划分成多组, 每 组包括多帧图像 f1, f2, ..., fm, 然后, 按照空间顺序将每组图像中的每帧图像划分为多个区 域, 多帧图像的某个相应位置的区域组成一个数据块。在本示例中, 图像组 f1, f2, ..., fm 被 划分成 16 个数据块块 A1-A16, 其中每个图像块包括该组图像 f1, f2, ..., fn 中相应位置的多 个区域, 即 Ai = {bi, ...bi, bi, j = 1, 2, ..., m, i = 1, ..., 16。应理解, 可以按照任 1, j, m}, 何适当的方式来分割数据, 本公开并不局限于上述示例。
然后, 在步骤 105 中, 信息生成方利用哈希函数 ( 称为第一哈希函数 ) 来计算每个 数据块的哈希值。计算得到的每个数据块的哈希值称为分块哈希值。这样, 得到多个分块 哈希值, 每个分块哈希值与一个数据块对应。这些分块哈希值可以称为第一哈希链。
然后, 在步骤 107 中, 以迭代哈希链将第一哈希链中的多个分块哈希值依次链接 起来, 形成所述数据的第二哈希链。 第二哈希链中包括多个哈希值, 为了与第一哈希链中的 分块哈希值区分开, 本公开中将第二哈希链中的哈希值称为 “链哈希值” 。 具体地, 可以利用哈希函数 ( 称为第二哈希函数 )、 根据第一哈希链来进行迭代计算, 从而得到第二哈希链, 每个链哈希值不但与第一哈希链中的对应的分块哈希值关联, 而且还与该第二哈希链中的 相邻链哈希值关联。所形成的第一哈希链和第二哈希链可以作为所述数据的完整性信息。
作为一个示例, 计算第二哈希链所采用的第二哈希函数可以与计算第一哈希链所 采用的第一哈希函数相同。作为另一示例, 第二哈希函数可以不同于第一哈希函数。
应理解, 可以采用任何适当的方法来计算哈希值。 例如, 第一哈希函数或者第二哈 希函数可以采用 SHA256、 SHA512( 其中, SHA 的全称为 Secure Hash Algorithm, 即安全哈希 算法 ) 和 NIST(National Institute of Standards and Technology, 美国国家标准与技术 研究院 ) 在下一代哈希函数竞赛中选定的新的哈希函数等, 这里不一一列举。
图 3(A) 示出了计算第二哈希链的方法的一个示例。如图 3(A) 所示, 根据第一哈 希链来计算第二哈希链的方法可以包括步骤 107-1 和 107-2。 在步骤 107-1 中, 计算第二哈 希链中的第一个链哈希值。具体地, 将利用多个数据块中的头两个或更多个数据块的分块 哈希值作为第二哈希函数的自变量而计算得到的哈希值作为第一个链哈希值。然后, 在步 骤 107-2 中依次计算后面的链哈希值。具体地, 对于从第二个链哈希值开始的每个链哈希 值, 将利用前一个链哈希值和对应的分块哈希值作为第二哈希函数的自变量而计算得到的 哈希值作为该链哈希值。 图 3(B) 示出了计算第二哈希链的方法的另一个示例。 如图 3(B) 所示, 根据第一哈 希链来计算第二哈希链的方法可以包括步骤 107-3 和 107-4。 在步骤 107-3 中, 计算第二哈 希链中的第一个链哈希值。具体地, 利用指定的初始化值和第一哈希链中的第一个分块哈 希值 ( 即第一个数据块的分块哈希值 ) 作为第二哈希函数的自变量而计算得到的哈希值作 为第一个链哈希值。指定的初始化值可以是前一组数据的最后一个哈希值或验证信息, 或 者可以是包含指定的验证信息 ( 如时间信息、 数据源信息、 或者用户定义的任何附加信息 ) 的数据。步骤 107-4 与图 3(A) 中的步骤 107-2 相似, 这里不再重复。
假设数据被分成多个数据块 A1, A2, ..., An, (n > 1), 这些数据块的分块哈希值分 别表示为 h1, h2, ..., hn :
hi = H1(Ai), i = 1, ..., n, (1)
其中, H1() 表示第一哈希函数, 其可以是任何适当的哈希函数。
根据图 3(A) 所示的方法, 假设第二哈希链中的链哈希值表示为 h’ h’ ..., m, m+1, h’ 则可以用下式来计算这些链哈希值 : n,
h’ hm-1, ..., h1), (2) m = H2(hm,
h’ h’ ..., h’ h’ (3) m+1 = H2(hm+1, m), n = H(hn, n-1)
其中, 2 ≤ m < n, n 为数据块的个数。优选地, m = 2。
根据图 3(B) 所示的方法, 可以用下式来计算链哈希值 h’ h’ ..., h’ 1, 2, n :
h’ IV), (4) 1 = H2(h1,
h’ h’ (5) i = H2(hi, i-1)
其中, IV 表示指定的初始化值, 2 ≤ i ≤ n, n 为数据块的个数。
在上式 (2)-(5) 中, H2() 表示第二哈希函数, 其可以是任何适当的哈希函数。 H2() 可以与 H1() 相同, 也可以与 H1() 不同。
应理解, 上述示例仅仅是示例性的, 而不是穷举性的。 可以采用其他适当的方法来
计算所述第二哈希链, 只要第二哈希链中的链哈希值将第一哈希链中的分块哈希值用链状 结构连接起来既可。
然后, 在步骤 109 中, 利用第二哈希链中的最后一个链哈希值来生成所述数据的 验证信息 :
验证信息= Verify(h’ (6) n)
其中, Verify() 表示验证算法。应理解, 可以采用任何适当的验证算法。作为一 个示例, Verify() 可以是数字签名算法, 所述验证信息可以是对最后一个链哈希值进行数 字签名 ( 可以采用任何适当的方法进行签名计算, 这里不作限定 ) 而得到的签名信息。作 为另一示例, Verify() 可以是时间戳的计算方法, 所述验证信息可以是利用最后一个链哈 希值和时间信息而生成的时间戳信息 ( 可以采用任何适当的方法来计算时间戳, 这里也不 作限定 )。作为又一示例, 所述验证信息还可以包括数字签名和时间戳信息二者。这里不 一一列举。
利用图 1 所示的方法, 可以计算得到双层哈希链, 作为要保护的数据的完整性信 息。
图 2 示出了根据本公开的一个实施例的对数据的完整性进行验证的方法的示意 性流程图。在图 2 示出的实施例中, 信息验证方设备 ( 简称信息验证方 ) 可以生成与要验 证的数据相关的双层哈希链, 并利用该哈希信息来验证数据的完整性。 如图 2 所示, 该验证方法可以包括步骤 213、 215、 217 和 219。
首先, 信息验证方采用与信息生成方同样的方式来生成待验证的数据的双层哈希 链。具体地, 在步骤 213 中, 将待验证的数据分成多个数据块。数据的分割方式要与信息生 成方分割数据的方式相同。这里不再重复。例如, 这些数据块可以用 RA1, RA2, ..., RAn(n > 1, n 表示数据块的个数 ) 来表示。
然后, 在步骤 215 中, 利用第一哈希函数来计算每个数据块的哈希值, 得到第一哈 希链, 第一哈希链中的每个分块哈希值与多个数据块中的一个对应。可以采用与信息生成 方所使用的相同的哈希函数来计算哈希值, 这里不再重复。假设基于待验证的数据计算得 到的分块哈希值分别表示为 hR1, hR2, ..., hRn(hRi = H1(RAi), i = 1, ..., n, 其中 H1() 表示 第一哈希函数, 其可以是任何适当的哈希函数 )。
在步骤 217 中, 信息验证方利用迭代哈希链将第一哈希链中的分块哈希值连接起 来, 形成第二哈希链。具体地, 信息验证方可以利用第二哈希函数、 根据所述第一哈希链来 计算第二哈希链。第二哈希链可以包括多个链哈希值, 每个链哈希值与第一哈希链中的对 应的分块哈希值关联, 并与所述第二哈希链中的相邻链哈希值关联。信息验证方采用与信 息生成方所使用的相同的方法 ( 如上文中参考图 2 或图 3(A) 图 3(B) 描述的实施例 / 示例 中的方法 ) 来计算第二哈希链。
以图 3(A) 所示的方法为例, 假设信息验证方基于待验证的数据计算得到的第 二哈希链中的链哈希值表示为 h’ h’ ..., h’ 则根据图 3(A) 的方法, h’ Rm, R(m+1), Rn, Rm = H2(hRm, ..., hR1), h’ h’ ..., h’ h’ 2 ≤ m < n, H2() R(m+1) = H2(hR(m+1), Rm), Rn = H2(hRn, R(n-1)), 表示第二哈希函数, 其可以是任何适当的哈希函数。H2() 可以与 H1() 相同, 也可以与 H1() 不同。
以图 3(B) 所示的方法为例, 假设信息验证方基于待验证的数据计算得到的第二
哈希链中的链哈希值表示为 h’ h’ ..., h’ 则根据图 3(B) 的方法, h’ R1, R2, Rn, R1 = H2(hR1, IV), h’ h’ ..., h’ h’ IV 表示指定的初始化值, H2() 表 R2 = H2(hR2, R1), Rn = H2(hRn, R(n-1)), 示第二哈希函数, 其可以是任何适当的哈希函数。 H2() 可以与 H1() 相同, 也可以与 H1() 不 同。
在步骤 219 中, 信息验证方可以基于待验证的数据而计算得到的最后一个链哈希 值 ( 如 h’ Rn) 及来自信息接收方的验证信息 ( 如利用 h’ n 计算得到的验证信息 ) 来判断待 验证的数据是否具有完整性。
具体地, 可以采用例如图 7 或图 8 所示的方法进行验证。例如, 在图 7 所示的示例 中, 可以利用来自信息生成方的验证信息 Verify(h’ n) 来反推 ( 如步骤 219-1 所示 ) 链哈 希值 h’ 即对来自信息生成方的验证信息进行验证运算, 然后在步骤 219-2 中, 将验证运 n, 算的结果 h’ 如果二者相同, 则可 n 与在步骤 217 中得到的最后一个链哈希值 h’ Rn 相比较, 以初步确定数据是完整的, 否则, 则可以初步确定数据不具有完整性。又如, 在图 8 所示的 示例中, 可以利用与信息接收方相同的方法、 利用基于待验证的数据而计算得到的最后一 个链哈希值 h’ 然后在步骤 219-4 中, Rn 生成验证信息 Verify(h’ Rn)( 如步骤 219-3 所示 ), 将计算得到的验证信息 Verify(h’ Rn) 与来自信息生成方的验证信息 Verify(h’ n) 相比较, 如果二者相同, 则可以初步确定数据是完整的, 否则, 则可以初步确定数据不具有完整性。
图 4 和图 5 分别示出了基于图 1 和图 2 所示的实施例数据完整性保护系统的示意图。 在图 4 所示的系统 400 中, 可以包括信息生成方 ( 即信息生成方设备 )410、 信息验 证方 ( 即信息验证方设备 )420 和安全存储器 430。信息生成方 410 可以采用参考图 1 和图 3 描述的方法来生成数据的完整性信息以及数据的验证信息。 然后, 信息生成方 410 可以将 所生成的完整性信息 ( 第一哈希链和第二哈希链 ) 存储在安全存储器 430 中, 还可以将数 据和验证信息通过数据传输方式 ( 可以是任何适当的有线或无线的传输方式, 这里不作限 定 ) 传输给信息验证方 420。在数据的传输过程中有可能存在丢包或误码的情况, 因此, 信 息验证方 420 可以采用参考图 3 描述的方法来验证接收到的数据的完整性。
在图 5 所示的系统 500 中, 可以包括信息生成方 ( 即信息生成方设备 )510、 信息验 证方 ( 即信息验证方设备 )520、 数据存储装置 540 和安全存储器 530。信息生成方 510 可 以采用参考图 1 和图 3 描述的方法来生成数据的完整性信息 ( 包括第一哈希链和第二哈希 链 )。信息生成方 510 可以将第二哈希链中的最后一个链哈希值发送给时间戳服务器 570, 由时间戳服务器 570 利用该链哈希值和附加的时间信息来生成时间戳信息 ( 可以采用任 何适当的方式来生成时间戳, 这里不作限定 ), 并反馈给信息生成方 510。信息生成方将所 生成的完整性信息存储在安全存储器 530 中, 并将数据和时间戳信息存储在数据存储装置 540 中。
存储在装置 540 中的数据有可能被数据修改者 580 修改或篡改。例如, 数据的管 理方有可能不希望数据中的某个或某些片段或区域为他人所知, 因此对其进行掩盖或修 改 ( 即数据的管理方可以作为数据修改者 580)。又如, 存储该数据的存储装置 540 有可能 遭到某些攻击者的攻击, 从而导致存储的数据被篡改 ( 即这种攻击者也可以是数据修改者 580)。当信息验证方 520 从数据存储装置 540 中获取了这些数据和验证信息 ( 时间戳 ) 之 后, 可以采用参考图 3 描述的方法来验证所得到的数据的完整性。
作为具体示例, 在上述实施例或示例中的安全存储器可以设置在信息生成方设备 中, 也可以独立于信息生成方设备。 所述安全存储器可以是非易失性的存储器, 以便确保数 据的完整性信息的安全。
上述系统 400 或 500 可以应用于多种场景, 如视频监控或知识产权的保护等等。
例如, 在视频监控系统中, 信息生成方设备 400 或 500 可以设置于摄像或拍照装置 中, 以根据该摄像或拍照装置拍摄的数据来生成完整性信息和验证信息。 或者, 信息生成方 设备 400 或 500 可以与摄像或拍照装置分离, 并可以用任何适当的方式 ( 有线或无线的方 式 ) 与其相连接, 以接收该摄像或拍照装置拍摄的数据并生成完整性信息和验证信息。拍 摄得到的数据和验证信息可以存储在数据存储装置 ( 如数据服务器 ) 中。所生成的完整性 信息可以存储在安全存储器中, 该安全存储器可以是摄像或拍照装置中内置的存储器, 也 可以采用其他存储器。 拍摄得到的数据及其验证信息还可以通过任何适当的通信通道而被 发送给接收方 ( 信息验证方 )。
在待验证的数据中, 可能仅其中的部分数据出现错误, 而其他部分的数据仍是正 确的。作为一个具体实施例, 信息验证方可以根据数据的完整性信息 ( 例如保存在安全存 储器中 ) 来定位出现错误的数据块, 并确定其他数据块的完整性。信息验证方可以通过查 询信息生成方基于原始数据而生成的第一哈希链和第二哈希链 ( 为了描述方便, 其中的哈 希值分别称为原始分块哈希值和原始链哈希值 ) 来确定待验证的多个数据块中哪个数据 块出现了错误。具体地, 信息验证方可以采用例如图 9 或图 10 或图 11 所示的方法来定位 出现错误的数据块, 验证其他数据块的完整性, 并验证数据中的签名信息和时间戳信息。
在图 9 所示的示例中, 该定位错误的方法开始于步骤 921。假设验证方已根据图 2 所示的方法得知待验证的数据不是完整的 ( 即 h’ 则可以进行回溯计算, 即从 Rn 是错误的 ), 最后一个链哈希值开始向例如存储有完整性信息的安全存储器 (430 或 530) 回溯请求前面 的链哈希值。具体地, 在步骤 921 中, 可以例如从安全存储器中获取最后一个数据块的原始 分块哈希值 hn 及与前一链哈希值 h’ 将计算 R(n-1) 对应的原始链哈希值 h’ n-1。在步骤 923 中, 得到的最后一个数据块的分块哈希值 hRn 与其原始分块哈希值 hn 进行比较, 以确定最后一 个数据块是否发生错误。如果二者不同, 则确定最后一个数据块 RAn 发生错误 ( 步骤 925)。 如果二者不同, 则可以确定 RAn 未出错。 然后, 在步骤 927 中, 进一步判断所述前一链哈希值 h’ 若是, 则确定 RAn 之前的数据块 (RA1, ..., RAn-1) R(n-1) 与其原始链哈希值 h’ n-1 是否相同 ; 均没有错误, 因此结束错误数据块定位处理, 否则, 判断 h’ R(n-1) 是否第二哈希链中的第一 个, 若是, 则结束处理 ; 否则进一步请求前一数据块的原始分块哈希值 hn-1 及下一个链哈希 值 h’ 并重复步骤 921-927。采用图 9 所示的方法, 如果出 R(n-2) 对应的原始链哈希值 h’ n-2, 现错误的数据块的位置越靠近最后一个数据块的位置, 则查询次数 ( 重复步骤 921-927 的 次数 ) 越少 ; 反之, 查询次数越多。平均查询次数为 n/2, 平均计算次数为 n/2。
图 6(A) 和图 6(B) 示出了两个具体示例。在图 6(A) 所示的示例中, 信息生成方 和验证方均采用图 3(A) 所示的方法来计算第二哈希链, 并取 m = 2。具体地, 信息生成方 基于原始数据块 A1, A2, ..., An 生成了原始分块哈希值 h1, h2, ..., hn 和原始链哈希值 h’ 2, h’ ..., h’ 并生成了验证信息 Verify(h’ 基 3, n, n)。信息验证方在得到待验证的数据之后, 于数据块 RA1, RA2, ..., RAn 生成了分块哈希值 hR1, hR2, ..., hRn 和链哈希值 h’ h’ ..., R2, R3, h’ 并生成了验证信息 Verify(h’ 发现二者 Rn, Rn)。通过比较 Verify(h’ n) 和 Verify(h’ Rn),不同, 因此确定待验证的数据不完整。通过向安全存储器请求原始哈希值, 确定数据块 RA2 出现错误。在图 6(B) 所示的示例中, 信息生成方和验证方均采用图 3(B) 所示的方法来计 算第二哈希链。具体地, 信息生成方基于原始数据块 A1, A2, ..., An 以及指定的初始化值 IV 生成了原始分块哈希值 h1, h2, ..., hn 和原始链哈希值 h’ h’ ..., h’ 并生成了验证信 1, 2, n, 息 Verify(h’ 基于数据块 RA1, RA2, ..., RAn 以及 n)。信息验证方在得到待验证的数据之后, 相同的初始化值 IV 生成了分块哈希值 hR1, hR2, ..., hRn 和链哈希值 h’ h’ ..., h’ 并 R1, R2, Rn, 生成了验证信息 Verify(h’ 发现二者不同, 因 Rn)。通过比较 Verify(h’ n) 和 Verify(h’ Rn), 此确定待验证的数据不完整。通过向安全存储器请求原始哈希值, 确定数据块 RA2 出现错 误。
在图 10 所示的示例中, 可以一次查询两个或更多个数据块的原始哈希值。所述两 个或更多个数据块可以分布在整个数据块集合的不同位置上, 可以根据查询得到的原始哈 希值来判断这些数据块所对应的哪个数据块区域中有错误的数据块。作为一个具体示例, 下面以二分法为例来描述该方法。在步骤 1021 中, 从例如安全存储器中获取所存储的原始 第二哈希链中的两个链哈希值, 例如, h’ 在步骤 1023 中, 根据这些原始链 n-1 和 h’ n/2。然后, 哈希值来判断验证方基于待验证的数据而计算的对应的链哈希值 h’ R(n-1) 和 h’ R(n/2) 是否正 确, 以确定出现错误的数据块是位于区域 [RA1, ..., RAn/2] 还是 [RAn/2, ..., RAn-1]。具体地, 如果 h’ 则可以确定区域 [RAn/2, ..., RAn-1] 中有错误的数据 n-1 ≠ h’ R(n-1) 而 h’ n/2 = h’ R(n/2), 块, 而区域 [RA1, ..., RAn/2] 中没有错误的数据块。如果 h’ n-1 ≠ h’ R(n-1) 且 h’ n/2 ≠ h’ R(n/2), 则可以确定区域 [RA1, ..., RAn/2] 中有错误的数据块 ; 在这种情况下, 区域 [RAn/2, ..., RAn-1] 中可能有错误数据块, 也可能没有错误数据块 ) ; 进一步地, 信息验证方可以根据查询获得 的原始链哈希值 h’ ..., RAn-1] 中数据块 RAn/2, 之后的链哈希值, 这 n/2 重新计算区域 [RAn/2, 些链哈希值用 h’ h’ ..., h’ 其中, h’ U((n/2)+1), U((n/2)+2), U(n-1) 来表示, U((n/2)+1) = H2(hR((n/2)+1), h’ h’ h’ h’ h’ n/2), U(n/2+2) = H2(hR((n/2)+2), U((n/2)+1)), U(n-1) = H2(hR(n-1), U(n-2))。如果重新计算 得到的链哈希值 h’ 即 h’ 则可以 U(n-1) 与查询获得的链哈希值 h’ n-1 仍不相等, U(n-1) ≠ h’ n-1, 确定区域 [RAn/2, ..., RAn-1] 中也有错误的数据块。所确定的出现错误的区域既可以作为下 一次查询的区域。可以重复执行步骤 1021 和 1023, 直到准确定位出现错误的数据块。在图 10 所示的方法中, 假设数据块的总数为 n, 则其中一块数据发生错误时, 采用这种方法的平 均查询次数为 log2(n), 平均哈希计算次数为 n/2。与图 9 所示的方法相比, 这种方法的查 询次数较少。
在图 11 所示的示例中, 可以在步骤 1121 中一次性例如从安全存储器中获取所有 的原始分块哈希值 h1, h2, ..., hn ; 然后在步骤 1123 中将这些原始分块哈希值分别与验证方 基于待验证的数据而计算得到的多个分块哈希值 hR1, hR2, ..., hRn 分别进行比较。这样即可 确定出现错误的数据块的位置。 在图 11 所示的方法中, 假设数据块的总数为 n, 则采用这种 方法只需查询一次, 但查询流量为 n, 平均哈希计算次数为 n/2。与图 9 和图 10 所示的方法 相比, 这种方法的查询次数最少, 但查询的流量最大。
作为一个示例, 信息生成方可以将所生成的所有或部分完整性信息 ( 第一哈希链 和 / 或第二哈希链 ) 连同数据和验证信息一起发送给信息接收方 ( 验证方 )。在传输过程 中, 如果有数据块丢失或出现错误但第一哈希链 ( 分块哈希值 ) 没有丢失或错误, 则验证方 可以通过这些分块哈希值来验证是否有以及哪个 ( 哪些 ) 数据块出现错误或丢失, 并可以根据这些分块哈希值来重新生成链哈希值, 从而验证信息的签名信息。如果数据块和第一 哈希链均发生丢失或错误, 则验证方可以通过第二哈希链来定位出现错误的数据块, 并验 证其他数据块的完整性。 如果数据块、 第一和第二哈希链均发生丢失或错误, 则可以通过向 安全存储器查询其所保存的完整性信息, 从而定位出现错误的数据块, 并验证数据的签名 信息是否正确。
图 13 示出了根据本公开的一个实施例的用于数据完整性的保护的设备的示意性 框图。该设备 1310 采用上述实施例 / 示例中的方法来生成数据的完整性信息和验证信息, 可以用作上述实施例 / 示例中所述的信息生成方设备 ( 如 410 或 510)。
如图 13 所示, 设备 1310 可以包括数据分块装置 1312、 完整性信息生成装置 1314、 验证信息生成装置 1316。
数据分块装置 1312 用于将要保护的数据分成多个数据块。数据分块装置 1312 可 以采用上述实施例 / 示例中所述的方法来分割数据, 这里不再重复。
完整性信息生成装置 1314 用于利用哈希函数 ( 称为第一哈希函数 ) 来计算数据 分块装置输出的每个数据块的哈希值, 得到多个分块哈希值。这些分块哈希值形成第一哈 希链。 然后, 完整性信息生成装置 1314 进一步利用哈希函数 ( 称为第二哈希函数 )、 根据第 一哈希链来计算第二哈希链。第二哈希链包括多个链哈希值, 每个链哈希值与所述第一哈 希链中的对应的分块哈希值关联并与所述第二哈希链中的相邻链哈希值关联。 完整性信息 生成装置 1314 可以采用上述实施例 / 示例中所述的方法来生成第一哈希链和第二哈希链 ; 所采用的第一和第二哈希函数可以彼此相同, 也可以相互不同, 这里也不再重复。 所生成的第一哈希链和第二哈希链作为要保护的数据的完整性信息。
验证信息生成装置 1316 可以利用第二哈希链中的最后一个链哈希值来生成数据 的验证信息。 验证信息生成装置 1316 可以采用上述实施例 / 示例中所述的方法来生成所述 验证信息, 所生成的验证信息可以包括数据的数字签名和 / 或时间戳信息, 这里不作限定。
作为一个示例, 设备 1310 还可以包括发送装置 1318, 以便将数据以及所生成的验 证信息发送给信息接收方 ( 如验证方 420)。 作为一个具体示例, 发送装置 1318 可以将完整 性信息连同数据及验证信息一起发送给信息接收方。
完整性信息生成装置 1314 所生成的完整性信息可以保存在安全存储器 1330 中。 作为一个示例, 安全存储器可以独立于设备 1310。作为另一示例, 安全存储器可以是设备 1310 的一个组成部分。安全存储器可以是非易失性存储器, 从而确保完整性信息的安全。
图 14 示出了根据本公开的另一实施例的用于数据完整性的保护的设备的示意性 框图。该设备 1410 也采用上述实施例 / 示例中的方法来生成数据的完整性信息和验证信 息, 可以用作上述实施例 / 示例中所述的信息生成方设备 ( 如 510)。与图 13 所示的实施例 不同的是, 该设备 1410 通过外部的时间戳服务器来生成数据的时间戳。
如图 14 所示, 设备 1410 可以包括数据分块装置 1412、 完整性信息生成装置 1414、 发送装置 1416-1 和接收装置 1416-2。
数据分块装置 1412 与图 13 所示的数据分块装置 1312 相似, 用于将要保护的数据 分成多个数据块。数据分块装置 1412 可以采用上述实施例 / 示例中所述的方法来分割数 据, 这里不再重复。
完整性信息生成装置 1414 与图 13 所示的生成装置 1314 相似, 用于利用第一哈希
函数来计算数据分块装置输出的每个数据块的哈希值, 得到多个分块哈希值。这些分块哈 希值形成第一哈希链。然后, 完整性信息生成装置 1414 进一步利用第二哈希函数、 根据第 一哈希链来计算第二哈希链。第二哈希链包括多个链哈希值, 每个链哈希值与所述第一哈 希链中的对应的分块哈希值关联并与所述第二哈希链中的相邻链哈希值关联。 完整性信息 生成装置 1414 可以采用上述实施例 / 示例中所述的方法来生成第一哈希链和第二哈希链 ; 所采用的第一和第二哈希函数可以彼此相同, 也可以相互不同, 这里也不再重复。
所生成的第一哈希链和第二哈希链作为要保护的数据的完整性信息。
发送装置 1316-1 可以将第二哈希链中的最后一个链哈希值发送给时间戳服务器 1470。时间戳服务器 1470 可以采用任何适当的方式利用该链哈希值来生成时间戳文件, 并 反馈给设备 1410。 接收装置 1316-2 可以接收时间戳服务器反馈的时间戳信息, 并将其作为 要保护的数据的验证信息。
完整性信息生成装置 1414 所生成的完整性信息可以保存在安全存储器 ( 图 14 中 未示出 ) 中。作为一个示例, 安全存储器可以独立于设备 1410。作为另一示例, 安全存储器 可以是设备 1410 的一个组成部分。安全存储器可以是非易失性存储器, 从而确保完整性信 息的安全。 上述设备 1410 或 1310 还可以包括数据存储装置 ( 未示出 ), 以便存储要保护的数 据和验证信息。
图 15 示出了根据本公开的一个实施例的用于数据完整性的验证的设备的示意性 框图。该设备 1520 采用上述实施例 / 示例中的方法来验证数据的完整性, 可以用作上述实 施例 / 示例中所述的信息验证方设备 ( 如 420 或 520)。
如图 15 所示, 设备 1520 可以包括数据分块装置 1522、 哈希计算装置 1524、 验证装 置 1526。
数据分块装置 1522 用于将待验证的数据分成多个数据块。数据分块装置 1522 可 以采用上述实施例 / 示例中所述的方法来分割数据, 这里不再重复。
哈希计算装置 1524 用于利用第一哈希函数来计算数据分块装置 1522 输出的每个 数据块的哈希值, 得到多个分块哈希值。这些分块哈希值形成第一哈希链。然后, 哈希计算 装置 1524 进一步利用第二哈希函数、 根据第一哈希链来计算第二哈希链。第二哈希链包括 多个链哈希值, 每个链哈希值与所述第一哈希链中的对应的分块哈希值关联并与所述第二 哈希链中的相邻链哈希值关联。哈希计算装置 1314 可以采用上述实施例 / 示例中所述的 方法来生成第一哈希链和第二哈希链, 这里也不再重复。
验证装置 1526 可以利用计算装置 1524 基于待验证的数据而生成的第二哈希链中 的最后一个链哈希值以及待验证的数据的验证信息来判断数据的完整性。 待验证的数据的 验证信息可以包括该数据的数字签名和 / 或时间戳信息, 这里不作限定。验证装置 1526 可 以采用图 7 或图 8 所示的方法来验证数据的完整性, 这里不再重复。
作为一个示例, 设备 1520 还可以包括错误定位装置 1528。错误定位装置 1528 可 以在验证装置 1526 确定待验证的数据不完整时获取原始数据的完整性信息, 并根据完整 性信息来定位待验证的数据中出现错误的数据块。 完整性信息可以包括信息生成方基于原 始数据而计算得到的第一哈希链和第二哈希链, 原始数据的第一哈希链包括多个分块哈希 值 ( 称为原始分块哈希值 ), 原始数据的第二哈希链包括多个链哈希值 ( 称为原始链哈希
值 )。作为示例, 错误定位装置 1528 可以采用上文中参考图 9 或图 10 或图 11 来描述的方 法来定位错误数据块, 并进一步验证数据的验证信息 ( 签名信息和 / 或时间戳信息 )。
在本公开的实施例中, 采用如上所述的双哈希链结构 ( 第一哈希链和第二哈希 链 ) 用于数据的完整性保护。采用这种方法或设备或系统, 可以快速地生成数据的完整性 信息。 由于采用了双层的哈希链结构而第二哈希链将第一哈希链的分块哈希值依次连接起 来, 因此, 在数据部分缺失或出现错误的情况下, 可以快速定位出现错误的数据块所处的位 置或者区域。另外, 由于第一哈希链中的分块哈希值是与数据块一一对应的, 因此, 即使部 分数据块缺失或错误, 验证方也可以验证其他部分的数据的完整性。 另外, 根据本公开的实 施例的方法、 设备或系统在保证数据安全和系统开销之间可以达到良好的平衡。
根据本公开的实施例的方法、 设备或系统既适用于数据传输系统中的数据保护, 也适用于数据存储系统中的数据保护, 例如, 可以应用于视频监控、 知识产权保护、 数据传 输等多种应用场景, 可以为这些应用提供了灵活而鲁棒的完整性保护。
另外, 在本公开的一些实施例和 / 或示例中, 用于存储完整性信息的存储器可以 是可信第三方。而在另一些实施例和 / 或示例中, 用于存储完整性信息的存储器可以为非 易失性存储器既可, 这样既可以保证完整性信息的存储的安全, 也可以减轻对可信第三方 的依赖。
应理解, 上述实施例和示例是示例性的, 而不是穷举性的, 本公开不应被视为局限 于任何具体的实施例或示例。另外, 在上述实施例和示例中, 采用了 “第一” 、 “第二” 等表 述。 本领域的普通技术人员应理解, 上述表述只是为了对这些表述作文字上的区分, 而并非 表示其顺序或任何其他限定。
作为一个示例, 上述方法的各个步骤以及上述设备的各个组成模块和 / 或单元可 以实施为软件、 固件、 硬件或其组合。 作为一个示例, 在通过软件或固件实现的情况下, 可以 从存储介质或网络向具有专用硬件结构的计算机 ( 例如图 16 所示的通用计算机 1600) 安 装构成用于实施上述方法的软件的程序, 该计算机在安装有各种程序时, 能够执行各种功 能等。
在图 16 中, 中央处理单元 (CPU)1601 根据只读存储器 (ROM)1602 中存储的程序或 从存储部分 1608 加载到随机存取存储器 (RAM)1603 的程序执行各种处理。 在 RAM 1603 中, 也根据需要存储当 CPU 1601 执行各种处理等等时所需的数据。CPU 1601、 ROM 1602 和 RAM 1603 经由总线 1604 彼此链路。输入 / 输出接口 1605 也链路到总线 1604。
下述部件链路到输入 / 输出接口 1605 : 输入部分 1606( 包括键盘、 鼠标等等 )、 输 出部分 1607( 包括显示器, 比如阴极射线管 (CRT)、 液晶显示器 (LCD) 等, 和扬声器等 )、 存 储部分 1608( 包括硬盘等 )、 通信部分 1609( 包括网络接口卡比如 LAN 卡、 调制解调器等 )。 通信部分 1609 经由网络比如因特网执行通信处理。根据需要, 驱动器 1610 也可链路到输 入 / 输出接口 1605。 可拆卸介质 1611 比如磁盘、 光盘、 磁光盘、 半导体存储器等等根据需要 被安装在驱动器 1610 上, 使得从中读出的计算机程序根据需要被安装到存储部分 1608 中。
在通过软件实现上述系列处理的情况下, 从网络比如因特网或存储介质比如可拆 卸介质 1611 安装构成软件的程序。
本领域的技术人员应当理解, 这种存储介质不局限于图 16 所示的其中存储有程 序、 与设备相分离地分发以向用户提供程序的可拆卸介质 1611。可拆卸介质 1611 的例子包含磁盘 ( 包含软盘 ( 注册商标 ))、 光盘 ( 包含光盘只读存储器 (CD-ROM) 和数字通用盘 (DVD))、 磁光盘 ( 包含迷你盘 (MD)( 注册商标 )) 和半导体存储器。或者, 存储介质可以是 ROM 1602、 存储部分 1608 中包含的硬盘等等, 其中存有程序, 并且与包含它们的设备一起 被分发给用户。
本公开还提出一种存储有机器可读取的指令代码的程序产品。 所述指令代码由机 器读取并执行时, 可执行上述根据本公开实施例的方法。
相应地, 用于承载上述存储有机器可读取的指令代码的程序产品的存储介质也包 括在本公开的公开中。所述存储介质包括但不限于软盘、 光盘、 磁光盘、 存储卡、 存储棒等 等。
在上面对本公开具体实施例的描述中, 针对一种实施方式描述和 / 或示出的特征 可以用相同或类似的方式在一个或更多个其它实施方式中使用, 与其它实施方式中的特征 相组合, 或替代其它实施方式中的特征。
应该强调, 术语 “包括 / 包含” 在本文使用时指特征、 要素、 步骤或组件的存在, 但 并不排除一个或更多个其它特征、 要素、 步骤或组件的存在或附加。
此外, 本公开的方法不限于按照说明书中描述的时间顺序来执行, 也可以按照其 他的时间顺序地、 并行地或独立地执行。 因此, 本说明书中描述的方法的执行顺序不对本公 开的技术范围构成限制。
尽管上面已经通过对本公开的具体实施例的描述对本公开进行了披露, 但是, 应 该理解, 上述的所有实施例和示例均是示例性的, 而非限制性的。 本领域的技术人员可在所 附权利要求的精神和范围内设计对本公开的各种修改、 改进或者等同物。 这些修改、 改进或 者等同物也应当被认为包括在本公开的保护范围内。