All articles
加密货币

密码学累加器是什么?如何用一个短承诺证明元素属于大型集合?

Jul 25, 2026 · 12 min

密码学累加器是什么?如何用一个短承诺证明元素属于大型集合?

日期: 2026-05-30

来源: https://xiaoyinsi.com/wiki/crypto/cryptographic-accumulator

密码学累加器是什么?如何用一个短承诺证明元素属于大型集合? – 投资百科 – 小隐寺

密码学累加器是什么?如何用一个短承诺证明元素属于大型集合?

密码学累加器把大型集合压缩成短承诺,并提供成员或非成员证明。本文解释RSA累加器、Merkle结构、动态更新和区块链用途。

密码学累加器(Cryptographic Accumulator)是一种把大量元素压缩成短承诺的数据结构。用户不需要下载整个集合,只需获得一个Witness,就能验证某个元素是否属于集合;部分累加器还能证明某元素不在集合中。

区块链可用它压缩UTXO、撤销列表、验证者集合或账户状态,降低轻客户端验证与节点存储需求。它不会让底层数据自动可用,也不会消除更新证明和可信参数风险。

一个累加器通常包含:

动态方案中的Add、Delete和Witness Update。

累加值通常很短,不随集合元素数量线性增长。证明也可保持固定或对数大小,具体取决于构造。

假设集合有一百万个有效凭证。传统验证者可能需要完整下载列表,再搜索某个凭证。

累加器把集合映射成一个短值A。持有人提交凭证x与Witness w,验证者检查:

若密码学假设成立,攻击者无法为不在集合中的x伪造成员证明。

短承诺只证明集合关系,不告诉验证者其他999,999个元素是什么。

把所有元素拼接后计算一个哈希也能承诺集合,但单个用户无法只凭这个哈希证明自己的元素存在,除非提供大量其他数据。

累加器额外设计了高效Witness。Merkle Root也是一种集合承诺,Merkle Proof提供从叶子到根的路径。

广义讨论中,Merkle Tree可被视为哈希型累加结构;狭义“密码学累加器”常指RSA、Pairing或其他固定大小证明方案。

\n",,"\n",}],"定义

:生成公共参数;

:把元素集合压缩成累加值A;

:为元素x生成成员Witness;

:使用A、x和Witness验证;

与普通哈希的区别

Merkle Tree默克尔树是什么?区块链如何快速证明数据存在?

UTXO模型是什么?比特币为什么用未花费交易输出记账?

有效性证明Validity Proof是什么?ZK Rollup为何无需等待挑战期?

侧链是什么?它和Layer 2有什么区别?

ERC-721是什么?NFT为什么需要非同质化代币标准?

一个人做交易,亏多赚少?不得方法?

快快加入小隐寺的Discord社区,跟多位高手交流美股当下主题板块,研究基本面、技术分析,还有专属分类频道

Merkle Tree把叶子两两哈希到根。包含N个元素时,成员证明大小约为:

一百万个叶子约需要20层Sibling Hash,证明并非固定大小,但验证简单、无可信设置,工程实现成熟。

更新一个叶子只需更新到根路径。若树支持稀疏键空间,还可以证明某键不存在。

缺点是证明随集合规模对数增长,动态树还需要维护节点与路径数据。

RSA累加器原理

无论集合有多少元素,A与Witness大小都近似固定。安全依赖强RSA类假设和参数生成。

真实RSA模数很大,这里只展示代数关系,不提供安全参数。

集合元素映射为素数2、3、5,累加指数为:

对元素3,Witness指数为:

因此Witness与元素3组合回到累加值。攻击者若想为不存在的素数7构造Witness,需要解决受安全假设保护的问题。

为什么元素要映射成素数?

RSA累加器指数使用乘积。如果元素映射为任意合数,不同集合可能因因子分解产生歧义。

Hash-to-Prime把任意字符串确定性映射为素数代表。过程需要安全、可验证且避免低效搜索。

成员证明与非成员证明

成员证明回答“x在集合中”。撤销系统还常需要非成员证明,例如证明某凭证未被撤销。

RSA累加器可利用Bezout关系构造非成员Witness。若x对应素数与集合指数乘积互素,可以找到系数满足:

验证者通过相应群运算确认x不在集合。

非成员证明的更新与生成通常比成员证明复杂,具体性能取决于方案。

静态与动态累加器

静态累加器生成后集合不变,适合固定名单或历史快照。

动态累加器支持添加与删除。添加新元素会改变A,旧Witness也可能需要更新。若每次更新都让所有用户重新下载完整集合,扩展优势会大幅降低。

高效方案会发布Update Information,让用户本地更新Witness,或由服务商维护。更新数据的可用性成为新风险。

删除为什么更困难?

添加元素通常把新素数乘入指数;删除需要从指数移除一个因子。知道RSA模数陷门的人可能高效更新,但也可能滥用陷门伪造证明。

无陷门动态累加器通过更复杂协议、预计算或其他密码学结构支持删除。系统要在可信设置、证明大小、更新时间和存储之间权衡。

看到“支持O(1)证明”时,还要查看更新者需要保存多少辅助数据。

可信设置风险

RSA模数通常要求没有任何人知道其因子分解。若设置者保留陷门,可能伪造成员或破坏安全。

可使用多方计算仪式生成参数,只要至少一位参与者诚实销毁秘密,最终陷门未知。也可使用已有公开参数或透明累加器。

用户应检查:

参数由谁生成;

是否有公开仪式记录;

参与者数量与独立性;

软件是否验证参数;

参数能否被管理员替换;

泄露陷门会造成什么后果。

UTXO累加器

UTXO链需要节点知道哪些输出尚未花费。若用累加器承诺UTXO集合,区块头只保存短累加值,交易花费者提供该UTXO的成员证明。

验证者无需保存完整UTXO集合,也能检查输入存在。花费后删除旧UTXO,新增输出加入集合,并更新累加值。

这种设计可降低节点状态,但把Witness生成、更新与数据可用性责任转移给钱包、证明服务或区块生产者。

一个UTXO更新案例

区块前累加值为A,交易花费UTXO x,并创建y、z。

状态更新概念为:

验证x的成员Witness;

验证x尚未被区块内其他交易花费;

从集合删除x;

加入y与z;

计算新累加值A';

发布更新信息;

用户更新未花费输出的Witness。

若用户长期离线,其旧Witness可能过期。恢复时需要获取从旧版本到当前版本的更新,或从证明服务重新生成。

Stateless Client并非完全无状态

累加器让验证节点减少完整状态存储,但交易仍需携带Witness,网络仍需有人保存底层数据并生成证明。

如果只有一个中心服务能提供Witness,系统把状态数据库中心化到服务商。服务商停机不会伪造证明,却可能阻止用户花费,形成可用性审查。

真正的Stateless设计要说明数据存在哪里、谁更新Witness、离线用户如何恢复,以及证明服务能否多元化。

凭证撤销案例

数字身份系统可把所有未撤销凭证或已撤销序列号放入累加器。用户证明自己的凭证属于有效集合,或不属于撤销集合。

验证者只需最新累加值和短证明,不必下载完整名单。隐私方案还能结合零知识证明,隐藏具体凭证标识。

若发行方没有及时发布更新,撤销状态会滞后;密码学正确不能保证治理和运营及时。

与Bloom Filter的区别

Bloom Filter可以节省空间地回答“可能存在”或“一定不存在”,但存在假阳性,通常不是密码学成员证明。

累加器提供可由不信任验证者检查的密码学Witness。两者用途不同:Bloom Filter适合快速查询过滤,累加器适合安全承诺与证明。

不能因为数据结构都“压缩集合”,就把概率查询当成资产所有权证明。

与Vector Commitment的区别

集合累加器主要证明元素是否属于集合,不一定关心位置。Vector Commitment承诺有序向量,可证明某索引位置的值。

账户状态往往需要“地址键对应余额值”,Vector Commitment或Verkle Tree更自然;纯白名单或UTXO存在性可使用集合累加器。

现代方案边界可能重叠,选择取决于更新、证明聚合和访问模式。

怎样实际评估一个累加器方案?

明确证明成员、非成员还是键值位置。

查看累加值与Witness大小。

测量生成、验证、添加和删除成本。

检查是否需要可信设置。

了解元素如何编码或Hash-to-Prime。

确认旧Witness如何更新。

测试用户长期离线恢复。

找出底层集合数据由谁保存。

检查批量证明与并发更新。

阅读安全证明与实现审计。

模拟证明服务停机。

验证错误Witness会被所有客户端一致拒绝。

只比较证明字节数,会忽略系统总成本。

固定大小RSA证明可能需要较重的大整数运算与参数管理;Merkle Proof更大,但只需通用哈希,易于并行和审计。

Pairing累加器可支持高级证明与聚合,却依赖椭圆曲线配对和可能的设置。透明方案避免陷门,证明或更新成本可能更高。

工程选择要看链上验证Gas、节点CPU、带宽、钱包存储和更新频率,而不是追求某一项O(1)。

数据可用性边界

累加值A只能证明某个Witness是否与集合一致,不能从A恢复全部集合。若底层数据与更新信息被扣留,用户可能无法生成新证明。

因此,状态压缩必须搭配数据传播、归档节点、证明市场或用户自持数据。密码学完整性与数据可用性是两种不同保障。

同样,最新A来自哪条最终链也要由共识决定。累加器不会选择主链。

误区 1:累加器能把全部数据无损压缩后再恢复

它是短承诺,不包含可直接恢复的完整集合。

误区 2:证明固定大小意味着系统总成本固定

Witness更新、底层存储和证明生成仍可能随集合增长。

误区 3:Merkle Tree不属于相关技术

Merkle Root和Proof提供类似集合承诺,只是证明大小与性质不同。

误区 4:可信设置完成后无需再关注

参数来源、陷门销毁和客户端参数替换仍是安全边界。

误区 5:Stateless表示没人保存状态

仍需要数据持有者和Witness生成路径,否则用户无法交易。

误区 6:成员证明能证明元素内容真实

它只证明元素属于被承诺集合;集合发行者可能加入错误数据。

常见问题 FAQ

累加值会随集合变大吗?

许多方案累加值大小固定,但更新计算和辅助数据不一定固定。

用户如何获得Witness?

可由钱包自己维护、从完整节点生成或向证明服务请求,信任与可用性不同。

Witness过期怎么办?

使用公开更新信息本地更新,或从保存完整集合的服务重新生成。

累加器能替代共识吗?

不能。它证明状态集合关系,共识决定哪一个累加值是当前有效状态。

哪种累加器最好?

没有统一答案。可信设置、证明大小、动态更新、验证成本和数据可用性需要综合权衡。

密码学累加器把大型集合压缩成短承诺,并用Witness证明成员或非成员关系;它能降低验证与状态负担,却不会自动提供底层数据、更新Witness或可信参数,评估时必须同时计算证明、更新、存储和离线恢复的系统总成本。