112 / 736BLIND

Blind Signature

盲签名:看不到内容,也能确认消息

设想一张代金券:发行者需要签发它,却不应抄下它的唯一编号。日后,发行者能认出这张券确实有效,但无法仅凭签名判断当初是谁领取的。Blind Signature 解决的正是这个看似矛盾的问题。它是电子现金的一项基础思想:验证钱是否有效,而不让验证过程本身变成持有人的购物记录。

Blind Signature,即盲签名,是一种密码学过程:申请者先向签名者隐藏消息,取得隐藏版本的签名,再去掉隐藏层,留下原始消息的可用签名。David Chaum 将这个思想用于电子现金。协议正确时,签名者无法根据签名交互和日后出现的代币,确定它对应哪次签发。但时间、金额、网络地址等其他线索并不会自动消失。

普通的签发过程可以同时记录代金券编号和领取者。商家把券交回来时,发行者便能把两条记录联系起来。Chaum 用带复写纸的信封解释盲签名:在信封外盖章,印记会转移到里面的纸条上,但发行者看不到纸条编号。取出的纸条仍有有效印记。这只是帮助理解的比喻,不是用纸和印章保障安全的操作指南。真实协议靠数字与数学,让计算机之间也能实现这种分离。 [7] [1]

安娜想领取一张价值 100 sats 的数字券。Sats 是 Bitcoin 的小单位。钱包是用来管理这些券并进行支付的应用。它先生成不可预测的秘密值,用它区分这张券,再用另一个随机值在数学上把秘密遮住。这一步叫盲化。发行者收到的是遮住后的消息,而非原始秘密。钱包保留日后去除遮蔽所需的信息。盲化不是简单改文件名或删掉姓名,而必须满足明确的密码学性质。为了便于理解,这里只用一张券举例;实际钱包可能把不同面额的多张券组合成所需金额。 [8] [2]

盲签名不意味着免费替任何人签任何东西。发行者可以先确认安娜的付款,或扣除相应余额。它知道申请金额是 100 sats,但不必知道券的秘密编号。签名密钥是一个秘密数值,发行者的软件用它来生成签名。金额可以绑定到该面额专用的签名密钥,因此改写文件中的数字不能凭空提高券的价值。发行者签署遮住后的输入,再返回结果。这里分开的是两件事:安娜为什么有资格领券,以及将来如何辨认这张具体的券。 [7] [8]

安娜不必再向发行者公开原始秘密。钱包自行去掉返回结果中的随机遮蔽,这一步称为 unblinding,即去盲化。设计正确时,剩下的是最初消息的有效认证,而钱包并没有获得发行者的私有签名密钥。用户看到钱包余额增加,数学上的包装与拆包都在后台完成。所得数字凭证通常叫 token,即代币。区块链是共同维护的比特币交易记录。这个代币不是区块链上独立的比特币,而是向发行者主张兑付的凭证。 [2] [8]

验证要回答的是:这个认证是否对应消息和发行者的正确密钥?基于 RSA 密码系统的盲签名可用公钥验证;其他构造可能需要额外证明或发行者参与。这不能证明券尚未花费、没人留存副本,也不能证明发行者有足够储备兑付。这是另外三个问题。就像真实但已核销的门票不能再次入场,密码学上有效的凭证也可能无法用于下一笔付款。 [2] [10]

安娜把券发给彼得,但券是数据,她可以保留相同副本。盲签名不会删除她设备上的文件。因此,常见在线系统中,收款钱包会向发行者提交代币,由发行者验证有效性并检查带有同一秘密值的代币是否已被花费。接受后,发行者把旧代币记为已用,并可用同样的盲签名流程为彼得签发新代币。安娜不知道彼得的新秘密。之后,系统会根据记录拒绝再次花费旧副本的请求。重复花费同一笔资金叫 double spend,即双花;防止它需要支付系统中的另一套机制。 [9] [8]

保护也必须防范另一方向:客户端不能从获准的签名交互中制造带有新秘密的额外有效凭证。这叫不可伪造性。盲签名尤其关注 one-more unforgeability:完成一定次数的签名交互后,攻击者能否多拿出一组全新、有效的消息与签名?复制原有那一组是前面讨论的另一问题。正确的密码学也不能代替服务器检查领取资格、金额和允许的代币结构。这些检查共同阻止未经授权的价值发行。 [2] [3]

发行者可能知道安娜何时领取代币、金额多少。兑付时,它也可能知道时间、金额或收款方网络地址。这些叫元数据,也就是随支付凭证出现的信息。用户群很小时,罕见金额或紧接着发生的付款,可能让关联更容易被推断。共同使用且经过验证的密钥也很重要:只分配给一个人的密钥可能成为身份标记。协议的盲性保护的是签名与签发之间的特定联系,不是所有周边信息。它也无法修复被入侵的钱包,或强迫发行者履行承诺。 [7] [2]

Chaum 的思想构成电子现金的基础,历史上与 DigiCash 相连。今天,Cashu 和 Fedimint 在 Bitcoin 生态中使用这一思想,通过 Lightning Network (用于快速完成比特币支付的网络) 连接便利资金进出,但其构造不是 RSA。基础 Cashu 使用铸币方的秘密密钥验证代币;NUT-12 增加了可凭公开信息验证签名的证明,却不证明代币还未花费。Fedimint 将管理分散到一组运营者。两者中,用户持有的都是对发行者的兑付请求,依赖其资金托管和可用性。买方隐私也能与其他目标结合,例如 GNU Taler 同时强调商家收入的可追溯性。 [5] [6] [10] [4]

简化机制可以用几个式子说明。消息安全编码为数字 m;公钥包含 n 和 e,私有部分记作 d。申请者选择随机 r,它在模 n 下具有乘法逆元 r⁻¹,然后发送 m′ = m·r^e mod n。Mod n 表示用除以 n 的余数计算。签名者返回 s′ = (m′)^d mod n,申请者得到 s = s′·r⁻¹ mod n。验证时有 s^e mod n = m。因子 r⁻¹ 正是去掉遮蔽的关键。这些关系解释原理,却不是完整的安全程序。RFC 9474 还规定消息准备、带安全编码的 RSA-PSS 签名方案、输入检查以及签名密钥的分离使用。随机性和正确的协议变体同样重要。 [2] [3]

要获得更完整的理解,请将本词条与以下词条结合阅读: David Chaum, Chaumian eCash, DigiCash, Cashu, Fedimint, Bitcoin 隐私. 反向关联还来自: DigiCash, Chaumian eCash, Reusable Proofs of Work, Fedimint.

DOC · 001David Chaum — Blind Signatures for Untraceable Payments一手来源 DOC · 002RFC 9474 — RSA Blind Signatures规范 DOC · 003IRTF/CFRG — RFC 9474 publication record规范 DOC · 004GNU Taler — Principles一手来源 DOC · 005Cashu protocol specifications规范 DOC · 006Fedimint — How Federations Work一手来源 DOC · 007David Chaum — Security without Identification一手来源 DOC · 008Cashu NUT-00 — Notation and models规范 DOC · 009Cashu NUT-03 — Swapping tokens规范 DOC · 010Cashu NUT-12 — DLEQ proofs规范
修订日期: 来源优先 · 非投资建议