Page 88 - 《软件学报》2025年第10期
P. 88
张川 等: 抗量子的高效区块链认证存储方案 4485
本文第 1 节介绍区块链认证存储和抗量子攻击的相关工作. 第 2 节介绍本文所需的基础知识, 包括认证存储
的概念和基于哈希的签名. 第 3 节介绍 EQAS 方案概述, 包括系统模型、工作流程和威胁模型. 第 4 节介绍 EQAS
的详细设计过程. 第 5 节通过安全性分析证明 EQAS 的量子安全. 第 6 节通过实验验证所提方案的有效性. 最后总
结全文.
1 相关工作
1.1 认证存储
最初, 在分布式系统外包存储的背景下, 认证存储主要关注如何在服务器不可信的情况下, 确保存储数据的完
整性和可用性. 随着云计算的兴起, 云存储技术成为研究的热点, 它通过提供动态、可扩展的存储资源, 满足了大
数据时代对存储的需求. 云存储的关键技术包括数据加密、访问控制和数据去重等, 以确保数据的安全性和隐私
性 [22] . 区块链技术的引入为认证存储带来了新的变革 [23] . 区块链的不可篡改性和去中心化特性, 使得它在身份认
证、数据完整性验证等方面展现出巨大潜力. 例如, 基于区块链和密码累加器的自我主权身份认证方案, 通过精简
区块链数据存储和降低链上数据交互频率, 提高了系统性能和可扩展性, 同时还能再次隐藏已披露的用户数据, 增
强了系统的安全性.
在区块链中, 认证存储通常采用 MPT 结构 [24] , 这是一种特定形式的 Merkle 树. MPT 中的每个叶子节点存储
一个值, 根节点到叶子节点的路径对应于存储值的键. 每个内部节点存储其所有子节点的加密哈希值. MPT 的根
哈希作为区块链状态的承诺进行认证. 然而, 这种认证需要付出沉重的性能代价. 修改状态中的键值对需要更新
MPT 从相应的叶子节点到根节点的路径中所有节点的哈希值. 如果没有缓存, 每个状态更新操作放大为 O(log(n))
个 I/O 操作, 其中 n 是存储的大小. 然而, 即使是简单的支付交易也至少包含两个账本状态更新, 即分别扣除和增
加发送方和接收方的余额. 为改善 MPT 结构, mLSM 提出多层 MPT [25] . 最近的更新位于最低层, 较低层的键值对
将定期合并到较高层. LMPT 维护 3 个 MPT, 一个包含旧状态的大 MPT 和两个包含最近状态变化的小 MPT [26] .
LMPT 周期性地将小的 MPT 合并为大的 MPT. 对于 mLSM 和 LMPT, 所有 MPT 的 Merkle 根的拼接成为账本状
态的承诺. 因为最近访问的状态存储到具有较小高度的 MPT 中, 并且 MPT 的合并可以在后台线程中进行, 所以这
些技术减少了关键路径上的磁盘 I/O 操作. 然而, mLSM 论文只包含其概念设计, 没有实现和评估 [25] .
此外, 基于预存节点的认证存储模型 RainBlock [27] , 在区块链系统中引入了 3 种不同的节点来加速交易的执
行: 存储预取器、执行交易的矿工和存储节点. 在执行交易时, 矿工从多个预取器获取所需数据, 并将更新发送到
多个存储节点, 每个存储节点在内存中维护一个 MPT 分片. RainBlock 将本地存储 I/O 更改为网络分布式存储
I/O. 为了减少网络存储的读取延迟, RainBlock 引入了 I/O 预取器, 并要求矿工在广播区块时附加所有访问的键值
对和见证人 (MPT 节点). RainBlock 报告每笔交易的平均证明大小为 4 KB, 通过优化将证明大小减少了 95%, 因
此每笔交易的额外网络存储约为 200 B, 相当于一笔交易的两倍. 然而, 网络的低效使用给高性能区块链系统带来
了瓶颈 [28] . 此外, RainBlock 在数据可用性方面也容易受到攻击. 由于内存存储成本很高, 因此 RainBlock 中的副本
数量远少于以太坊.
然而, 这些方案均基于离散对数难题和大数分解等数学困难问题构造的. 随着量子计算技术的飞速发展, 这些
难题可能被攻克, 从而使得现有的认证存储机制可能面临极大的安全风险, 进而威胁到数据的完整性与真实性. 因
此, 开发能够抵御量子计算攻击的区块链认证存储方案变得尤为迫切, 以确保系统安全稳固.
1.2 抗量子签名
在本节主要讨论基于哈希的数字签名算法: SPHINCS. 它是为了在后量子时代保持安全性而设计的. 随着密
码学的发展, SPHINCS 经历了几个版本的迭代, 包括 SPHINCS+和最近提出的 SPHINCS-α.
SPHINCS 最初在 EUROCRYPT 2015 上被提出 [29] , 它利用了哈希函数的抗量子特性来构建一个无状态的数
字签名方案. 这种无状态的设计意味着签名者不需要维护任何关于以往签名的状态信息, 这在某些应用场景中是
非常有用的. SPHINCS+ [19] 是 SPHINCS 的一个改进版本, 它在保持了原始设计的安全特性的同时, 通过引入一些

