专栏名称: 以太坊爱好者
以太坊爱好者
目录
相关文章推荐
51好读  ›  专栏  ›  以太坊爱好者

干货 | 创世文档:David Chaum 的 eCash 如何催生一个密码朋克的梦

以太坊爱好者  · 公众号  · 区块链  · 2021-05-31 18:11

正文

请到「今天看啥」查看全文


有意思的是,Bob(乃至其他所有人)都能用 Alice 的公钥来检查这个签名是不是 Alice 生成的(译者注:验证需要被签名的数据)。检验完了 Bob 就知道,到底是不是 Alice 用自己的私钥(以及相应的数据片)生成了这条签名。而私钥可以签名任何数据,也就是说数据可以是 Alice 和 Bob 的任何表态和请求。举个例子,签名可以意味着 Alice 同意该段数据表示的意思(就像 Alice 给合同手写了一个签名一样)。

而盲签名则使这一切更进一步。一开始,Bob 先生成一个随机数,称为 “nonce”,然后拿这个随机数和一段初始数据一起运行特定的数学运算,得出一段乱序的数据片。这个乱序的数据片使其看起来与其它的随机字符串无异。然后 Bob 拿这段乱序数据给 Alice 签名。Alice 没法断定 Bob 的初始数据是什么样的,所以她是 “盲目的”。Alice 签名运算的结果就是 “盲签名”。

盲签名的特殊性在于,这条签名不仅关联着 Alice 的密钥(任何数字签名都有这样的特征)和乱序数据片。它也关联着那段初始的、没有被混淆过的数据。如果能获得那段原始数据,那么任何人仅需使用 Alice 的公钥,就能检查 Alice 是否签名了那段原始数据的一个乱序版本 —— 当然也包括 Alice 自己。


ECASH


盲签名就是 Chaum 用来创造数字货币系统的关键工具。

要理解这些,你要先把上文示例中的 Alice 当成一个银行:Alice Bank。这是一家普通银行,就像我们现实中的一样,客户们在银行里有专门的账户以及存款。

假设 Alice 银行有四个客户:Bob、Carol、Dan 和 Erin。在假设 Bob 想从 Carol 手上买些东西。

首先,Bob 要向 Alice 银行请求 “取款”(一般来说 Bob 当然要在事先取到钱,但你先不要管这些细节)。取款的时候,Bob 自己创建一些 “电子钞票”,形式是一串独一无二的数字,称作 “序列号”。此外,他还要像上面的例子那样,生成这些钞票的乱序版本,然后把这些乱序支票发给 Alice 银行。

收到 Bob 的乱序钞票后,Alice 银行盲签名每一条乱序数据,然后把这些签名发回给 Bob。每签发一条乱序钞票,Alice 银行就从 Bob 的银行账户扣除 1 块钱。

现在,因为 Alice 银行盲签了这些乱序钞票,她的签名已经与初始的电子钞票关联了起来。所以 Bob 现在可以使用这些初始的、没有经过混淆的钞票给 Carol 支付了。他只需把这些数据发送给 Carol 即可。

Carol 收到这些电子钞票后,转发给 Alice 银行。Alice 可以检查自己是否签名过这些钞票,这也是靠盲签名完成的事:它们都跟她的私钥有关联。Alice 银行也顺带检查同样的钞票(序列号)是否已由他人使用过(自己是否遭遇了多重支付)。

钞票检验完成后,Alice 银行就给 Carol 的账户添加等量的金额,并告知 Carol。经过银行的确认后,Carol 也知道了 Bob 所支付的是有效的钞票,可以放心地发货了。

- eCash 背后的基本原理。来源:faculty.bus.olemiss.edu/ -

最关键的是,Alice 银行只有在 Carol 要存入这些数字钞票时才会知道未经混淆的钞票数据!因此,Alice 银行根本不知道这些钞票是 Bob 的。理论上,也完全有可能是 Dan 或者 Erin 的!







请到「今天看啥」查看全文