# 三种隐私交易原理

By [xinba](https://paragraph.com/@netmeta) · 2022-03-11

---

主流隐私交易方案有以下几种： 1、门罗(monero)：门罗币主要是是采用签名来保护隐私性。 2、达世(Dash)，他使用的是混币技术保证隐私性。 3、零(Zcash)：主要使用snark库来实现零知识明，达到保护隐私的目的。 **1 门罗主要使用以下三种技术**： 环签名：用于隐藏交易发起人。系统在交易发生时会同时伪造多个交易，这些交易发起人地位相同。 混淆地址：用于隐藏交易接受者。转账资金会发送到接收方公钥生成的临时地址，然后接收方用私钥检索临时地址列表中的所有权。

环加密：用于隐藏真实金额。钱包在转账时会给转账金额加上随机数，网络会利用这个加上随机数的值进行验证交易金额。 为了理解环签名是什么，它是如何保护了发送者隐私。让我们从现实生活中的一个案例谈起，当你要给某个人发送支票时，是不要需要签名？但是，也正因如此，看到这个支票的任何人（和知道你的签名是什么样的人）就会知道你就是那个发送人。现假设，你从街上随机选择 4 个人。把你的签名和这四个人进行混合得到一个独一无二的签名。这样就没有人能够发现这是否真的是你的签名。这就是环签名本质上的工作方式。 在门罗中：Alice 发送 1000 XMR(XMR 即门罗币) 给 Bob，系统会如何使用环签名来隐藏她的身份？ 首先，Alice 会确认她的“ring size（环大小）”。ring size 是取自区块链的随机UTXO，它等于 Alice 的输出值，即 1000 XMR。ring size 越大，交易越大，继而交易费越高。 然后，她用 private spend key 对UTXO进行签名，并发给到区块链。另一点要注意的是，Alice 不需要向之前交易的所有者发送请求来使用这些UTXO。

UTXO（Unspent Transaction Output）即为未消费交易输出的意思。在比特币中类似于以太坊中的账户模型。 在比特币中，一笔交易的每一条输入和输出实际上都是UTXO，输入UTXO 就是以前交易剩下的， 更准确的说是以前交易的输出UTXO。这是比较官方的一个说法。

那么，假设 Alice 选择的 ring size 为 5 ，也就是说 4 个 decoy output(诱骗输出) 和它自己的UTXO，从外面看起来就像这样：

在一个环签名交易中，任意一个 decoy 就像真实UTXO一样，因为任何不相关的第三方（包括矿工）都无法知道发送方是谁。 环签名的缺点是，仍然有办法被攻破，而导致隐私交易达不到隐私的目的。在相关资料(3,4,5)上，有一个签名的私钥可追踪，那么就会使隐私性受到威胁。另外CoyptoNote本身是有漏洞的，门罗币曾经遭到过一次子集网络划分的攻击

**2 以混币为代表的Dash** 达世币有三种转账方式： 1、像比特币一样的普通转账。 2、即时交易：不需要矿工打包确认，就可以确认交易，几乎可以实现秒到。 3、匿名交易: 从区块链上看不到是谁和谁进行了转账。 达世币中除了普通节点之外，还有一种节点叫“主节点”。主节点可以提供一系列服务，如：匿名交易和即时支付。如果有用户发起了匿名交易，它的申请会发送到相关的主节点上，然后主节点根据情况，把多个申请者的交易进行混合，也就是混币(一般来说，是三笔交易一起进行。)网上有一个例子，一桌人把自己的钱都放在桌上，混在一起，然后再分别拿回相应面值的钱，这样就不知道你手里的钱到底是谁的了，这就是混币。混币后，网络就不知道究竟谁转账给了。谁。 达世币的优势在于，它可以比较容易的实现隐私性，不需要额外的新的算法，即使在混币的过程中会有性能损失，从理论上讲还是可以忍受的。 达世币的混币池交易，从理论上讲是安全的，但实际上，混币的过程也有很多漏洞，首先，混币为了能够更好的隐藏交易，一般是中心化部署的，很容易受到攻击，容易产生单节点信息泄露。另外，如果用户在交易时没有及时清理Cookie，很可能通过技术手段寻找到相关的信息 **3 以零知识证明为代表的Zcash** Zcash具有两种地址： **t-address**：基于UTXO的地址，实现与BTC一样的交易逻辑 **z-address**：与隐私地址关联的交易，由密码学保证其地址值，交易数量无法被追溯和泄露。 Zcash交易有四种方式：

![](https://storage.googleapis.com/papyrus_images/dea2e80c020fdc6647e814334b94625b0010675798f033fa2c32d6f9f2f2d017.png)

**t-address->t-address**： 交易模式与BTC相同，公开透明 **t-address->z-address**： 交易输入透明可查询，交易输出地址无法从链上查询，可用做将可追溯的token加密，使其从该笔交易开始具有不可追溯性。 **z-address->t-address**： 交易输出地址与金额透明可查询，交易输入无法追溯。 **z-address->z-address**：交易输入与输出均加密不可追溯，交易数量不可追溯。 Zcash使用了零知识证明算法zk-SNARKS。简单的来说，零知识证明就是证明者能够在不向验证者提供任何有用的信息的情况下，使验证者相信某个论断是正确的。 例如A要向B证明自己拥有某个房间的钥匙，假设该房间只能用钥匙打开锁，而其他任何方法都打不开。这时有2个方法： 1.A把钥匙出示给B，B用这把钥匙打开该房间的锁，从而证明A拥有该房间的正确的钥匙。 2.B确定该房间内有某一物体，A用自己拥有的钥匙打开该房间的门，然后把物体拿出来出示给B，从而证明自己确实拥有该房间的钥匙. 后面这个方法属于零知识证明。好处在于在整个证明的过程中，B始终不能看到钥匙的样子，从而避免了钥匙的泄露。 例如Alice转1 个ZEC给Bob。这个例子中有涉及到的角色有转账双方Alice和Bob，以及验证人（矿工）。首先是Alice和Bob都有了一张支票，这两张“支票”都是有效的。Alice的支票开始就存在于整个ZCash网络，Bob的支票在生成后也会被广播到全网。为了隐藏交易者信息，要对两张支票进行加密处理，可以通过拥有者的私钥解密。

同时，因为资产只能有一份，所有矿工手里还有一个作废列表。Alice要同时广播自己的“发票代号”，录入作废列表中。发票代号也是加密的。所以矿工们能看到的信息其实是这样的。其中Alice的支票是原先存在的，Alice的支票代号r1和Bob的支票是在交易过程中被Alice广播的。

4 结论 上述三种隐私交易机制设计，基本代表了区块链中主流隐私交易的实现方式。本文简单介绍了隐私交易的算法原理， **交易的隐私性**：zk-SNARKS>=环签名>混币 **算法的简洁程度**：混币>环签名>zk-SNARKS 零知识证明系统是 1989 年由 Shafi Goldwasser、Silvio Micali 和 Charles Rackoff 在《交互证据系统的知识复杂性》（The Knowledge Complexity of Interactive Proof Systems）论文中首次提出的。在2013年第一次被应用于区块链系统中，目前，包括CMU，MIT，John Hopkins等顶尖研究机构在该领域成立了专门的团体和机构进行算法研究，同时包括以太坊，Quorum等在内的众多技术社区都在积极探索零知识证明的创新和应用。 最后，零知识证明和密码学所提供的隐私和保密性，在某种程度上是叠加的，它在社会中的作用取决于你如何衡量它。对于希望保护个人资料的个人或保护商业秘密的公司，它是一种权利，给那些不想伤害它的机构一种义务，就像那些享有言论自由的人被恳求不要用它来伤害他人一样。对政府而言（理想情况下），它是一种责任，因为涉及到大多数公民的权利，公民希望并相信，政府将用一种方式既允许我们保护自己的隐私，又保护我们免受恶意行为者滥用隐私的侵害；然而在现实中，我们知道这种情况在今天是不可能存在的。 尽管如此，密码学的目标在这两个领域都是存在的，这样一个社会才能真正实现自由：自由地保护信息的隐私，同时又不用担心滥用隐私造成伤害。考虑到密码学在过去几个世纪的历史，伴随着日新月异数学和科学进展，密码学可以能帮助世界实现这样的目标，这一期望也终将实现。

---

*Originally published on [xinba](https://paragraph.com/@netmeta/AqxqwmgafaLy4pQPoId6)*
