{"content":{"title":"环签名与匿名化","body":"![](https://img.learnblockchain.cn/2025/03/08/1Czls1kiLYgogMFYfIxnFUA.jpeg)\r\n\r\n## 环签名与匿名化\r\n\r\n本文中涉及方法的演示 [在这里](https://asecuritysite.com/encryption/ring_sig)。\r\n\r\n因此，白宫发生了一次信息泄露事件。唐纳德·特朗普召集了他的网络安全团队，并告诉他们：“我知道你们之中有人泄露了信息，但我无法判断是谁。” 唐纳德怎么能知道他的团队中有人泄露了信息，但又不知道是谁呢？这可以通过 **环签名** 来实现，它提供了 **匿名性**、**不可抵赖性** 和 **对抗串通** 的能力。\r\n\r\n![](https://img.learnblockchain.cn/2025/03/08/13sWfuFbp3IkP9TpTvDUJQQ.png)\r\n\r\n环签名是一种数字签名，由一个拥有自己密钥的组员生成。无法确定该签名是由该组中的哪位成员创建的。该方法最早由 Ron Rivest、Adi Shamir 和 Yael Tauman 在 2001 年提出，在他们的论文中，他们提出了白宫泄密的困境。\r\n\r\n### 创建环\r\n\r\n在环签名中，我们定义一组实体，每个实体都有自己的一对公私钥 (P1, S1)、(P2, S2)、…、(Pn, Sn)。如果我们希望一个实体 i 签署一条消息 (message)，他们会使用自己的私钥 (si)，而使用组中其他成员的公钥 (m, si, P1…Pn)。因此，应该能够通过知道该组的公钥来检查组的有效性，但如果不知道组内的私钥，则无法确定有效签名。\r\n\r\n假设 Trent、Bob、Eve 和 Alice 在一个组中，他们各自都有自己的公钥和私钥。现在，Bob 希望从组中签署一条消息。他最初生成一个随机值 v，然后为其他参与者生成随机值 (xi)，但取自己的私钥 (si) 的同时，使用它来确定一个不同的私钥，并这个私钥是加密函数的反向。\r\n\r\n他现在获取消息并对其进行哈希，从而创建一个密钥 (k)。这个密钥将与对称加密一起用于加密环中的每个元素 (Ek)，然后环中的每个元素使用前一个元素的 EX-OR 函数 (见图 1)。\r\n\r\n![](https://img.learnblockchain.cn/2025/03/08/0olQTsT8ONiffGuCn.png)\r\n\r\n接下来，其他参与者的每个随机值都用给定参与者的公钥进行加密。然后，Bob 计算 ys 的值以创建环（环的结果必须等于 v）。然后他将这个值反转以产生等效的私钥 (xs)。Bob 现在发布整体签名和随机 x 值，以及计算出的私钥。要检查签名，接收方只需计算环并检查结果是否与发送的签名匹配。\r\n\r\n基本方法如下：\r\n\r\n1\\. 生成加密 k=Hash(message)。\r\n\r\n2\\. 生成一个随机值 (u)。\r\n\r\n3\\. 将 u 加密得到 v=Ek(u)。\r\n\r\n4\\. 对于每个人（除了发送者）：\r\n\r\n- 4.1 计算 e=si^{Pi} (mod Ni)，其中 si 是为第 i 方生成的随机数，Pi 是该方的公钥。\r\n- 4.2 计算 v=v⊕e\r\n\r\n5\\. 对于签名方 (z)，计算 sz=(v⊕u)^d (mod Nz)，其中 d 是签名方的私钥。\r\n\r\n我们将得到签名 (v=Ek(u))，并完成环。\r\n\r\n我在 [这里](https://asecuritysite.com/encryption/ring_sig) 创建了原始方法的演示，这里是该方法的概述演示 \\[ [幻灯片](https://asecuritysite.com/public/ring_sig.pdf)\\]：\r\n\r\n \r\n\r\n[环签名 - YouTube ](https://www.youtube.com/watch?v=LB3m8GZ-mpg)\r\n \r\n \r\n\r\n本文中涉及方法的演示 [在这里](https://asecuritysite.com/encryption/ring_sig)：\r\n\r\nring\\_sig - Replit\r\n\r\n[跳过内容](https://replit.com/@billbuchanan/ringsig?lite=true&referrer=https%3A%2F%2Fmedium.com%2Fasecuritysite-when-bob-met-alice%2Fring-signatures-and-anonymisation-c9640f08a193#main-content)\r\n\r\n基本方法包括 Bob 为环中的其他人创建虚假的私钥：\r\n\r\n![](https://img.learnblockchain.cn/2025/03/08/1ONGxgVW1Rv8Ji1kLGu0FNQ.png)\r\n\r\n然后环的验证为：\r\n\r\n![](https://img.learnblockchain.cn/2025/03/08/1a1EjnAYL0bq0nW2xU_yIrA.png)\r\n\r\n![](https://img.learnblockchain.cn/2025/03/08/1iQdVtC-uMQyBEVP3ncf39w.png)\r\n\r\n## Monero中的环签名\r\n\r\n比特币网络的主要问题是交易金额及资金的发送者和接收者是不私密的，知道某人地址的人可以追踪他们的交易。这种情况是因为区块链需要检查发送者是否有足够的资金给收件人。因此，许多加密货币正在寻找匿名化交易的方法。例如，以太坊使用 zk-Snarks 隐藏身份。\r\n\r\n保存身份的一种方法是由 Rivest 等人提出，使用 RSA 加密。不幸的是，这对现代系统来说并不高效，因此 Greg Maxwell 定义了一种椭圆曲线方法，作为创建环签名的新方法：Borromean 环签名 \\[ [论文](https://github.com/Blockstream/borromean_paper/blob/master/borromean_draft_0.01_9ade1e49.pdf)\\]。\r\n\r\n加密货币 Monero 随后采用了这种方法来实现交易匿名化，但后来迁移至一种新的方法：多层链接自发匿名组签名。这种方法隐藏交易金额以及付款人和收款人的身份 \\[ [论文](https://eprint.iacr.org/2015/1098.pdf)\\]。该方法现在称为 RingCT（环隐私交易），于 2017 年 1 月推出，并在 2017 年 9 月强制适用于所有交易。\r\n\r\n## 结论\r\n\r\n比特币网络的主要问题是交易金额及资金的发送者和接收者是不私密的，知道某人地址的人可以追踪他们的交易。这种情况是因为区块链需要检查发送者是否有足够的资金给收件人。因此，许多加密货币正在寻找匿名化交易的方法。\r\n\r\n>- 原文链接： [medium.com/asecuritysite...](https://medium.com/asecuritysite-when-bob-met-alice/ring-signatures-and-anonymisation-c9640f08a193)\r\n>- 登链社区 AI 助手，为大家转译优秀英文文章，如有翻译不通的地方，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/26884","address":null},"history":null,"timestamp":1741414421,"version":1}