盲签名(Blind Signature)
定义
是一种数字签名的方式,在消息内容被签名之前,对于签名者来说消息内容是不可见的。
类比例子:对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。
性质
- 不可伪造性。除了签名者本人外,任何人都不能以他的名义生成有效的盲签名。这是一条最基本的性质。
- 不可抵赖性。签名者一旦签署了某个消息,他无法否认自己对消息的签名。
- 盲性。签名者虽然对某个消息进行了签名,但他不可能得到消息的具体内容。
- 不可跟踪性。一旦消息的签名公开后,签名者不能确定自己何时签署的这条消息。(即签名者仅知sig(m'),而不知sig(m)。即使签名者保留sig(m')及其他有关数据,仍难以找出、sig(m)和、sig(m')之间的内在联系,不可对消息m的拥有者进行追踪。)
模型
-
接收者首先将待签数据进行盲变换,把变换后的盲数据发给签名者。
-
经签名者签名后再发给接收者。
-
接收者对签名再作去盲变换,得出的便是签名者对原数据的盲签名。
-
这样便满足了条件①。要满足条件②,必须使签名者事后看到盲签名时不能与盲数据联系起来,这通常是依靠某种协议来实现的。
- 大致的图示如下:
具体步骤
-
消息盲化。甲将原消息m进行盲化处理得m',然后将盲消息m'传送给乙。进行盲化处理的方法很多,例如,可随机选取某个数,称该随机数为盲因子,把原消息数值化后,与盲因子相乘即可得到盲消息。
-
对盲消息签名。乙应用通常的数字签名方法对盲消息进行签名,并将其签名sig(m')送给甲。
-
恢复签名。甲通过除去盲因子的方法,从盲签名sig(m')中得到相关原消息m的签名:sig(m)。将来出现纠纷时,当甲拿出乙的盲签名,而乙显然不能否认其签名,这样就可以证明原消息的真实性。
传统的方案主要是RSA方案。
应用场景
- 电子现金:
一般的签名,签名者对自己发出的签名,必须是记得的,比如,在何时何地对谁发的,他自己可以记下来。但是,如果把签名看作是电子现金的话,就涉及到一个匿名性的问题。我们也不希望银行通过追踪自己发出签名,来获得用户的消费情况,于是就设计出盲签名。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!