要理解盲签名,你得先了解公钥密码学,尤其是,(普通的)密码学签名是怎么回事。 公钥密码学会用到密钥对,一个密钥对由一把公钥和一把私钥组成,其中公钥是由私钥(一个真正随机的数字串)根据一定的数学公式计算出来的、(看似随机的)数字串。用私钥推导公钥非常简单,但根据公钥反向计算出私钥则几乎是不可能的;这是一条单行道。 公钥密码学可以用来建构双方之间的隐私通信 —— 学术论文中一般以 「Alice」 和 「Bob」 来代指着两方 —— 只要双方都向对方分享自己的公钥即可。私钥可以保持隐私而不暴露。 但 Alice 和 Bob 能用公钥密码学做的可不止隐私通信。Alice 还可以 「签名」 任意数据(Bob 也是)。实际上,Alice 就是用自己的私钥和数据一起做一些数学运算。结果就是另一串看似随机的字符串,称为 「签名」。同样地,从签名中也是无法恢复出 Alice 的私钥的(无论你是否掌握了那段被签名的数据)。这还是一条单行道。 有意思的是,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 银行。 (责任编辑:admin) |