本文详细介绍了数字签名的多种变体,包括盲签名、环签名和多签名。这些签名技术在特定场景下非常有用,如保护用户隐私、实现匿名签名以及多人共同签名。文章通过数学公式和图形化的方式解释了这些技术的实现原理。
这是关于密码学的一系列文章中的一部分。如果这是你看到的第一篇文章,我强烈建议从系列的开始部分开始阅读。
如果你一直在关注这个系列,那么你已经见识了不少加密技术的花样。尤其是在上一篇文章中。不过……这仅仅是冰山一角。
但别担心。我们将缓慢而稳健地深入其中。
有许多内容等着我们去学习。我们可以使用椭圆曲线(以及一般的群体,公平地说)做很多事情。特别是,数字签名有一些优雅的变体,在特定的上下文中证明是非常有用的。这将是今天文章的主题。
我想在这个系列的这一点上,数学会变得稍微复杂些。待介绍的协议的复杂性略高。如果你只是想对加密技术有一个大致的了解,那么我建议你只阅读每个主题的介绍。我会尽我所能,把介绍保持简单和独立,从而提供一个良好的整体概念,不用为理解数学而烦恼。
让我们开始吧!
在某些情况下,可能需要对私人信息进行签名。例如,在一个投票系统中,用户可能希望保持他们的投票私密,但需要某个第三方的认可。后者必须盲目签署投票——而不知道用户的投票是什么。
当然,即使这从技术上是可行的,盲签名也应该谨慎实施。毕竟你不想盲目签署一笔让你的银行账户清空的交易。
别着急
不过,如果需要盲签名,有很多方法来构造它们。一种可能性是适应现有的签名方案。特别是,适应 Schnorr 签名相对简单。让我们尝试一下!
关键是Alice不能知道她正在签署什么——她将被Bob要求签署某个他之前盲化或掩盖的消息M。而在制作签名后,Bob有办法将其解盲,从而对于他的原始消息能进行验证。
这一过程的简要视觉总结
简而言之:
盲签名允许对私人信息进行签名。
我们像往常一样开始:Alice拥有私钥d和公钥Q = [d]G。她将作为我们的签名者。和往常一样,G是所选椭圆曲线群的发生器,并且有顺序n。
此过程始于Alice选择一个随机整数k,并计算R = [k]G。她将此发送给Bob,然后他开始盲化过程:
剩下的就是让Alice签署。她接收e,并简单地按常规计算签名:
在这一特定示例中,Bob在收到签名时不需要做任何事情——输出就是(s, e')。但通常情况下,他可能需要在其他版本的盲签名中逆转盲化过程。
验证过程与标准的 Schnorr 签名情况完全相同:
如果这恰好等于R',那么H(M | V)将恰好等于挑战e',签名将被接受。这应该是这样,因为:
像时钟一样,我们看到正确计算的s实际上应该验证签名(因为我们得到了原始挑战)。
顺便提一下,我故意省略了模 n运算,以简化说明。但对于严格处理,应该将其纳入演示中。
盲签名,确认。没那么疯狂,对吧?
现在我们已经热身,让我们提升一下难度……
每次你数字签署某个东西时,验证时都需要知道你的公钥。因此,你没有匿名性:你的公钥标识了你是持有私钥的个体。但如果我告诉你,有一种方法可以实现匿名签名呢?
环签名提供了这样的功能。前提是,来自一组人的单个实体生成的签名不揭示出哪一个人在组内是原始签署者。像这样:
(等我们解释完时,这会更容易理解,我保证)
再次简要概述:
环签名允许组中的用户创建一个签名,该签名可以由组的任何成员生成,从而保护用户的匿名性。
为了实现这种匿名性...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!