Bootle, J., Elkhiyaoui, K., Hesse, J., Manevich, Y. (2022). DualDory: Logarithmic-Verifier Linkable Ring Signatures Through Preprocessing. ESORICS 2022.
https://link.springer.com/chapter/10.1007/978-3-031-17146-8_21
在这项工作中,原文作者构建了第一个具有对数签名大小和验证的可链接环签名,不需要任何可信机制。这个方案依赖于离散对数类型假设和双线性映射,通过集成改进的预处理参数,改进了DualRing的环签名,以减少环大小从线性到对数的验证时间。
dualory=Dualring+Dory
Dory is a pairing-based interactive argument,通过一次性离线预处理阶段实现对数验证时间,代替bulletproof。使DualRing的线性验证成本降至对数。
通过确定性标签进一步增强了DualDory的可链接性。更准确地说,将Pedersen承诺和知识签名结合起来,以表明标签是使用环中的一个密钥计算的。作为一个积极的副作用,我们能够预先计算签名的线性工作,当消息已知时,只需要执行恒定数量的操作。
Overview
DualRing
加入可链接性
引入了prefix linkability,其中要签名的字符串被分成两个部分:前缀 p r f x prfx prfx和消息 m m m。如果两个签名是由同一用户创建的,则可以链接它们,并使用相同的前缀 p r f x prfx prfx签名消息。
构造prefix-linkable,签名者计算一个标签tag H ′ ( p r f x ) s k H'(prfx)^{sk} H′(prfx)sk
为了确保使用与签名其余部分相同的秘密密钥正确计算标签tag,让签名者为其秘密密钥生成Pedersen承诺 c o m = P s k Q r com = P^{sk}Q^r com=PskQr,并使用基于标准sigma协议的“tag proof”来显示 c o m com com和 t a g tag tag都使用相同的秘密密钥。(注意,不能对用户的公钥执行这种一致性检查,因为这会泄露用户的身份。)
进一步的问题。签名者可以使用DualRing来证明自己掌握环中一个私钥,但此证明与tag或com无关。解决:签名者知道 c o m = P s k Q r com=P^{sk}Q^r com=PskQr对应的 s k , r sk,r sk,r,那么他知道如何打开环 ( c o m / p k 1 , . . . , c o m / p k n ) (com/pk_1,...,com/pk_n) (com/pk1,...,com/pkn)中某一个承诺到0,即,他们知道 r r r满足 c o m / p k i = Q r com/pk_i=Q^r com/pki=Qr.
将DualRing应用于 ( c o m / p k 1 , . . . , c o m / p k n ) (com/pk_1,...,com/pk_n) (com/pk1,...,com/pkn),并添加tag proof产生一个LRS,其中验证者检查tag proof和以下方程:
此签名的大小可在dualring中可减少到 O ( l o g n ) O(log~n) O(log n)。但是,验证时间仍然是 O ( n ) O(n) O(n)。
同时减少签名大小和验证时间
https://link.springer.com/chapter/10.1007/978-3-030-90453-1_1
Dory方案是将bulletproof推广到双线性对:
优化验证成本:Dory允许在离线阶段一劳永逸地对commitment keys 进行预处理。此后,验证者只需要对这些密钥使用简洁的承诺,并产生 O ( l o g n ) O (log~n) O(log n)成本。
Dory构造:
- 映射到双线性对:将(3)和(4)(prefix-Dualring验证方程)映射到双线性群上的方程。假设DualRing方案已经在双线性group的 G 1 \mathbb{G}_1 G1上执行。考虑group元素 e ( P , P ~ ) e(P,\tilde{P}) e(P,P~)(其中 P ∈ G 1 , P ~ ∈ G 2 P\in\mathbb{G}_1,\tilde{P} \in\mathbb{G}_2 P∈G1,P~∈G2)。利用方程(3)的左右两边取幂,利用 e e e的双线性,得到
类似地,(6)可以与 P ~ \tilde{P} P~配对并重新排列得到
由于幂和双线性对的映射都是单射,所以方程(5)(6)包含了(3)(4).
- 证明条件成立:给定对 ( P , … , P ) ∈ G 1 n , ( P ~ c 1 , … , P ~ c n ) ∈ G 2 n (P,…,P)\in\mathbb{G}_1^n,(\tilde{P} ^{c_1},…,\tilde{P} ^{c_n})\in\mathbb{G}_2^n (P,…,P)∈G1n,(P~c1,…,P~cn)∈G2n, ( c o m / p k i ) i = 1 n ∈ G 1 n (com/pk_i)_{i=1}^n\in\mathbb{G}_1^n (com/pki)i=1n∈G1n的承诺,签名者可以使用Dory来证明公式(5)和公式(6)成立,每个方程的左侧作为目标值。注意,(5)中的目标值涉及n个值,因此为了避免这里的 O ( n ) O(n) O(n)个验证器成本,我们将这些值替换为 ( c o m / p k 1 , … , c o m / p k n ) (com/pk_1,…,com/pk_n) (com/pk1,…,com/pkn)的承诺。只要承诺方案具有约束力,这仍然足以保证DualRing的安全性。
- 优化验证:使用 O ( n ) O(n) O(n)次离线操作和 O ( l o g n ) O(log~n) O(log n)次在线操作来计算对 ( c o m / p k 1 , … , c o m / p k n ) ∈ G 1 n (com/pk_1,…,com/pk_n)\in\mathbb{G}_1^n (com/pk1,…,com/pkn)∈G1n的承诺。由于 c o m com com依赖于随机性 r r r,它对于每个签名都是不同的,因此验证者不可能独立于任何签名一劳永逸地计算这个承诺。
相反,验证者离线计算 Γ ~ : = ∏ i = 1 n Γ ~ i \tilde{\Gamma} :=\prod_{i=1}^n\tilde{\Gamma}_i Γ~:=∏i=1nΓ~i,一个 ( p k 1 , … , p k n ) (pk_1,…,pk_n) (pk1,…,pkn)的承诺 A 0 : = ∏ i = 1 n e ( p k i , Γ ~ i ) {\rm A}_0:=\prod_{i=1}^n e(pk_i,\tilde{\Gamma}_i) A0:=∏i=1ne(pki,Γ~i),这需要 O ( n ) O(n) O(n)次操作。这并不依赖于签名的任何部分,并且可以为每个环“离线”计算一次,然后在“在线”签名验证中重用。请注意,承诺密钥的长度 n n n给出了可以提交的用户公钥数量的上限。在验证签名时,验证者可以计算对 ( c o m / p k 1 , … , c o m / p k n ) (com/pk_1,…,com/pk_n) (com/pk1,…,com/pkn)的承诺 e ( c o m , Γ ~ ) / A 0 e(com,\tilde{\Gamma})/{\rm A}_0 e(com,Γ~)/A0。
Preliminaries
Argument of Knowledge
Argument of Knowledge for Pairing Products
notations
定义关系
Signature of Knowledge
Prefix-Linkable Ring Signature Schemes
tag proof
tag proof 用于证明 c o m com com和 t a g tag tag使用了相同的 s k sk sk,且不泄露秘密 s k , r sk,r sk,r
X \mathbb{X} X公开参数, W \mathbb{W} W秘密参数,关系 R T a g \mathcal{R}_{Tag} RTag的SoK (with message m m m):
DualDory
(用大写字母表示group元素,小写字母表示 Z p \mathbb{Z}_p Zp元素,带~的表示 G 2 \mathbb{G}_2 G2中的元素,下划 _ \_ _表示向量,粗体表示 G T \mathbb{G}_T GT)
签名过程
- 计算 c o m com com,并用 c o m com com迭代公钥环 p k i ′ pk_i' pki′
- 生成 p k ′ pk' pk′的承诺(为了验证的时候不再需要 O ( n ) O(n) O(n)),在Dualring中代替公钥环计算hash值
A = e ( c o m , Γ ~ ) / A 0 = e ( c o m , ∏ i = 1 n Γ ~ i ) / ∏ i = 1 n e ( p k i , Γ ~ i ) = ∏ i = 1 n e ( p k i ′ , Γ ~ i ) = e ( p k ′ ‾ , Γ ~ ‾ ) {\rm A}=e(com,\tilde{\Gamma})/{\rm A}_0=e(com,\prod_{i=1}^n\tilde{\Gamma}_i)/\prod_{i=1}^ne(pk_i,\tilde{\Gamma}_i)=\prod_{i=1}^ne(pk_i',\tilde{\Gamma}_i)=e(\underline{pk'},\underline{\tilde \Gamma}) A=e(com,Γ~)/A0=e(com,∏i=1nΓ~i)/∏i=1ne(pki,Γ~i)=∏i=1ne(pki′,Γ~i)=e(pk′,Γ~)
- 环 p k ′ ‾ \underline{pk'} pk′上的Dualring签名,但并没有对消息 m m m签名。
- 通过关系的AoK证明双线性化的签名验证方程(5)(6)(这是为了优化验证的复杂度): B = e ( Γ ‾ c ‾ , P ~ ) , C = e ( Q y / Q x ∏ i ≠ j p k i ′ − c i , P ~ ) = e ( Q r ⋅ c j ∏ i ≠ j p k i ′ c i , P ~ ) = e ( p k j ′ c j ∏ i ≠ j p k i ′ c i , P ~ ) = e ( p k ′ ‾ , P ~ ) {\rm B}=e(\underline{\Gamma}^{\underline c},\tilde{P}),{\rm C}=e(Q^y/Q^x \prod_{i\neq j}pk_i'^{-c_i},\tilde P)=e(Q^{r\cdot c_j} \prod_{i\neq j}pk_i'^{c_i},\tilde P)=e(pk_j'^{c_j} \prod_{i\neq j}pk_i'^{c_i},\tilde P)=e(\underline{pk'},\tilde P) B=e(Γc,P~),C=e(Qy/Qx∏i=jpki′−ci,P~)=e(Qr⋅cj∏i=jpki′ci,P~)=e(pkj′cj∏i=jpki′ci,P~)=e(pk′,P~)符合关系的定义规范, π 1 \pi_1 π1对应验证方程(6)
类似地, π 2 \pi_2 π2对应验证方程(5),并通过 A , B \rm A,B A,B连接两个关系。
- 用于耦合可链接性的tag proof(SoK)以及签名消息 m m m:生成tag,和com、prfx一起作为证明的公开参数,用私密参数 ( s k , r ) (sk,r) (sk,r)生成(关系+消息)的知识签名。
验证过程需要对三个证明/知识签名进行验证
- 首先要恢复出用于验证缺少的参数: ( A , C ) , ( E ) ({\rm A,C),(E}) (A,C),(E)
- 三次验证
链接过程因为是前缀/事件链接,所以必须是同一prfx下不同消息的两个签名,由同一签名者生成,比对tag
复杂度