1 引言
验证 Merkle 签名是为了表明某个叶结点是否一定存在于原始的 Merkle 哈希树中。根据叶结点和相应的认证路径重新计算出 Merkle 哈希树的根结点的值 R**.把 R**与原始签名树的根结点的值 R*进行比较,如果相等,则表明相应的叶结点一定存在于原始的 Merkle 哈希树中。
3 真实性保护的方法
3.1 符号说明
A: 政府部门; B: 用户( Ksig,Kver) : 政府部门 A 的公/私密钥对,政府部门 A 拥有相应的公钥证书;Q = SigA( X) : 表示 A 用私钥 Kver对信息 X 进行签名运算,产生数字签名 Q;VerA( Q) : 表示对 A 的数字签名 Q 的验证。
M: 表示发布的信息; T: 表示网页发布时间;H: 代表安全的 Hash 函数。
3.2 方法和步骤
本文提出的保护政务信息真实性的思想是: 政府部门在发布信息时,先对网页构造 Merkle 哈希树,将主网页及链接子网页作为叶子节点,计算哈希值,并两两结合,得到 Merkle 哈希树的根节点的值 R( A) ,对 R( A) 和信息发布时间 T 的组合的Hash 值进行签名,生成数字时间戳,然后将签名和验证路径附加在网页里发送给第三方转载。客户端在第三方浏览时下载网页、数字签名和验证路径,对网页真实性进行验证。
具体步骤如下:
( 1) A 先对发布信息网页构造 Merkle 哈希树;① 使用单向 Hash 函数( 如 MD5 或 SHA-1)计算各个网页 S1,S2,…,Si( i=1,…n) 的 Hash 值,这些 Hash 值作为 Merkle 哈希树的叶节点的值。② Merkle 哈希树的每个中间节点( 包括根节点) 的值是将其左右子节点的值拼接后计算出的Hash 值。假设有 4 个网页 S1,S2,S3 和 S4,则 Merkle 哈希树构成如图 2 所示。
如果网页是奇数组成,而不是偶数,我们采取的方法是在把孩子层的结点从左到右两两配对后剩下的结点移到本层。如果本层的结点数仍成奇数,则再采取上述方法直至该结点找到与之配对的结点为止,如图 3 所示。
( 2) A 对 R( A) 和信息发布时间 T 的组合的Hash 值进行数字签名,生成数字时间戳: Q = SigA( H( R( A) / /T) ) ;( 3) A 将签名 Q 和要发布的各个网页及其验证路径发送给第三方;( 4) B 在第三方浏览网页时,下载网页、签名及验证路径;( 5) B 验证数字签名: VerA( Q) ;( 6) B 按下载的网页和验证路径重新计算Merkle 哈希树的根节点 R( B) ,然后计算 H( R( B)/ / T) ,并将结果与 H( R( A) / / T) 进行比较,如果相等,则说明网页真实,否则说明网页遭到破坏、篡改或替换。
4 性能分析
安全性讨论: 如果有人试图伪造( 通过非法修改或替换) 网页信息,一种方法是用伪造的网页和其他网页一起重新构造产生另一 Merkle 哈希树,然后对其根节点伪造 A 的签名,但是由于第三方不知道 A 的私钥,因此他无法伪造 A 的签名; 第二种方法是第三方对伪造网页生成相应的认证路径,使得通过它们计算出的根节点的值与合法的 R( A) 相同,但是由于 h( ) 是单向散列函数,这些参数想要从哈希函数逆推出来在计算上是无法实现的,离散对数难题使得这种计算是无法实现的。
时间和空间的开销: 存储开销为信息发布时信息所需的存储空间和保存相应的 Merkle 签名树所需存储空间。假设主网页及其链接的子网页有 n个,则验证每个网页需要提供「log2n」个其他节点的值作为 Merkle 哈希树的认证路径; 验证所有的 n个网页节点,最坏情况下需要「log2n」×n 个其他节点的值作为 Merkle 哈希树的认证路径。
Hash 函数采用 SHA-1 数据加密法,对于长度小于 2^64 位的消息,SHA1 会产生一个 160 位的消息摘要,每个节点的值采用 20 位的存储空间。
表 1 中的分析结果表明: 本文所提出的模型产生的额外存储开销是可以接受的。
在配置为 Intel CPU 2.7GHz,4GRAM 的机器上,使用 C++语言编写了 N=1000 参数的算法模拟程序。在程序运行中,全部节点的验证时间为52μs,时间开销是可以接受的。
5 结语
本文所提出的保护信息真实性的方法中,传输的数据除了网页数据以外,还有网页的认证信息,其中主要是网页的认证路径的信息,在政府发布信息时采用本文的方法增加的信息传输量不大,额外开销可以接受。这种基于 Merkle 树实现电子政务中信息发布真实性校验策略,使用基于时间戳的数字签名的方法保证获得信息的正确性和完整性,开销较小,是一种比较实用的数据真实性保护方法。
此种方法还可扩大到实际运用的其它方面,例如云存储完整性检测、云计算中数据安全性检测等等。
此种方法对于信息发布的数据量是有效的,对于云存储、云计算中,用户数目巨大,存在成千上万的节点认证路径,使用此方法代价太大,还有待于做进一步的研究扩展。
参考文献
[1]姚滢。网页防篡改系统的研究与设计方案[J].计算机安全,2010( 6) .
[2]Rivest R. RFC 1321: The MD5 message -digest algorithm[J]. Internet activeties board,1992( 143) .
[3]Bertoni G,Daemen J,Peeters M,et al. Thekeccak sha - 3 submission[J]. Submission to NIST( Round 3) ,2011 ( 8) .
[4]Mykletun E. Narasimha M. Tsudik G. Au-thentication and integrity in outsourced databases[J].ACM Transactions on Storage,2006 ( 2) .
[5]张晓燕,范冰冰。基于 Merkle 树的移动平台文件完整性校验 [J].计算机系统与应用,2010( 9) .
[6]李添杰,刘述,高强。基于 Merkle 树的 P2P流媒体内容完整性校验 [J].计算机工程与设计,2015( 7) .