LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > ZigZag InvisibL3:保护隐私的 DEX

ZigZag InvisibL3:保护隐私的 DEX

2022-07-06 区块律动BlockBeat 来源:区块链网络
原文标题:《ZigZag InvisibL3—保护隐私的 DEX》
原文来源:ZigZag Exchange


穿着隐形斗篷的哈利波特


这篇文章从技术上介绍了我们新的应用程序,即一种订单簿 Token 兑换平台。其采用名为 InvisibL3 的专门为应用定制的 ZK Rollup,在保留快速交易的同时结合隐私保护,允许用户在利用 ZK Rollups 的完全可扩展性的同时保持链上匿名性。


隐私的重要性


尽管区块链上的地址对不熟悉的用户来说似乎是匿名的,但它们允许任何人查看您的所有交易。一旦地址的假名与个人联系在一起,基本上就无处可藏了。虽然现有的解决方案,比如 Tornado Cash,是很好的选择,但它们缺乏很多实用性。


InvisibL3 将提供一些完全独特的功能。我们的交易平台将允许用户匿名交易资产,同时以保密方式隐藏他们交易的金额。我们的观点是,隐私不应该只是一种选择,而应该是一种业界标准。任何人都可以匿名浏览银行对账单的世界并不是加密货币发展的实际愿景。我们的交易平台不仅旨在与现有的隐私解决方案(例如 Aztec Protocol 或 Tornado Cash)竞争,而且还与传统的中心化和去中心化交易平台扳手腕。隐私匿名交易平台的一些好处是:


· 允许机构交易者入场 DeFi,因为隐私是他们的主要关注点之一(法律或其他方面)


· 帮助减少我们在 AMM 模式下司空见惯的「恶性」MEV,例如三明治攻击


· 允许专业交易者将其策略保密


不影响安全性或可扩展性的隐私 DEX


问题是如何在无需许可的交易中实现隐私,同时保持安全性和可扩展性。我们想到的最简单的答案可能是利用 ZK 证明的力量来证明状态转换已正确执行,而无需透露任何输入(金额或地址)。归根结底,这与传统中心化交易平台来说并不是一个很大的改进。不仅把资金交给中心化交易平台,你还要信任另一个中心化机构来保障你数据可用和私密。


第二种选择是设计一个系统,使所有隐藏的交易都是公开的:除非提供正确的私钥,否则无法看到金额或发送者。这允许任何人重建状态并使用他们的私钥创建他们确实拥有他们的资金的证据。


资金是如何隐藏的?


隐藏您的资金需要您对所交易的金额做出承诺,并且与所有其他承诺方案一样,这需要具有约束力(以后不能显示为不同的值)和隐匿性(不透露任何有关隐藏数据的信息)。


一个常见的选择可能是散列函数,但 InvisibL3 将使用称为Pedersen 承诺的东西,它具有附加同态的附加属性:


C(a + b) = C(a) + C(b)


我们稍后会讲解为什么这很重要。


为了构建这些承诺,我们将一个椭圆曲线点乘以我们想要隐藏的数量。别担心,如果您不熟悉椭圆曲线,您只需要知道从 x*G 很难推导出 x,其中 G 是已知的生成点。


但是,由于金额 a 始终在给定范围内,我们需要按如下方式构建承诺:


C(a) = xG + aH


其中 x 是只有所有者才知道的随机致盲因子,以防止有人暴力破解所有常见金额值并找到您发送的值。


你的身份是如何隐藏的?


为了隐藏您的身份,将构建一个称为子地址的功能(由 Monero 推广)。每个用户从一组两个私钥开始——一个私人视图和一个支出密钥——正如名字所暗示的那样,一个将用于查找或披露用户拥有的票据,另一个用于花费它们。用户可以从私钥任意生成许多无法链接回原始地址的子地址,并使用这些子地址与做市商或其他用户进行交互。


不过,为了防止多张纸币被发送到同一个地址或每次兑换都必须生成一个新地址(这可能会揭示该地址进行了多少次交换,并可用于识别较大的做市商或机构交易者),我们还添加了一次性地址功能。


打款方没有向实际地址发送一串信息,而是生成一个带有秘密随机种子的随机一次性地址,在用户和做市商之间私下共享。然后,用户可以用他们的私钥证明他们在一次性地址拥有这串信息,而无需透露他们的地址甚至他们的子地址。


关于我们将如何使用子地址和一次性地址的更多技术细节可以在附录 A中找到。


如果我丢失了我的私钥怎么办?


为每次兑换生成具有新地址的新信息是不必要的麻烦,因此实际上钱包提供商和交易平台(我们)将以加密格式存储您的数据,以便您可以使用您的私钥轻松检索您的信息。


但是,这并不意味着您依赖第三方来提供该数据。重新创建状态和查找发给您的信息所需的所有交易和相应信息都作为调用数据(calldata)存储在链上,并且可以使用您的私钥进行检索。


有关重构承诺的详细信息,请参见附录 B。


兑换是如何发生的?


现在最重要的部分是兑换以做市商和用户都认可的方式进行。让我们看一个 Token 兑换例子。假设用户 A 想要将 X 数量的 ETH 换成 USDC。用户必须首先证明他们拥有足以进行该交换的数量的信息。这就是 Pedersen 承诺的用武之地。


假设 C1, …, Cn 是用户想要花费的输入信息,而 Co1, …, Com 是用户正在生成的输出信息。由于这些承诺的同态性,我们可以很容易地检查输入信息的总和是否等于输出信息的总和,而无需透露数量。在实践中,有一个额外的步骤是产生中间承诺以使总和为零,但这不是理解一般架构所必需的。有关验证承诺金额的详细信息,请参见附录 C。


在进行交换时,您提供输入的哈希值:您想要交易的金额、输入和输出资产类型和资产价格,以及称为返回地址签名的东西。返回地址签名是将制造商和接受者交易联系在一起的东西。这使您可以证明您知道交易私钥(您和做市商共享的随机种子)生成的一次性地址的私钥,并防止做市商将您的资金发送到他们的任意地址控制或您意外提供错误的地址(如果您输入了正确的 64 个字符的十六进制字符串,则无需进行四次检查)。


总结与结论


总而言之,每次兑换包含两个交易(做市商和交易方),其中兑换仅在以下情况下被视为有效:


1. 输入的信息存在于状态中;


2. 两次交易的输入和输出信息总和为零;


3. 双方使用与所花费信息对应的私钥签署了预期的交易哈希;


4. 被交换的 Token 和金额与交易对手签名匹配;


5. 目标地址与返回地址签名匹配。


前一到三个输出信息通常会发送给承兑您订单的做市商,另一个信息将作为费用发送给交易平台,剩下将作为退款退回给您。


如果您对推动我们研究和这篇博文的现有技术感到好奇,我们建议您查看原始的门罗币白皮书和原始的ZCash 白皮书。


附录 A) 子地址和一次性地址


每个用户从一组两个私钥开始:一个私有视图密钥 (kv) 和一个私有支出密钥 (ks),从中生成主公钥:


Kv = kv*G 和 Ks = ks*G


然后用户生成他的子地址私钥,如下所示:


ksi = ks + H(kv, i) ; kvi = kv*(ks + H(kv, i))


以及对应的公钥 Ksi 和 Kvi 如上。


对于一次性地址的计算,发送方和接收方共享一个私有交易密钥 r(使用私有输入上的 FSH 计算的随机种子)。


发送者知道接收者的地址之一((Ksi,Kvi)对),并且可以计算一次性地址:


Ko = H(r*Kv)G + Ksi


然后,用户可以计算该地址的私钥:


ko = H(r*Kv) + ksi


并使用所述私钥证明他们确实拥有该信息


附录 B) 重建承诺


除了您的私钥之外,当花费一张便笺时,您还需要知道能够重建该便笺的承诺数量和致盲因素。以下是描述如何计算这些的方案,因此您可以随时检索发给您的笔记。


发送方使用交易私钥 r 和发送方 Kv 构造:


· 致盲因子;


x = H(「commitment_mask」, H(rKv))


隐藏金额;


Ah = a XOR8 H(「amount_mask」, H(rKv))


· rG,rKv,


与链 rG 上的每笔交易一起,为接收方提供了 rKv 和 Ah,以便能够重新创建承诺。


接收方接收 rG、rKv 和 Ah:


· 用户首先使用私有视图密钥检查 rG * kv == rKv;如果是这样,则该注释是发给用户的;


· 然后用户可以计算致盲因子;


x = H(「commitment_mask」, H(rKv))


· 和金额。


a = Ah XOR8 H(「amount_mask」, H(rKv))


因此,请注意:


C(a) = xG + aH


附录 C) 验证承诺金额


投入承诺的总和为:


C1 + … + Cn = x1G + a1H + … xnG + anH = (x1+…+xn)*G + (a1+…+an)*H


和输出的总和:


Co1 + … + Con = y1G + b1H + … ymG + bmH = (y1+…+ym)*G + (a1+…+bm)*H


在哪里


(a1+…+an) == (b1+…bm)



(x1+…+xn) /= (y1+…+ym)


所以


(C1 + … + Cn) /= (Co1 + … + Com)


为了使总和相等,我们需要为每个输入音符产生中间承诺,以便新的盲法总和与输出盲法相匹配:


C』i = x』i*G + a*H 和 (x』1+…x』n) == (y1+…+ym)



(C』1 + … + C』n) == (Co1 + … + Com)


差异 zi = (xi—x』i) 称为中间承诺私钥,然后包含在签名中以证明 Ci 和 C』i 中的金额相同。


本文来自投稿,不代表 BlockBeats 观点


原文链接


—-

编译者/作者:区块律动BlockBeat

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...