不经意数据库相关研究

抵抗inference attack

关键是隐藏访问模式:隐藏访问内容+访问时间/访问次数/访问顺序等

ObliDB:star2:

  • Proceedings of the VLDB Endowment,Volume 13,Issue 2,October 2019

  • Stanford University

威胁模型:

  • 读取并篡改不可信内存
  • 暂停和恢复Enclave执行
  • 观察到对不可信内存的访问模式
  • 监听网络通信
  • 了解存储的数据的辅助信息
  • 无法突破SGX远程认证
  • 假设:不经意内存有限

安全保证:

  • 探测到任何篡改数据的恶意行为
  • 只泄露查询选择率(select行的比例),表的大小(包括输出表和中间表)和查询方案
  • 可选的padding模式,可以隐藏表的大小和查询选择率
  • 在enclave外的数据经过加密和MAC计算,仅泄露大小
  • 数据库中表的数量 & 查询了哪张表不作隐藏

Overview:

image-20220404194724441
  • 不经意数据库引擎支持小规模查询和分析查询(需要遍历整张表)
  • 表加密存储在不可信内存但是访问模式被隐藏
  • 两种存储方案:线性表、不经意索引(用于单点查询)
  • Enclave用于存储密钥、元数据,不经意算子在Enclave中执行

存储方案

扁平化存储

数据存储在相邻的块中,每次读/写都需要访问所有块(整张表),用于存储:

  • 小的表
  • 操作后返回表的大部分区域的表
  • 涉及读取全部或大部分表的分析

数据的插入、更新、删除需遍历整张表,对未受影响的块进行虚拟写(重新写一遍所有数据并重新加密)

索引存储

对B+树的插入/删除操作会泄露树的结构信息 => 使用虚拟ORAM访问,填充所有插入/删除操作,使其访问次数与最坏情况匹配

优化:

  • 懒写回:只在必要的时候写入ORAM,否则将节点保留在enclave中
  • 移除指向父节点的指针

Opaque

  • 14th USENIX Symposium on Networked Systems Design and Implementation (NSDI 17)

  • UC Berkeley

Opaque relies on oblivious sorts over the entire dataset. These systems are not efficient for more general workloads that may also include point queries.【ObliDB】(单点查询效率低)

仅达到了Level 1的不经意性,因为使用不经意内存池进行优化【O-Join】

不经意分布式数据分析平台:

  • 引入一系列新的分布式关系运算符
  • 新的查询规划技术,rule-based和cost-based
  • 三种运行模式:加密模式、不经意模式、不经意填充模式

威胁模型

  • 观察和修改网络通信
  • 获取操作系统的root权限
  • 观察enclave对不可信内存的访问模式
  • 可以进行回滚攻击,将密封的数据恢复到之前的状态
  • 不能破坏可信硬件
  • 对Opaque源码的访问是不经意的

安全保证

加密模式

  • 数据加密和身份认证
  • self-verifying integrity

不经意模式

  • 隐藏访问模式,但不隐藏访问的数据大小,以及Catalyst选择的查询方案

不经意填充模式

  • 在不经意模式的基础上,进一步隐藏数据大小和查询方案

Overview

image-20220405165557918

不经意执行

  • 不经意排序(单机 & 分布式)
  • 不经意过滤(filter)
  • 不经意聚合(group)
  • 不经意连接(join)

查询规划

  • 成本模型:主要考虑不经意排序的次数
  • 查询优化
  • 混合敏感性:使用second path analysis来推断敏感表

OCQ

  • Proceedings of the Fifteenth European Conference on Computer Systems 2020

  • UC Berkeley

OCQ[33]是一个不经意的协同竞争分析的通用框架,它建立在Opaque[87]的基础上,以分散的方式执行协同竞争查询。【Practical O-Join】

多方不经意竞争分析的解决方案,而不是设计一个数据库

image-20220408145702098

主要贡献:

  • 不经意查询算法
  • schema-aware填充机制:防止两种数据泄露——enclave中的数据泄露和enclave外网络通信中的模式泄露
  • 不经意规划器:决定在哪执行操作以及如何执行

不经意算法:

Single-machine oblivious sorting can be done using sorting networks that perform a fixed sequence of compare-exchange operations. Asymptotically more compare-exchange operations are needed for oblivious sorting than for traditional sorting. An oblivious compare-exchange can be implemented via a comparison followed by a conditional swap of two equal-length buffers depending on the result of the comparison.

For data partitioned across multiple machines, oblivious sorting can be accomplished using a two-level sorting algorithm in which each partition is individually sorted using a sorting network, and records are sorted across partitions using an algorithm called column sort. Column sort consists of a fixed sequence of data exchange and intra-machine sorting
that uses only 4 shuffles, compared to O(nlog2n) shuffles for a sorting-network-based distributed sort.

image-20220408162528084

Overview

image-20220408163008436

Oblivious join:star2:

  • Proceedings of the VLDB Endowment 2020

  • University of Waterloo 滑铁卢大学

  • 提出时间复杂度为 $O(nlog^2n+mlogm)$ 的不经意equi-join算法,其中 $n$ 是输入表大小之和, $m$ 是输出表大小

    • equi-join是指根据相等的条件来join两张表
  • 该算法只依赖于能够在加密数据上支持sorting network的计算模型

  • 不隐藏输出大小和运行时间

在加密数据上进行计算

  • Outsourced External Memory
  • Secure Cryptographic Coprocessors
  • TEE
  • Secure Multiparty Computation
  • Fully Homomorphic Encryption

不经意性划分

  • Level 1:对公共内存的访问是不经意的,但需要非常数量的本地内存来执行non-oblivious计算
  • Level 2:对公共内存的访问是不经意的,且需要的本地内存大小是一个常数
    • 访问程序的数据是不经意的,但是基于控制流访问的字节码没有隐藏。例如分支语句,条件本身是不经意的,但是跳转到的分支的字节码位置没有隐藏
  • Level 3:程序的控制流,甚至处理器执行的指令,都与输入无关

将Level 2的程序转变为Level 3的程序需另外满足3条限制:

  1. 循环次数必须是常数(因为若根据变量来定循环次数,会很难隐藏执行循环的时间)
  2. 任何变量执行的最大分支数是一个常数
  3. 若一个程序暴露输出长度 $m$ ,则这一定在分配了 $m_0\in\Omega(m)$ 的内存之后

Overview

  • 输入两张未排序的表 $T_1$ 和 $T_2$ ,分别包含 $n_1$ 和 $n_2$ 对 $(j,d)$ ,其中 $j$ 表示参与join条件判断的属性, $d$ 是其他属性。输出记为 $T_1\bowtie T_2={(d_1,d_2)|(j,d_1)\in T_1, (j,d_2)\in T_2}$
  • 使用固定大小的本地内存来实现Level 2的不经意性

算法

image-20220409170313852

ProDB

  • Information Systems 2021

  • The Hong Kong Polytechnic University 香港理工大学

  • 使用enclave+ORAM的方案来优化硬件资源不足的问题
  • 提出SaP ORAM协议,用来实现enclave到不可信区的通信
  • 不支持并发控制,回滚机制,数据库日志

Overview

  • 安全模型:Memory-secure DBMS

    image-20220507125041216
  • two-tier设计:

    image-20220507125121199
    • core(部署在TEE中)
      • SQL Decryptor:在TEE中解密SQL query
      • Secure Query Processor (SQP):与传统处理query的组件相同,除了I/O access
      • ORAM Analyzer (OA):利用SQL query历史信息的meta-data来规划最优的分配数据块到ORAM树path的方案
      • ORAM Clients:每个client对应一个server,SQP通过client获取不可信内存中的数据
    • shield(部署在不可信内存)
      • DBMS Main Process:主程序
      • ORAM Servers:树形结构,以ORAM-to-Disk机制将数据安全地写入磁盘
  • work-flow

    image-20220507131334471 image-20220507131443081

SaP ORAM

probabilistic lazy persistence

image-20220507132908310
  • Tagged position map:tag-address-path映射
  • Update list:存储被SQL query更新的块(而不是被ORAM重加密更新的),不能被敌手知道哪些块在Update list中
    • probabilistic dirty-block-generation procedure

SQL-aware path sharing

目的:减少查询内和查询间的ORAM轮数

核心思想:在一轮ORAM中从树的path中获取多个块(ORAM Analyzer跟踪那些经常一起访问的块,并尽可能多地将它们放在同一ORAM树路径中)

具体方案:没细看

Obladi

  • Proceedings of the 13th USENIX Symposium on Operating Systems Design and Implementation (OSDI’18)

  • Cornell University

Obladi [28] considers concurrent ACID transactions but does not support indexes and only processes operations in batches over discrete time epochs.【ObliDB】

Obladi[32]是第一个在隐藏访问模式的同时提供ACID事务的系统。它批量处理操作,但不支持索引【Practical O-Join】

【主要是事务和并发的实现】

第一个提供ACID事务的kv数据库

  • 容错机制
  • 并发控制

Practical Oblivious Join

  • SIGMOD '22: Proceedings of the 2022 International Conference on Management of Data

  • 西安电子科技大学,阿里巴巴

:star2:【参考文献整理】

  • 对以往的不经意Join算法进行整理比较

  • 提出了两种用于一般二元equi-join的不经意算法

    • oblivious sort-merge join
    • oblivious index nested-loop join
  • 通过扩展index nested-loop join来支持一些band join(如"<“和”>")

  • 使用index nested-loop join来支持多个表上的非循环equi-join

Oblivious Query Processing

  • Microsoft Research

Contributions

  • 对安全查询处理的形式化定义
  • 设计占用较小TM(Trusted Module)的不经意算法
    • 定理1(Informal):$O(log,n)$ TM空间占用的不经意算法的存在性
    • 定理2(Informal):I/O复杂度
  • 实现时间复杂度 $O(nlog,n)$ ,TM空间占用 $O(log,n)$ 的不经意算法
    • ORAM-based算法时间复杂度的下界为 $\Omega(nlog^2n)$
  • 除了不经意排序,所有算法都基于磁盘扫描;不经意排序基于磁盘搜索, 搜索次数 $O(log_{M/B}(n/B))\cdot o(n/B)$ 【M为TM内存,B为block大小】
    • ORAM-based算法磁盘搜索次数 $\Omega(\frac{n}{BlogM}log^2{\frac{n}{B}})$

对比

数据库类型 支持 特点 实现
ObliDB 关系型 索引 TEE+ORAM
Opaque Spark SQL 分布式 TEE
OCQ Opaque 分布式 TEE
ProDB DBMS(关系型) SaP ORAM协议 TEE+ORAM
Obladi kv数据库 事务 并发ORAM ORAM
CODBS 关系型(PostgresSQL) 索引 形式化证明:star2: TEE+ORAM
O-Join 关系型 二元equi-join TEE
Practical O-Join 关系型 综合Join ORAM
O-Query 关系型 形式化证明:star2: 算法

不经意可搜索加密

CODBS

  • 40th International Symposium on Reliable Distributed Systems (SRDS) 2021

  • University of Porto 葡萄牙波尔图大学

  • 提出一种新的不经意搜索方案CODBS来存储数据库索引,将搜索树拆分为L个较小的ORAM实例,而不是一个较大的ORAM
  • 提出了Forest ORAM,这是一种用于存储数据库表的优化ORAM结构
  • 提出了一种优化的不经意数据库体系结构,并在PostgreSQL之上实现了一个完整的解决方案
  • 形式化证明

POSUP

  • Proceedings on Privacy Enhancing Technologies; Journal Volume: 2019

  • Oregon State University 俄勒冈州立大学

POSUP [41] and Oblix [50] explore oblivious indexes over encrypted data using specialized ORAM constructions as building blocks, but do not support general queries.【ObliDB】

使用Intel SGX开发不经意数据结构,在大数据集上提供实用的不经意搜索/更新操作

Oblix

  • 2018 IEEE Symposium on Security and Privacy (SP)

  • UC Berkeley

POSUP [41] and Oblix [50] explore oblivious indexes over encrypted data using specialized ORAM constructions as building blocks, but do not support general queries.【ObliDB】

不泄露访问模式,并且能够隐藏搜索结果的大小;支持更新(插入和删除),以及多个(可能是恶意的)用户

  • 27th International Conference on Computer Communication and Networks (ICCCN) 2018

  • The University of Auckland 奥克兰大学

  • 提出了一种SGX辅助的对加密数据进行搜索的方案

  • 保护访问模式免受侧通道攻击,同时确保搜索效率(使用了B+树结构来保证搜索效率)

  • 处理大型数据库,而不需要在SGX上长期存储(分批加载和处理树索引)

  • 与基于oram的解决方案(如obildb)相比,我们的方案要快11倍以上

不经意性证明/分析

Memory trace oblivious program execution

KV数据库TEE

EdgelessDB

开源项目,无相关论文,兼容MySQL

Authenticated key-value stores with hardware enclaves【相关性不大】

  • Syracuse University 雪城大学
  • 支持查询认证的kv数据库,从而保护数据完整性
  • 实现认证LSM树:eLSM(with small query proofs at selective
    tree levels),将内存数据存放在enclave外部
    • 提出基于LSM树的新摘要结构:eLSM摘要,以append方式更新摘要
  • 基于Google LevelDB和Facebook RocksDB实现eLSM

LSM树

适用于写密集型workload

基本增删改查:深入浅出分析LSM树(日志结构合并树) - 知乎 (zhihu.com)

LSM树详解 - 知乎 (zhihu.com)

LSM Tree architecture

安全定义

  • Query integrity:读出的数据是否是之前合法的写请求写入的
  • Query completeness:读出的数据是否完整
  • Query freshness:读出的数据的时间戳是否最大

Aria

  • 2021 IEEE 37th International Conference on Data Engineering (ICDE)

  • 清华

现实世界的工作负载通常表现出高度倾斜的访问模式:一小部分hot KV pair收到的请求比其他多得多

  • 引入基于软件的EPC空间管理器 Secure Cache ,为KV存储提供安全保障和高性能
  • 深入研究了命中和未命中惩罚,从而优化了缓存策略
  • 基于 Secure Cache 实现Aria,一个不依赖特定index structure的kv数据库

KV存储

  • index structure:通过key找到一个KV pair
    • hash-based:简单而快速的点查询
    • tree-based:支持范围查询(有序存放key)
  • storage manager:保存KV pair

通常的设计是:将KV存储直接放在不受信任的内存中,并在EPC中构建安全元数据,以保护KV pair的完整性和机密性。这样的设计基于这样的事实:对不受信任内存中的KV pair或MAC的任何攻击都会导致从其相应计数器计算的MAC与存储在不受信任内存中的MAC之间的KV pair不匹配

image-20220513144149012 image-20220513144327253

Secure Cache

image-20220513144458587
  • Secure Cache 用于缓存最经常访问的MT节点,从而在访问这些节点时可以直接从 Secure Cache 里验证,消除了MT验证的开销(叶节点若是要验证,只需要沿着到根节点的路径,找到第一个在缓存中的节点即可)
  • 语义优化:
    • 消除metadata从enclave内部到外部的加密
    • 避免clean缓存项的写回
  • 缓存命中优化:
    • 将深层的节点固定在 Secure Cache 中(因为验证时用到的概率高)
    • 采用FIFO策略来驱逐 Secure Cache 中的节点
    • 若命中率小于一个阈值,停止swap

实现

  • 连续Merkle树
  • 用户空间堆分配器
  • 解耦合设计
  • 计数器管理
  • Put和Get实例
    • 每次get需要解密多个kv pair才能得到想要的结果,是否有优化空间?

SPEICHER

  • 17th USENIX Conference on File and Storage Technologies (FAST 19) 2019

  • The University of Edinburgh 爱丁堡大学

基于LSM树的三个设计更改:【Tweezer】

  • 必须调整MemTable以减少EPC的使用。Speicher重新设计了MemTable,使它的大部分(叶上的值)显式地存储在EPC外部,并具有加密保护
  • I/O调用必须由另一个线程在用户级别上处理,以避免在每次调用时都离开enclave上下文。Speicher使用基于Intel SPDK[1]的直接I/O库运行,这减少了额外上下文切换的成本
  • KVS应该有适当的时间戳,以击败回滚和分叉攻击。Speicher使用自己的异步单调计数器包装同步SGX单调计数器
  • 用于屏蔽执行的I/O库:I/O库在不退出enclave的情况下执行I/O操作
    • SPEICHER基于屏蔽执行框架SCONE实现
  • 异步可信单调计数器:确保数据新鲜度,利用KV存储中同步操作的延迟来异步更新计数器
  • 安全LSM数据结构:部署在enclave外部,并保证完整性,机密性和新鲜性
  • 算法:设计和实现持久化KV数据库的操作:get, put, range queries, iterators, compaction, restore

威胁模型

  • 敌手可以控制整个系统软件堆栈,包括操作系统或虚拟机监控程序,并能够发起物理攻击,例如执行内存探测
  • 防止回滚攻击和分叉攻击
  • 无法抵御侧信道攻击

设计挑战

  • 有限EPC大小:EPC分页切换开销大,因此需要将MemTable放在enclave外部,同时保证安全
  • 不可信的存储介质:存储引擎持久化三种文件:SSTable,WAL,Manifest,需要保证这三种文件的安全(SGX本身不提供对有状态计算的安全保证),因此重新设计LSM数据结构
  • 昂贵的I/O系统调用:SCONE提供异步系统调用接口,但不适合需要支持频繁I/O系统调用的存储系统,因此设计了一种新的I/O机制
  • 可信计数器:用于保护存储在不可信存储介质中的数据的新鲜性,SGX可信计数器十分慢,因此设计了异步可信单调计数器

Overview

image-20220514193251916
  • SPEICHER controller:基于SCONE实现,提供可信执行环境、远程认证、enclave内部用户级多线程和内存管理的运行时支持

  • 屏蔽I/O库:从enclave内部直接访问磁盘,而不需要昂贵的exit操作,通过SPDK实现

  • 可信计数器:防止回滚攻击,设计异步单调计数器AMC

  • MemTable:key存放在enclave中的跳表里,value加密存放在不可信内存【存在线性增长导致EPC页切换的问题】
    image-20220515135232118

  • SSTable:KV按序排列并经过加密,每个block的hash存放在footer,footer的hash记录在enclave中的Manifest中从而确保新鲜性
    image-20220515140347727

  • Log文件:append-only

    image-20220515142027419 - WAL:存放插入的KV pair直到top-level compaction,用于restore WAL - Manifest:跟踪实时文件

算法

  • Put:将KV pair添加到WAL,然后写到MemTable
  • Get:需要生成存在证明或不存在证明
  • Range queries:根据start key构建Iterator进行遍历,对于每个key,找到最顶层的value
  • Iterators
  • Restore:收集所有属于KV存储的文件(通过读取Manifest),然后重放所有变化到MemTable
  • Compaction

EnclaveCache

  • Proceedings of the 20th International Middleware Conference 2019

  • SJTU

对多租户云环境的KV数据库进行用户隔离等保护【不相关】

ShieldStore:star2:

  • Proceedings of the Fourteenth EuroSys Conference 2019

  • School of Computing, KAIST 韩国科学技术院

随着密钥空间的增长,ShieldStore由于bucket变长而承受着巨大的验证开销【Aria】

image-20220515165456061

Baseline kv存储

【不是直接用业界成熟的kv数据库,而是自己实现一个简单版本的内存kv存储】

  • 基于哈希的索引结构:高效点查询,范围查询困难
  • 为相同的哈希值创建链表,来抗碰撞
  • server-side加密和计算数据

Overview

image-20220516132128859

只将主要的密钥和meta-data存放在enclave中,主哈希表经过加密后存放在非可信区

设计

key-value加密

image-20220516133315251
  • 通过对hash索引使用keyed-hash函数,可以将hashed键分布中的信息泄漏降至最低【进一步优化?】
  • 通过key hint来在一个bucket中快速找到对应的value
  • 若一个key更新,IV/counter会增加;若创建新的kv pair,会插入到bucket的头部

完整性校验

对每个bucket set维护一个Merkle root,而不是对所有kv pair维护一个Merkle tree【时间、空间复杂度分析?】

持久化

周期性snapshot

image-20220516142521396
  • parent进程密封enclave内的meta-data,child进程直接存储不可信内存中的哈希表
  • 在snapshot的同时处理新的请求,使用临时表
  • 使用SGX提供的单调计时器防止回滚攻击【使用效率更高的安全计时器?】

优化

  • 额外的堆分配器:在enclave内运行,分配外部不可信内存(为了减少OCALL)
  • MAC bucket:每个hash bucket维护一个,用来存放每个条目的MAC,从而快速计算merkle proof 而不用遍历整个chain
    image-20220516144220072
  • 多线程:不同的线程处理不同的hash key,从而避免同步,但线程数量只能固定,不能动态变化【使用Occlum改进?】
    image-20220516144516641
  • 搜索加密的key:使用1字节明文key的hash作为hint,从而减少需要解密的次数(只对匹配hint的key进行解密来判断是否是target key)

ZeroTrace:star2:

  • NDSS 2018

  • University of Waterloo 滑铁卢大学

ZeroTrace[66]在set/dictionary/list接口上提供了一个新的不经意的get/put/insert操作库【Practical O-Join】

  • 设计和实现了一个不经意内存管理器
  • 设计和实现 ZeroTrace,一个用来不经意处理数据结构的库

安全威胁

  • enclave内对外部内存的访问是完全暴露于server的
  • enclave内部的执行不能保证不经意性
  • server可以随时终止enclave从而造成某些攻击
  • 不抵抗硬件攻击、硬件制造的漏洞、拒绝服务攻击

定义

  • enclave执行的不经意性(计算不可区分)
  • SGX的安全挑战
    • 软件侧信道
    • 不能对超出EPC范围的存储提供隐私/完整性保护
    • 没有直接的IO/系统调用
  • SGX的性能挑战
    • EPC大小限制
    • 可信区和不可信区切换
  • ORAM正确性和安全性定义(可忽略函数/计算不可区分)

ZeroTrace内存控制器

image-20220518095737812
  • client接口:read(addr)write(addr, data)

  • server处理: FetchPath(leaf)StorePath(tpath, leaf)

  • 内存管理器enclave程序:

    • 初始化:将程序加载到enclave中

    • 构筑块:

      • 不经意函数:根据汇编级别的函数库构建ORAM控制器
      • 加密和哈希:使用AES-NI和SHA-256
    • ORAM控制器:处理client请求 (op, id, data*)

      • 不经意leaf-label检索
      • 不经意block检索
      • 不经意path重建
  • Fetch/Store path优化

    • 使用多个磁盘扩展带宽
    • 缓存ORAM树的顶层
  • 安全性分析(informal)

    image-20220518141008565

持久化的完整性

  • 定义fault tolerance的enclave协议
  • functionality和security
  • 抵抗mix-and-match攻击
  • 抵抗重放攻击

Precursor

  • Proceedings of the 22nd International Middleware Conference 2021

  • TU Braunschweig 布伦瑞克工业大学 德国

  • 利用TEE来提供保密性和完整性,同时依赖于RDMA进行低延迟和高带宽通信

  • 将加密操作放在客户端,以防止服务器端CPU瓶颈

  • 尽可能避免昂贵的TEE上下文切换,即安全区和非安全区的切换

TEE-KV

  • Proceedings of the ACM Symposium on Cloud Computing 2018

  • Tokyo University of Agriculture and Technology 东京农工大 & 蚂蚁 & Microsoft Research Asia 微软亚洲研究院

【只有一个Abstract,这是个啥?】

Oblivious key-value stores and amplification for private set intersection

  • Annual International Cryptology Conference 2021

  • Oregon State University 俄勒冈州立大学

【形式化证明,没有用到SGX】

  • 引入了无关键值存储(OKVS)的抽象,确定并形式化了允许OKVS接入不同协议的重要属性

  • 描述了放大技术,可以用来将较弱的OKVS引导为强OKVS

Tweezer

  • 20th USENIX Conference on File and Storage Technologies (fast22)
  • UNIST 韩国蔚山科学技术学院
  • 在Speicher基础上修改
  • 根据Speicher论文自己实现了一个Speicher版本
  • TWEEZER比Speicher性能高出1.94 ~ 6.23×,使得由于机密计算导致的性能开销从16 ~ 30×减少到4 ~ 9×

不同于Speicher的三个关键设计

  1. 无需构建横跨SSTable的Merkle树来确保LSM树的新鲜度,而是对不同的SSTable采用不同的key进行身份认证,使得攻击者无法在当前SSTable以外的任何地方找到其他数据块来执行重放攻击
    • Tweezer为每个SSTable创建并关联一个唯一的MAC key,基于LSM树的三个属性:每个SSTable的不可变性、每个Level的键的唯一性和每个数据块中的排序键
  2. 每个数据块中键的顺序都是唯一且不变的,这使得Tweezer可以检测到任何对新鲜度的攻击,而无需为每个SSTable生成Merkle树
    • 将MAC与每个键值对相关联,而不是与SSTable中的每个数据块相关联。Tweezer通过分别对每个键值对进行加密和身份验证,减少了EPC使用中的读放大。
  3. 使用哈希链来对日志文件(WAL和Manifest)进行身份认证,而不使用计数器,Tweezer要求用户放置一个心跳事务来作为时间戳记录KVS版本,并在以后使用它来验证Tweezer的快照是否是最新的