Vitalik Buterin在《安全的中心化交易所:偿付能力证明及其他》一文中表明,在中心化交易所中,每个用户的资产都记录在平台数据库中的账本中,这使得用户难以确认自己的资产是否被转移,以及交易所是否有足够的储备资产去偿付用户存入平台的资产。因此,交易所需要一种方式来证明其具有足够的储备资产,以便在用户提出需求时可以100%地偿还这些资产,也意味着交易所需要证明其储备资产的价值高于用户存入资产的价值。这种证明被称为储备金证明,在Gate.io也被称为100%储备金审计证明。
证明存款的最简单方法是发布(用户名,余额)对的列表。每个用户都可以检查自己的余额是否包含在列表中,任何人都可以检查完整列表,确认每个余额均为非负数以防虚假账户,并且余额总和为交易所所称金额。当然,这会破坏隐私,因此稍微改变方案:发布(哈希(用户名,Salt值),余额)对的列表,并向每个用户私下发送他们的Salt值。但即使这样也会泄露余额,还会泄露余额变动。为了保护隐私,有了更进一步的创新:默克尔树。
(图一 来源:https://vitalik.ca/general/2022/11/19/proof_of_solvency.html)
默克尔树技术会将用户余额数据放入默克尔总和树。在默克尔总和树中,每个节点是一个(余额,哈希)对。底层叶子节点代表单独用户的余额及用户名的加盐哈希。在每个更高层节点中,余额是两个下面的余额之和,哈希是下面两个节点的哈希。默克尔总和证明与默克尔证明类似,是树的“分支”,由从叶子至根的姊妹节点组成。交易所向每个用户发送他们余额的默克尔总和证明,用户就可以检查自己余额已经正确地包含在交易所总余额中。
这种设计的隐私泄漏比完全公开的列表低得多,并且可以通过每次发布“根”时重新洗牌“分支”来进一步减少隐私泄漏,但仍然存在一些问题:Charlie了解到有人的余额为164 ETH,有两个用户的余额相加为70 ETH等(见图一)。控制许多账户的攻击者仍然可能推算到有关交易所用户的重要信息。
尽管基于默克尔树的储备金证明已经能够较为有效地确保用户资产安全,但这一方案仍有一些问题:
零知识证明已经在各种用例中引起了广泛关注,因为它们具有提高安全性、保护用户隐私和支持在Layer-2网络中扩展的改革性潜力。
零知识证明使一方能够向另一方证明某个陈述是正确的,而不会透露任何额外信息。其既有助于增加隐私——因为降低了参与方之间共享的信息量——又有助于可扩展性,因为允许证明在更快的速度上进行验证,而不必验证整个数据集。
zk-SNARK(零知识证明-精简非交互式参数论证)是一种零知识证明技术,由Nir Bitansky、Ran Canetti、Alessandro Chiesa和Eran Tromer在2012年共同撰写的一篇论文中提出。zk-SNARK 允许一方向另一方证明他们知道一个秘密,而不透露秘密本身,实现在不暴露信息的情况下证明逻辑表达式的正确性。在传统的零知识证明中,证明者需要与验证者之间进行多次交互,以生成证明。然而,在zk-SNARK中,一旦生成参数(特别是公共参数)和证明,验证者可以在不必与证明者多次交互的情况下验证证明的正确性。
举个例子:假设你有一张藏宝图,它能指引你到一个埋藏宝藏的确切位置。你想证明给某人看你知道宝藏的位置,但不想揭露宝藏图的内容或宝藏的实际位置。使用zk-SNARK技术,你需要制作一份藏宝图的拼图。你选择了一小块关键拼图(一个证明),并展示给对方看,足以让他们确信你知道完整的拼图如何组合,即宝藏的位置,而无需看到整个拼图。但是,为了做到这一点,你需要从一个可信的印刷厂获取一些特殊的标记,证明你的拼图块是真实的。
zk-SNARK的实现基于椭圆曲线密码学技术和多项式数学。这种方法使用映射将输入转换为多项式,并利用椭圆曲线的阶和离散对数等数学概念来验证多项式上的约束条件是否满足。它使用特殊的算法来压缩数据,从而实现了数学计算的高效执行。
因此,使用zk-SNARK能极大地简化和改善储备金证明协议中的隐私问题。我们将把所有用户的存款放入一颗默克尔树中,并用 zk-SNARK 来证明树中所有的余额都是非负的,且总和为某个声称的值。如果交易所链上公开的资产大于该值,则可以证明该交易所具备100%偿还能力。
将zk-SNARK与默克尔树结合使用,可以实现同时验证数据的完整性和一致性,还可以保护交易的隐私。证明者可以使用zk-SNARK证明他们知道一个满足特定条件的默克尔证明,而无需透露证明的具体内容。这对于交易所来说,既可以证明他们有足够的资金来满足所有的债务,又可以保护平台用户隐私。
简而言之,Gate.io的零知识证明技术将解决储备金证明两大关键问题:
让用户在不泄露任何敏感信息的情况下,证明自己拥有某些资产;
默克尔树中不含总净余额(用户持有的所有资产的总美元价值)为负值的用户,不存在上文中的恶意默克尔树算法攻击。
Gate.io采用zk-SNARK对储备金证明进行升级,迈出了作为头部交易所保护用户资产安全的重要一步。升级之后,用户能够实时查看储备金证明,首次上线的币种将覆盖市值前100的数字资产。作为行业引领者,Gate.io已将代码开源,并将以此次零知识证明升级为契机,继续推动行业发展,探索更加安全、隐私保护更加完备的加密未来。
扩展阅读:
Vitalik Buterin在《安全的中心化交易所:偿付能力证明及其他》一文中表明,在中心化交易所中,每个用户的资产都记录在平台数据库中的账本中,这使得用户难以确认自己的资产是否被转移,以及交易所是否有足够的储备资产去偿付用户存入平台的资产。因此,交易所需要一种方式来证明其具有足够的储备资产,以便在用户提出需求时可以100%地偿还这些资产,也意味着交易所需要证明其储备资产的价值高于用户存入资产的价值。这种证明被称为储备金证明,在Gate.io也被称为100%储备金审计证明。
证明存款的最简单方法是发布(用户名,余额)对的列表。每个用户都可以检查自己的余额是否包含在列表中,任何人都可以检查完整列表,确认每个余额均为非负数以防虚假账户,并且余额总和为交易所所称金额。当然,这会破坏隐私,因此稍微改变方案:发布(哈希(用户名,Salt值),余额)对的列表,并向每个用户私下发送他们的Salt值。但即使这样也会泄露余额,还会泄露余额变动。为了保护隐私,有了更进一步的创新:默克尔树。
(图一 来源:https://vitalik.ca/general/2022/11/19/proof_of_solvency.html)
默克尔树技术会将用户余额数据放入默克尔总和树。在默克尔总和树中,每个节点是一个(余额,哈希)对。底层叶子节点代表单独用户的余额及用户名的加盐哈希。在每个更高层节点中,余额是两个下面的余额之和,哈希是下面两个节点的哈希。默克尔总和证明与默克尔证明类似,是树的“分支”,由从叶子至根的姊妹节点组成。交易所向每个用户发送他们余额的默克尔总和证明,用户就可以检查自己余额已经正确地包含在交易所总余额中。
这种设计的隐私泄漏比完全公开的列表低得多,并且可以通过每次发布“根”时重新洗牌“分支”来进一步减少隐私泄漏,但仍然存在一些问题:Charlie了解到有人的余额为164 ETH,有两个用户的余额相加为70 ETH等(见图一)。控制许多账户的攻击者仍然可能推算到有关交易所用户的重要信息。
尽管基于默克尔树的储备金证明已经能够较为有效地确保用户资产安全,但这一方案仍有一些问题:
零知识证明已经在各种用例中引起了广泛关注,因为它们具有提高安全性、保护用户隐私和支持在Layer-2网络中扩展的改革性潜力。
零知识证明使一方能够向另一方证明某个陈述是正确的,而不会透露任何额外信息。其既有助于增加隐私——因为降低了参与方之间共享的信息量——又有助于可扩展性,因为允许证明在更快的速度上进行验证,而不必验证整个数据集。
zk-SNARK(零知识证明-精简非交互式参数论证)是一种零知识证明技术,由Nir Bitansky、Ran Canetti、Alessandro Chiesa和Eran Tromer在2012年共同撰写的一篇论文中提出。zk-SNARK 允许一方向另一方证明他们知道一个秘密,而不透露秘密本身,实现在不暴露信息的情况下证明逻辑表达式的正确性。在传统的零知识证明中,证明者需要与验证者之间进行多次交互,以生成证明。然而,在zk-SNARK中,一旦生成参数(特别是公共参数)和证明,验证者可以在不必与证明者多次交互的情况下验证证明的正确性。
举个例子:假设你有一张藏宝图,它能指引你到一个埋藏宝藏的确切位置。你想证明给某人看你知道宝藏的位置,但不想揭露宝藏图的内容或宝藏的实际位置。使用zk-SNARK技术,你需要制作一份藏宝图的拼图。你选择了一小块关键拼图(一个证明),并展示给对方看,足以让他们确信你知道完整的拼图如何组合,即宝藏的位置,而无需看到整个拼图。但是,为了做到这一点,你需要从一个可信的印刷厂获取一些特殊的标记,证明你的拼图块是真实的。
zk-SNARK的实现基于椭圆曲线密码学技术和多项式数学。这种方法使用映射将输入转换为多项式,并利用椭圆曲线的阶和离散对数等数学概念来验证多项式上的约束条件是否满足。它使用特殊的算法来压缩数据,从而实现了数学计算的高效执行。
因此,使用zk-SNARK能极大地简化和改善储备金证明协议中的隐私问题。我们将把所有用户的存款放入一颗默克尔树中,并用 zk-SNARK 来证明树中所有的余额都是非负的,且总和为某个声称的值。如果交易所链上公开的资产大于该值,则可以证明该交易所具备100%偿还能力。
将zk-SNARK与默克尔树结合使用,可以实现同时验证数据的完整性和一致性,还可以保护交易的隐私。证明者可以使用zk-SNARK证明他们知道一个满足特定条件的默克尔证明,而无需透露证明的具体内容。这对于交易所来说,既可以证明他们有足够的资金来满足所有的债务,又可以保护平台用户隐私。
简而言之,Gate.io的零知识证明技术将解决储备金证明两大关键问题:
让用户在不泄露任何敏感信息的情况下,证明自己拥有某些资产;
默克尔树中不含总净余额(用户持有的所有资产的总美元价值)为负值的用户,不存在上文中的恶意默克尔树算法攻击。
Gate.io采用zk-SNARK对储备金证明进行升级,迈出了作为头部交易所保护用户资产安全的重要一步。升级之后,用户能够实时查看储备金证明,首次上线的币种将覆盖市值前100的数字资产。作为行业引领者,Gate.io已将代码开源,并将以此次零知识证明升级为契机,继续推动行业发展,探索更加安全、隐私保护更加完备的加密未来。
扩展阅读: