(知识点补充二)merkle树和MB-Tree

本文探讨了Merkle树(M-Tree)在数据真实性和完整性验证中的作用,特别是在外包数据库的静态场景中。介绍了两种结构,ASB-Tree和MB-Tree,它们如何通过聚合签名和哈希值计算提升查询效率和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

merkle 树结构(M-Tree)

Merkle hush Tree用于验证一组数据值。使用最简单的形式解决适合主存的点查询和数据集查询认证问题。M-Tree是二叉树,其中叶节点包含数据值的hush,非叶子节点包含其两个子节点hash of the concatenation值。
在这里插入图片描述
查询任何一个数值的真实性需要对比计算log(n)个hush值,因为
在这里插入图片描述

其他结构

我们还提供了所有技术的分析成本模型,给出了各种性能指标。本文主要贡献:详细的分析建模,使用户能够决定哪种结构最能满足他们的需要。
介绍三个应用在静态场景(即在外包数据库中所有者的和服务器之间不发生数据更新)中保证查询正确性和完整性的三个方法:
1. Aggregated Signatures with B±trees(ASB-Tree)
首先,所有者分别对数据库中所有连续的元组取hush值并进行签名,假设某种排序次序方式为A。在这里插入图片描述
给定两个连续的元组ri,rj,owner将(ri,si)发送给服务器,其中si=S(ri|rj),‘|’是表示字符串的规范配对,这些字符串可以唯一地被解析回其两个组件中;第一个和最后一个元组可以与特殊标记记录配对。
为了提高服务器的查询效率,在属性A的顶部构建B+树。
服务器可以为所有结果发送一个组合签名Sπ,而不是每个查询结果都发送一个签名,并且客户端可以使用聚合验证而不是单独的验证。
2. Merkle-BTree(MB-Tree)
MB-tree可以像B+树那样工作,由普通B+树扩展节点组成,节点用一个哈希值扩展,每个哈希值与每个指针条目相关联。节点上的哈希值的计算与M-Tree相似。
在这里插入图片描述
上图为扩展叶节点hash表示,索引节点的hash计算方式。
叶节点hash由数据库计算hi=H(ri
假设每个索引节点节点的扇出为fm,则h = H(h1|···|h fm )
计算所有哈希值之后,所有者必须使用私钥对根的哈希进行签名。
为实现范围查询,服务器构建VO自顶向下遍历两遍b+树,得到查询左右边界,返回范围内的查询结果。服务器需要遍历访问VO中包含的每个索引节点包含条目的对应哈希值,除了在下(上)边界遍历期间遍历的左(右)指针的hash值。
客户端可以迭代计算与查询结果相对应的子树的所有hash,直到根使用到VO。首先计算查询结果的hash,并分组成相应的叶节,进程继续迭代,直到查询子树的所有散列都被计算出来。在计算出根的哈希值后,客户端可以使用所有者的公钥和根的签名哈希来验证计算的正确性,可以通过单独签署所有数据库元组(B+树的每个节点)来避免在验证期间构建整个查询子树。
MB-tree分析成本模型如下:

注释:B+树索引只能查到被查找数据行所在的页,然后数据库通过把页读入内存,再在内存中查找,最后得到结果。

在这里插入图片描述

SymbolDescription
PPage size
pA B±tree pointer
hA hash value

“+1“的原因
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MB树的一个重要优点是存储成本不一定反映所有者/服务器通信成本。在计算根的最终签名之后,所有者不必将所有哈希值传输到服务器,而只传输数据库元组。服务器可以通过重新创建MB-Tree来重新计算哈希值。由于hush计算很便宜,虽然服务器的计算成本略有增加,但是这种技术将大大降低所有者/服务器的通信成本。

参考论文:Dynamic Authenticated Index Structures for Outsourced Databases

### PyCharm 打开文件显示全的解决方案 当遇到PyCharm打开文件显示全的情况时,可以尝试以下几种方法来解决问题。 #### 方法一:清理缓存并重启IDE 有时IDE内部缓存可能导致文件加载异常。通过清除缓存再启动程序能够有效改善此状况。具体操作路径为`File -> Invalidate Caches / Restart...`,之后按照提示完成相应动作即可[^1]。 #### 方法二:调整编辑器字体设置 如果是因为字体原因造成的内容显示问题,则可以通过修改编辑区内的文字样式来进行修复。进入`Settings/Preferences | Editor | Font`选项卡内更改合适的字号大小以及启用抗锯齿功能等参数配置[^2]。 #### 方法三:检查项目结构配置 对于某些特定场景下的源码视图缺失现象,可能是由于当前工作空间未能正确识别全部模块所引起。此时应该核查Project Structure的Content Roots设定项是否涵盖了整个工程根目录;必要时可手动添加遗漏部分,并保存变更生效[^3]。 ```python # 示例代码用于展示如何获取当前项目的根路径,在实际应用中可根据需求调用该函数辅助排查问题 import os def get_project_root(): current_file = os.path.abspath(__file__) project_dir = os.path.dirname(current_file) while not os.path.exists(os.path.join(project_dir, '.idea')): parent_dir = os.path.dirname(project_dir) if parent_dir == project_dir: break project_dir = parent_dir return project_dir print(f"Current Project Root Directory is {get_project_root()}") ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无情备课机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值