匿名凭证
"匿名凭证"通常是指在不提供个人身份信息的情况下,用于通过某种验证或授权的证书或令牌。这可以用于各种在线服务,例如网页浏览、邮件发送、文件下载等。匿名凭证的目的是保护用户的隐私,同时允许他们访问或使用特定的服务或资源。
匿名凭证所谓匿名,就是不可关联性,即使用凭证过程中,无法关联到某一个具体身份,以此保持匿名。一般而言,有两种定义的不可关联性。
签发与展示的不可关联性:匿名凭证签发过程中,可能涉及实名的KYC,因此为了防止追踪,一般通过盲签名的技术,确保凭证在展示的时候,不会与签发过程链接。这也可以有效的实现签发者与验证者合谋情况下的隐私。
多次展示之间的不可关联性:匿名凭证在多次使用过程中,提交给验证者的数据应该不能被用于关联,一般可以通过零知识证明等方式,或通过确保每次展示时生成新的随机化签名来实现。
通常,匿名凭证可以分为两类,零知识证明凭证(Zero-knowledge Credentials)和自盲签名凭证(Self-blindable Credentials)。
零知识证明凭证
基于知识签名()构建,即在不披露或仅披露明文满足某些非标识条件的情况下,通过签名,证明明文的真实性。对于该类签名:
一般具有以下性质:
一般为了防止签名被关联,会使用可随机签名算法。即允许在签名的持有者,在不使用私钥的情况下,对签名进行随机化,随机化后的签名仍然是对原始明文的签名。
自盲签名凭证
一般基于结构保持签名(Structure-Preserving Signatures,SPS)设计,大多基于等价类上的结构保持签名(SPS-EQ)。其具有以下特性:
在这类方案中,用户在展示凭证时,每次均需要对凭证的签名进行随机化,随机化后的签名对应的明文也会被随机化,从而确保了多次展示之间的不可关联性。
为了确保明文(属性)在随机化后依旧可以被用于真实性证明,一般也会用到承诺与零知识证明,属性加密等方式实现。
Verheul 2001
Self-Blindable Credential Certificates from the Weil Pairing
自盲化凭证(Self-Blindable Credentials)于 2001 年由 Verheul 提出。该方案利用超奇异椭圆曲线上的 Weil 配对特性,允许凭证持有者在每次展示凭证前对其进行随机化,从而实现多次使用的不可关联性。这种随机化过程使得凭证在功能上相当于其自身的零知识证明,增强了用户的隐私保护。然而,Verheul 的方案存在一些限制:首先,它不支持在凭证中包含用户属性(如年龄、身份等),因此无法实现基于属性的认证。其次,该方案缺乏形式化的安全性证明,可能存在未被发现的安全漏洞。此外,虽然该方案在理论上具有创新性,但在实际应用中可能面临效率和实现复杂度等挑战。
方案基于结构保持签名(Structure-Preserving Signatures,SPS),但仅对一个用户的公钥pk_U做签名,签名可以被随机化,随机化签名的同时公钥也被随机化,此时用户认证过程的签名可以基于 DSA, ElGamal, Schnorr 签名(这一类的公私钥生成结构具备类似于同态的特性)实现。
Hanser and Slamanig
这方案基于等价类上的结构保持签名(SPS-EQ)构造,所谓等价类,即签名过程不只是对单独的消息签名,而是对所有签名的等价类变体的签名,例如签名了x,就也同时签名了x^i,i=1,2,3...。由于又支持对多个消息签名,SPS-EQ 方案允许对消息和签名进行联合随机化,使得新的签名对应于同一等价类中的不同消息表示,即签名x_1,x_2,同时就签名了(x_1^i,x_2^i),i=1,2,3...,注意所有消息在等价类上是同步随机化的。
与Verheul方案相比,Hanser and Slamanig方案是一种通用方案,可以支持多个消息,也不要求消息具备特定形式g^x(其实也可以不要这种特定形式,只是用户如果要能够将签名数据作为公钥,用于认证,则必须知道对应的x)。
对比
自盲匿名凭证(self-blindable anonymous credentials)和基于零知识证明的匿名凭证(zero-knowledge proof-based anonymous credentials)在实现匿名性和隐私保护的原理上有一些关键区别。以下是它们的对比分析:
核心机制
自盲匿名凭证:基于凭证的随机化特性。凭证持有者在每次使用凭证时,通过数学操作(如签名随机化、公钥随机化等)对凭证进行随机化,使得观察者无法将不同使用行为关联到同一凭证。凭证本身具备一定的隐私保护能力,不需要复杂的零知识证明。
基于零知识证明的匿名凭证:基于零知识证明(ZKP),凭证持有者可以在不泄露凭证内容的前提下证明某些属性的真实性。ZKP 提供了灵活的属性证明能力,例如“拥有某属性”或“满足某阈值”的证明。不依赖于随机化,而是通过加密和数学证明保证不可关联性。
隐私保护方式
自盲匿名凭证:
隐私保护主要依赖于随机化(self-blinding),即每次使用都生成一个新的等价凭证。
适合场景:需要多次使用相同凭证但保持不可关联性,例如电子现金、多次使用的通行证等。
基于零知识证明的匿名凭证:
隐私保护通过不直接暴露凭证内容,仅证明某些条件满足来实现。
适合场景:需要证明复杂逻辑条件下的属性,比如“年龄超过 18 岁但不暴露具体年龄”。
不可关联性来源
自盲匿名凭证:
凭证持有者主动随机化凭证,使得不同使用行为难以关联。
不依赖于额外的交互式协议,随机化后的凭证可独立使用。
基于零知识证明的匿名凭证:
不可关联性来自于零知识证明本身的性质,即证明过程不会泄露额外信息。
通常需要依赖交互式或非交互式零知识证明协议。
复杂性
自盲匿名凭证:
构造相对简单,签名和随机化是核心操作。
计算开销较低,适合资源受限的环境。
不适合非常灵活的选择性披露需求。
基于零知识证明的匿名凭证:
构造复杂,依赖于零知识证明工具(如 Groth16、Bulletproofs 等)。
支持灵活的选择性披露,但计算和通信开销较高。