盲签名(Blind Signature)
定义
是一种数字签名的方式,在消息内容被签名之前,对于签名者来说消息内容是不可见的。
类比例子:对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。
性质
- 不可伪造性。除了签名者本人外,任何人都不能以他的名义生成有效的盲签名。这是一条最基本的性质。
- 不可抵赖性。签名者一旦签署了某个消息,他无法否认自己对消息的签名。
- 盲性。签名者虽然对某个消息进行了签名,但他不可能得到消息的具体内容。
- 不可跟踪性。一旦消息的签名公开后,签名者不能确定自己何时签署的这条消息。(即签名者仅知sig(m'),而不知sig(m)。即使签名者保留sig(m')及其他有关数据,仍难以找出、sig(m)和、sig(m')之间的内在联系,不可对消息m的拥有者进行追踪。)
模型
-
接收者首先将待签数据进行盲变换,把变换后的盲数据发给签名者。
-
经签名者签名后再发给接收者。
-
接收者对签名再作去盲变换,得出的便是签名者对原数据的盲签名。
-
这样便满足了条件①。要满足条件②,必须使签名者事后看到盲签名时不能与盲数据联系起来,这通常是依靠某种协议来实现的。
- 大致的图示如下:
具体步骤
-
消息盲化。甲将原消息m进行盲化处理得m',然后将盲消息m'传送给乙。进行盲化处理的方法很多,例如,可随机选取某个数,称该随机数为盲因子,把原消息数值化后,与盲因子相乘即可得到盲消息。
-
对盲消息签名。乙应用通常的数字签名方法对盲消息进行签名,并将其签名sig(m')送给甲。
-
恢复签名。甲通过除去盲因子的方法,从盲签名sig(m')中得到相关原消息m的签名:sig(m)。将来出现纠纷时,当甲拿出乙的盲签名,而乙显然不能否认其签名,这样就可以证明原消息的真实性。
传统的方案主要是RSA方案。
应用场景
- 电子现金:
一般的签名,签名者对自己发出的签名,必须是记得的,比如,在何时何地对谁发的,他自己可以记下来。但是,如果把签名看作是电子现金的话,就涉及到一个匿名性的问题。我们也不希望银行通过追踪自己发出签名,来获得用户的消费情况,于是就设计出盲签名。