解密储备金证明:如何利用储备金证明交易所的的资产安全

区块链 2026-04-06

什么是储备金证明?

在中心化交易所(CEX)中,每个用户的资产通过平台数据库中的账本进行记录,用户很难确认自己的资产是否被转移,以及交易所是否有足够的资产兑付用户存入平台的资产。因此,交易所需要一种方法证明自己有足够的储备资产能在用户取出时做到100%兑付,这要求交易所储备资产价值要高于用户存入资产价值。这种公开的资产的证明就叫做储备金证明。

为什么需要储备金证明?

用户将资产充值进交易所后,交易所托管之资产即为对用户的负债。举例来说,用户A将资产充值进交易所后,比如10ETH,交易所的账单上应该多一笔资产即10ETH,同时增加一笔10ETH的负债,因为这个资产属于用户,用户有随时取出的可能。交易所的资产总和为资产(10ETH)-负债(10ETH)=0。

交易所的用户常常数以万计,用户存入了数以亿计的资产,如果只是挪用一小部分,用户仍然能正常提现,比如平台资金1万ETH,挪用1千ETH,用户A在取出10ETH时不会出现问题,但如果发生重大资金需求,大量客户同时提款时(这种大批提款的场景通常被称为“挤兑”),挪用的资金缺口无法转回,就会产生流动性危机。

当流动性危机出现时,越晚提现就越有无法取回资产的可能,因此每个人都想尽快提款或者变现相关资产,避免成为跑最慢的人,进而产生死亡螺旋。比如在FTX被披露存在挪用资金的情况后,大量用户从FTX提款,并开始抛售、做空其代币FTT,使FTX投资的项目,以及关联生态的资产价格都剧烈下跌。而FTX持有的资产也面临减值,更加无法偿还用户资产,最后只能宣告破产,致使无数用户和投资者惨遭损失。

储备金证明可以在很大程度上避免上文提到流动性危机,让CEX资产情况更加透明,并证明CEX有充分偿还所有用户债务的资金,不会面临流动性危机。

基本原理

储备金证明是一种可靠的审计程序,它通过密码学证明、公共钱包所有权检查和重复审计,来验证交易所持有的资产。使托管方可以提供链上储备真实存在的透明性证明,表明平台所持有并可自由支配的代币总额,大于或等于所有用户的代币资产总额。

一般来讲,验证的过程会按照单一币种来审计,比如BTC、ETH、LTC等。将平台拥有的地址所持有的单一代币数量,除以全部用户地址中的持有单一代币的数量总和,会得到储备金率,储备金率大于100%意味着交易所针对该币种有足够的偿付能力。如下图所示,在Gate.com 一共出具了近100个币种的储备金率。

当然,除了单币种储备金率外,还有交易平台总储备金率这一概念,即交易所持有的总资产/用户存入的总资产,这个数据主要用来衡量交易所的整体偿付能力。

储备金证明的发展历史

储备金证明由一开始的直接资产证明,不断引入可信任的技术和流程来优化证明过程,最终发展成为债务证明。其中的尝试包括可信第三方、默克尔树和零知识证明技术等。

资产证明

2011年,当时最大的比特币交易所MtGox,通过发送一笔移动424,242个BTC到预先公布地址的交易,来证明他们拥有该笔资金。该方法只能对资产进行证明,无法对交易所负债进行证明。用户无法知道这是否是已经被挪用过得资产数额。

债务证明

债务证明和资产证明最大的区别就是,债务证明不仅要证明交易所持有的资产数量,还有将用户存入的资产数量公布。

直接公布法

交易所的债务就是用户存入的资产。如果想证明用户的资产,最简单的方法就是公布一个含有用户账号和余额的列表,每个用户可以打开表格,查询自己账号对应的余额是否正确。

但这个方法有著明显的缺陷:

①无法保证交易所提供的列表是真实的。

②过程中,用户的账号信息和余额都会被泄露。

所以直接公布法是债务证明的基础理论设想,暂时没有交易所实行过。

默克尔树(Merkle Tree)

默克尔树是种类似于”树”的数据结构,最下层数据称为“叶节点”,中间可以称为“中间节点”,左右两个叶节点可以经过哈希处理(把任意输入值通过特定处理方式得出特定值)输出中间节点的值,左右中间节点经过哈希处理得到上层中间节点唯一的输出值,层层处理后,最终得到默克尔树的根节点(Root)。该值是唯一的,任何叶节点的变动都会导致根节点的变动。

270

这种方法下,通过层层相加得到交易所持有的用户资产数量,但直接在叶节点中放入用户账户和余额两个数据后,仍存在小范围的信息泄露问题。以上图为例,绿色标记的用户Charlie不仅可以知道David的部分信息,还可以知道左侧Alice和Bob的余额和。于是在叶节点方面有了新的技术改进:

(1)如上图所示,将用户账户ID和一个特定值一起进行哈希处理。

(2)将用户余额分散开,比如Charlie的10ETH,可以分成两个5ETH放入两个叶节点。

(3)将用户ID和余额分别经过哈希处理,然后再将得到的值进行一次哈希处理。

尽管有多种优化的方式,但有一个问题是默克尔树无法解决的:负值账户。在实际使用中,用户存入加密货币后,会体验交易所杠杆交易、永续合约等产品,假如发生亏损,最大亏损也应为100%本金,也就是说用户账户余额应大于或等于0。

所以负值账户一般由作恶的交易所端发起,如果交易所挪用了500ETH的资产,按照正常计算,交易所实际拥有的资产之应有资产抵押率很可能小于100%,暴露出其挪用资产的行为。但交易所可以通过如下图例中名为Henry的余额为-500ETH的账户,让默克尔树生成的总资产等于或者小于交易所挪用后实际拥有的资产数,从而伪造出抵押率大于100%的假象。

270

第三方审计

“审计”在日常语境中主要指具有独立性的经济监督活动,从事这种活动的主体称为“审计公司”,常见的应用场景有上市公司财报审计、政府审计等。在加密世界中,CEX都会寻找在传统领域具有良好声誉的审计公司为其完成审计。由于加密行业的特殊性以及审计制度的不完善,很多第三方审计需要结合默克尔树技术。

审计公司会利用交易所提供的用户余额生成默克尔树。默克尔树生成后,审计员验证总用户余额并发布完整默克尔树和根哈希。用户可以在验证界面输入自己的哈希用户ID和代币余额来触发验证过程。

这种方法的好处就是可以通过知名的审计公司来提高可信度。但由于主要依赖于审计师的职业道德,也无法保证审计师与交易所不联合作恶。所以为了更加安全透明的提供储备金证明,第三方审计逐渐成为辅助证明方式或者被弃用。

突破性的技术:零知识证明技术

从上文也可以了解到,现有的默克尔树结构除了隐私问题外还有负值账户问题无法解决。以太坊创始人Vitalik Buterin在22年12月发布了一篇名为《Having a safe CEX: proof of solvency and beyond》的文章讨论交易所如何拥有更好的证明偿付能力。文中提到可以在传统储备金证明的基础上引入zk-SNARK等新型技术来保证更加公开、透明、真实的储备金证明。这也激起了各大交易所对采用零知识证明技术更新储备金证明技术的探索。

储备金如何与zk-SNARK技术结合?

背景知识

零知识证明(Zero-Knowledge Proof,ZKP)是一种密码学技术,最早由由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初的一篇名为《The Knowledge Complexity Of Interactive Proof Systems》的论文中提出。在该文中,它是作为一个理论模型被构想出来,解决的是在不透露证据的情况下如何验证数学陈述的问题。这一概念在学术界引起了广泛关注,因为它挑战了传统加密技术的界限,并为处理敏感信息提供了全新的方法。

随着时间的推移,ZKP从一个抽象的理论构想逐步演变成具体的协议,它们能够被集成进各种应用中。在2010年,Groth发表了一篇名为《Short Pairing-based Non-interactive Zero-Knowledge Arguments》的论文,这篇论文成为了ZKP中重要的解决方案zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)的理论先驱文章。零知识证明在应用上最重要的进展就是 2015 年 Z-cash 使用的零知识证明系统,实现了对交易及金额隐私的保护,后来发展到 zk-SNARK 和智能合约相结合,zk-SNARK 进入了更为广泛的应用场景。

zk-SANRK的基本原理

传统的ZKP需要的遵守的原则有三点:

完备性(Completeness,也译作完整性) - 如果陈述是真实的,诚实的证明者总能够通过验证者的检验。

健壮性(Soundness,也译作合理性) - 如果陈述是假的,任何欺诈的证明者都将只有微小的概率能够误导验证者相信该陈述是真的。

零知识性(Zero-knowledge) - 如果陈述是真实的,验证者除了得知该陈述是正确外,将无法学习任何其他的信息。换句话说,验证过程不会泄露任何能够用于构造证明的信息。

ZKP的原理可用简单的例子来理解:如果我需要向A证明我拥有B的电话号码,我不需要直接把B的电话号码告诉B,而是可以直接通过拨打B的电话,在打通后即可证明我确实拥有B的电话号码,这个过程并不会泄露B的号码信息。

而zk-SNARK则是在此基础进一步升级,其具有以下特点:

零知识:验证者不能从证明中获得任何有用的信息;

简洁:证明的大小很小(通常只有几十字节),验证时间很短(通常只需几毫秒);

非交互式:证明者只需要发送一次证明给验证者,无需进一步沟通;

可信参数:证明者和验证者都需要使用一个由可信第三方生成的CRS(公共参考字符串),这个CRS可能包含一些敏感信息,如果泄露或篡改,可能会导致系统的安全性受到威胁。

在Groth的论文中, 他提出基于配对的非交互式零知识论证方法将一个计算问题转化为一个二次算术程序(QAP),然后利用椭圆曲线密码学和哈希函数构造一个有效的证明。后来的zk-SNARK一般在设计时分为四个步骤:

系统设置:由一个可信第三方执行,生成一个CRS,包括一个用于生成证明的密钥 pk 和一个用于验证证明的密钥 vk。这个过程只需要执行一次,CRS可以被多次重用。

问题编码:将一个计算问题 f(x) = y 转化为一个 QAP 的形式 A(x)·B(x) = C(x)·Z(x),其中 A(x)、B(x)、C(x) 是由 f 的电路结构决定的多项式,Z(x) 是一个固定的多项式,x 是一个随机选择的点,y 是 f 的输出。这个过程可以由证明者或验证者执行,或者由第三方提前完成。

证明生成:由证明者执行,使用 pk、x 和 f 的输入 w 生成一个证明 \pi ,证明他知道一个满足 f(w) = y 的 w,而不透露 w 的具体值。这个过程涉及到多项式的计算、椭圆曲线的运算和哈希函数的运算,最终生成一个由几个椭圆曲线点和一个哈希值组成的 \pi 。

证明验证:由验证者执行,使用 vk、x、y 和 \pi 进行验证,判断证明者是否真的知道一个满足 f(w) = y 的 w。这个

过程也涉及到多项式的计算、椭圆曲线的运算和哈希函数的运算,最终得到一个布尔值,表示证明是否有效。

举个简单的例子理解就是,假设你有一张藏宝图,它能指引你到一个埋藏宝藏的确切位置。你想证明给某人看你知道宝藏的位置,但你不想揭露宝藏图的内容或宝藏的实际位置。如果你使用zk-SNARK技术的话,你需要制作了一份藏宝图的复杂拼图。你选择了一小块关键拼图(一个证明),并展示给对方看,足以让他们确信你知道完整的拼图如何组合,即宝藏的位置,而无需看到整个拼图。但是,为了做到这一点,你需要从一个可信的印刷厂获取一些特殊的标记,这些标记用来证明你的拼图片段是真实的。

交易所储备金与zk-SANRK的结合

上文中提到了zk-SNARK是允许设置公共参考字符串的,即可以在运行的电路上设置约束,以Gate储备金为例,其在电路中设置了五个核心约束:

①用户净资产插入Merkle树之前,用户ID对应的节点为空。

②根据用户的资产列表及每种资产的价格计算用户的总资产/负债,总资产必须大于总负债。

③将用户的资产/负债加到交易所的资产/负债中。

④使用用户ID、总资产/负债、资产列表计算用户状态哈希,将用户状态插入Merkle树得到新的Merkle Root。

⑤前一个用户在创建用户的操作之前,树的根节点的哈希值必须与后一个用户创建用户的操作之后的树的根节点的哈希值相等。

(①操作可避免节点数据不真实,②操作可避免负值账户,⑤操作可保证操作前后,用户数据不被更改。)

这样就可以保证负值问题的解决。交易所数据只需要通过电路后就会自动进行约束检查,然后得到资产数。不过这种方案需要一定的运算能力和硬件条件。在一台32核、运行内存128G的机器上计算1,000万用户的资产证明需要15天。储备金证明的计算可以并行化,如果是10台机器,则只需要1.5天。

如何使用Gate储备金证明验明自己在Gate的资金安全?

如何查看储备金率?

点击链接或进入 Gate.com 页面底端 【100% Proof of Reserves】 按钮进入Gate储备金前端页面

进入Gate.com 储备金前端页面后,用户可以直接查看目前储备金的更新时间。以下图为例,最近的审计时间是2023年11月10日,审计方法是Markle Tree+zk-SNARKs,用户存入资产约27.7亿美元,Gate钱包内资产较用户存入资产多出4.34亿美元为32.06亿美元,总储备金率为115.69%。

270

向下滑动页面会出现相关的具体币种的额度与储备率,以下图中第一个币种BTC为例,截止2023年12月8日,用户存入BTC 13.85K,Gate 钱包持有数量为 17.10K,BTC的储备金率高达123.52%。

270

点击上图右下角的页面符号可以查看多达 112 种代币在 Gate 的储备金率。点击上图中的【Verify now】可以显示验证教程,可以通过教程验证自己的账户余额是否包含在内,从而确认该储备金率是将自己的资金也被正常统计后的结果。

还有一种方法查看自己的资产审计情况,即进入自身账户页面中的【Audits】页面,查看自己的历史审计记录与Gate 综合储备金情况。

270

如何验证资产安全?

【1】下载验证程序

用户可以通过 Github 或储备金页面提供的下载入口进行程序下载,并重命名为[main]:

270

【2】下载资产验证数据

进入个人审计页面,找到需要验证的批次,分别点击【Download Merkle Tree】(下载哈系树)与【Download User Config】(下载用户配置)下载数据。

270

下载完成后,您会拥有一个zkmerkle_cex_xxx.tar.gz的压缩文件,将 main 程序(前文提到的验证程序文件)放入文件夹内,并将 user_config.json 文件,放到 config 文件夹内。一切完成后,文件架构将如下图所示:

270

完成该步骤则完成了前期所有的准备,可以进行正式验证了。

【3】验证交易所资产

用户可以直接输入[cmd]或者在[终端]输入[cd ~/Downloads/zkmerkle_cex_xxx]等命令进入上文配置好的zkmerkle_cex_xxx文件。

然后输入:

./main verify cex

如果验证成功则会输出:

All proofs verify passed!!!

【4】验证自身资产

输入下文命令来验证自身资产:

./main verify user

如果自身资产被正常计算,则账户与余额数据是总默克尔树的一个叶节点,所以验证成功会输出。

merkle leave hash: 164bc38a71b7a757455d93017242b4960cd1fea6842d8387b60c5780205858ce

verify pass!!!

如果你想了解更多技术细节,可点击链接进入Github查看开源代码。

结语

启用zk-SNARK是Gate.com储备金证明的重要升级,也是Gate.com在用户资产安全保护上的重要行动之一。卓越的安全和隐私双重保障,将为用户带来了更多的信心,也为整个加密货币行业树立新的典范。

免责声明:本网站、超链接、相关应用程序、论坛、博客等媒体账户以及其他平台和用户发布的所有内容均来源于第三方平台及平台用户。网站及其内容不作任何类型的保证,网站所有区块链相关数据以及其他内容资料仅供用户学习及研究之用,不构成任何投资、法律等其他领域的建议和依据。用户以及其他第三方平台在本网站发布的任何内容均由其个人负责,与本网无关。

相关文章