一、简述
匿名凭证的作用是允许用户证明当前identity符合某个属性,且不暴露出其他属性。本文描述的方法通过使用零知识证明的方式保证属性在披露的过程中不被其他人知道,且可实现凭证一次性使用,第二次用于展示给Verifier的时候会被感知。
由于其原稿难懂,有多个符号错误,计算错误,符号未命名的问题,所以本人进行翻译、纠正。
Indy选择性披露核心的流程在于:
Init:
issuser生成属性模板
prover/holder使用自己的私钥master key和属性(可以盲化或不盲化),用属性模板生成证明,向issuer获取证书
issuer用自己的私钥对属性进行签名,将其发送给Holder
Verify:
prover选择要披露的属性,,根据证书生成证书的proof,将proof和属性给Verifier
Verifier根据issuer的公钥,proof,属性。用证书验证属性是否在proof里。验证proof是否是由Issuer的公钥签发
核心性质:
不可伪造性(unforgeable),即没有人可以使用未经Issuer签发的凭证通过Verifier的验证
不可链接性(unlinkable),即不可能使用同样的凭证与多个匿名的presentation关联。技术上用knowledge proof证明他拥有凭证。
可拓展性(delegatable),Prover A可以将具有特定属性X的证书C(credential)委托给Prover B,同时Verifier在当B提供属性Y的时候不获取A的身份。技术上代表可以进一步创建证书链。
二、Protocol Overview
最简单的凭证生命周期:一个凭证,单个issuer,单个持有人,单个验证者
- Issuer制定凭证模板\(\mathcal S\):签凭证使用的密码学类型、\(l\) 个凭证属性、隐藏属性 \(A_h \subset \{1,2,…,l\}\) 、凭证公钥 \(P_k\) 、非撤销凭证属性数\(l_r\) 非撤销公钥\(P_r\) ,并将凭证公布到区块链上,定义其语义;
- Holder检索到凭证模板,并设定隐藏属性;
- Holder想Issuer请求凭证,并将隐藏属性以黑盒的形式发给Issuer,并对已知属性的值达成协议 \(A_k=\{1,2,...,l\}/A_h\) ;
- Issuer返回凭证对\((C_p,C_{NR})\) 给Holder。第一个 \(C_p\) 凭证包括了必须设定的 \(l\)个属性,第二个\(C_{NR}\) 赋值了第一个凭证的非撤销状态;Issuer随后将该凭证的未撤销状态公布到链上;
- Holder连接到Verifier,Verifier发送证明请求 \(\mathcal E\) 给Holder,证明请求包括了凭证模板\(\mathcal{S}_E\) 和披露断言 \(\mathcal D\) ;对于属性 \(m\) 与验证值 \(V\) 的披露断言模式可以有 \(m>V, m<V, m=V\) ;
- Holder检查所持有的凭证对是否符合 Verifier发来的模板 \(\mathcal{S}_E\) ,并从区块链中检索该模板未被撤销的见证(witness);
- Holder 使用符合证明请求 \(\mathcal E\) 的未撤销凭证,生成了证明 \(P\) ,并发送给Verifier;
- Verifier验证证明\(P\);
以下时序图描述整个协议流程:
Prover与Issuer交互:
Prover与Verifier交互:
三、具体方案步骤
接下来以整个方案的流程逐步详细介绍:
1. Schema准备
1.1 Issuer定义凭证属性
(1.1.1)Issuer定义一个有 \(l\) 个属性 \(\{m_1,…,m_l\}\) 的Schema \(\mathcal{S}\) ,并设置隐藏属性集合 \(A_h \subset \{1,2,…,l\}\) 。
在Sovrin中,\(m_1\) 保留为链接向Holder的链接, \(m_2\) 保留为枚举器, \(m_3\) 保留为策略地址\(I\) ,并且\(\{1,3\}\subset A_h, and\ 2 \notin A_h\);
Issuer定义非撤销凭证内含 \(m_1,m_2\) 两个属性;
1.2 Issuer定义凭证密码方法
- (1.2.1)Issuer使用CL签名算法,生成一组Primary Credential公私钥对:
- 随机获取1024-bit的素数 \(p', q'\) ,计算: \(p\leftarrow 2p'+1,\ q\leftarrow 2q'+1,\ n\leftarrow pq\)
- 随机取模n的二次剩余 \(S\) :\(S\) 不是n的倍数,且mod n同余于某个数的平方,例如 \(S\equiv x^2(mod\ n),\ S^{(n-1)/2}\equiv 1(mod\ n)\) ;
- 随机取 \(x_Z,x_{R_1},…,x_{R_l}\ \in[2;p'q'-1]\)
- 计算得公钥 \(P_k = (n,S,Z\leftarrow S^{x_Z},\{R_i\leftarrow S^{x_{R_i}}\}_{1\leqslant i \leqslant l})\) ,私钥 \(s_k=(p',q')\)
1.3 Issuer提供凭证密钥正确性
(1.3.1) Issuer生成一堆随机数 \(\widetilde{x_Z},\widetilde{x_{R_1}},…,\widetilde{x_{R_l}}\ \in[2;p'q'-1]\)
Issuer计算:
\[ \widetilde{Z}\leftarrow S^{\widetilde{x_Z}}\\ \{\widetilde{R_i}\leftarrow S^{\widetilde{x_{R_i}}}(mod\ n)\}_{i\le i\le l}\\ c\leftarrow H_1(Z||\widetilde Z||\{R_i,\widetilde{R_i}\}_{1\le i\le l})\\ \widehat{x_Z}\leftarrow \widetilde{x_Z}+cx_Z\\ \{\widehat{x_{R_i}}\leftarrow \widetilde{x_{R_i}}+cx_{R_i}\}_{1\le i\le l} \]
- Issuer最终将证明 \(\mathcal P_I=(c,\widehat{x_Z},\{\widehat{x_{R_i}}\}_{1\le i\le l})\) 发送出去。
1.4 Issuer定义Non-revocation凭证
(1.4.1)Issuer使用CKS聚合器与签名方法以追踪Primary Credential的撤销状态,生成一组Non-revocation Credential的密钥对:
- 设有双线性配对群 \((q, \Bbb{G}_1,\Bbb{G}_2, \Bbb{G}_t,e,g,g')\) ,其中 \(\Bbb{G}_1,\Bbb{G}_2,\Bbb{G}_t\) 都是素数 \(q\) 阶群,\(e : \Bbb{G}_t \leftarrow \Bbb{G}_1 × \Bbb{G}_2\) 是一种映射关系,\(g,g’\) 分别是 \(\Bbb{G}_1,\Bbb{G}_2\) 的生成子。
- 随机生成 \(h,h_0,h_1,h_2, \widetilde{h} \in \Bbb{G}_1\) ;
- 随机生成 \(u,\widehat{h} \in \Bbb{G}_2\) ;
- 随机生成 \(sk, x \in \Bbb{Z}_q\) ;
- 计算得出撤销公钥: \(P_r=(g,g',h,h_0,h_1,h_2,\widetilde{h}, \widehat{h},u,pk\leftarrow g^{sk},y\leftarrow \widehat{h}^x)\) 得出私钥 \((x,sk)\)
(1.4.2)Issuer生成新的聚合器(Accumulator) \(A\) ,其中 \(L\) 是凭证的index :
随机生成 \(\gamma \in \Bbb{Z}_q\) ;
计算:
\[ \tag{1.1}g_1,g_2,…,g_L,g_{L+2},…,g_{2L},\ where\ g_i=g^{\gamma^i} \]
\[ \tag{1.2}g'_1,g'_2,…,g'_L,g_{L+2},…,g'_{2L},\ where\ g'_i=g'^{\gamma^i} \]
\[ \tag{1.3}z=(e(g,g'))^{\gamma^{L+1}} \]
设置值 \(V\leftarrow \emptyset\) ,聚合器 \(acc\leftarrow 1\) ;
进而得出聚合器的公钥 \(P_a=(z)\) ,私钥 \((\gamma)\) ;
之后Issuer把 \((P_a,V)\) 公布到区块链上供其他人进行累积、验证, 聚合器的DID设置为 \(ID_a=z\) 。
2. Credential发行
2.1 Holder获取凭证模板,进行验证模板是Issuer发的
Holder拿到模板以及Issuer的公钥、证明 \((c,\widehat{x_Z},\{\widehat{x_{R_i}}\}_{1\le i\le l})\) ,进行进一步计算: \[ \widehat Z\leftarrow Z^{-c}S^{\widehat{x_Z}}\ (mod\ n)\\ \{\widehat{R_i}\leftarrow R_i^{-c}S^{\widehat{x_{R_i}}}\ (mod\ n)\}_{1\le i\le l} \] 验证: \[ c=H_1(Z||\hat Z||\{R_i,\widehat{R_i}\}_{1\le i\le l}) \]
2.2 Holder进行凭证设定
Holder从区块链中获取了凭证的模板 \(\mathcal S\) ,并设置属性 \(\{m_i\}_{i\in A_h}\) ,其余未设置的属性皆为0;
Holder建立与Issuer的连接,从Issuer那获取随机数 \(n_0\) ,Holder的DID为 \(\mathcal{H}\) ;
(2.2.1)Holder做以下计算,为Primary Credential的数据做准备:
生成 2128-bit随机数 \(v'\) ,673-bit随机数 \(\widetilde{v'}\)
生成593-bit随机数 \(\{\widetilde{m_i}\}_{i\in A_h}\)
使用Primary Credential的公钥 \(P_k\) 计算Primary Credential的盲化secret: \[ \tag{2.1}U\leftarrow (S^{v'})\prod_{i\in A_h}R_i^{m_i} \]
计算commitment Attribute属性值 \(vca\) ,其中 \(blind\) 是盲化因子: \[ \tag{2.2} \{vca_i\}_{i\in A_{commit}}=\{S^{blind}\cdot Z^{m_i}\}_{i\in A_{commit}}\\ \widetilde{r_i}=rand(593bit)_{i\in A_{commit}} \]
\[ \tag{2.3}\{\widetilde{commitment_i}=Z^{\widetilde{m_i}}\cdot S^{\widetilde{r_i}}\}_{i\in A_{commit}} \]
- 另外计算盲化正确proof:
\[ \tag{2.4}\widetilde{U}\leftarrow (S^{\widetilde v'})\prod_{i\in A_h}R_i^{\widetilde m_i} \]
\[ \tag{2.5}c\leftarrow H(\{\widetilde{commitment_i}\}||\{vca_i\}||U||\widetilde U||n_0)_{i\in A_{commit}} \]
\[ \tag{2.6}\widehat{v'}\leftarrow \widetilde{v'} + cv' \]
\[ \tag{2.7.1}\{\widehat{m_i}\leftarrow \widetilde{m_i} +cm_i\}_{i\in A_h} \]
\[ \tag{2.7.2} \{\widehat{r_i}\leftarrow \widetilde{r_i}+c\cdot blind\}_{i\in A_{commit}} \]
生成80-bit随机数 \(n_1\)
将 \(\{U,c,\widehat{v'},\{\widehat{m_i}\}_{i\in A_h},n_1,attr\_name\subset\{A_h\},\{A_{commit}\}=\{attr\_name,vca\}\}\) 打包发送给Issuer
(2.2.2)Holder做以下计算,为Non-Credential的数据做准备:
获取撤销公钥 \(P_R\) ,并生成随机数 \(s'_R \in \Bbb{Z}_q\) ;
计算 \[ \tag{2.8}U_R\leftarrow h_2^{s'_R},\ where\ h_2\ in\ P_R \]
将 \(U_R\) 发送给Issuer
2.3 Issuer收到凭证模板,确认后颁发
(2.3.1)Issuer验证Holder发来的Primary Credential模板数据是否正确:
- 计算\(\widehat{U}\leftarrow (U^{-c})\prod_{i\in A_h}R_i^{\widehat m_i}(S^{\widehat{v'}})\) ;
- \(\{\widehat{commitment_i}\leftarrow vca_i^{-c}\cdot Z^{\widehat{m_i}}S^{\widehat{r_i}}\}_{i\in A_{commit}}\)
- 验证\(c= H(\{\widehat{commitment_i}\}||\{vca_i\}||U||\widehat U||n_0)_{i\in A_{commit}}\) ;
验证 \(\widehat{v'}\) 是一个673-bit的数,\(\{\widehat{m_i},\widehat{r_i}\}_{i\in A_h}\) 是594-bit的数;
(2.3.2)Issuer准备为Holder发行Primary凭证:
- 为当前Holder赋值一个唯一值 \(i<L\) 作为标识, 计算 \(m_2\leftarrow H(i||\mathcal{H})\) 记录了当前Holder 的信息,并将 \(m_2\) 和\(i\)保存在本地数据库;
- 设置可被披露的属性值 \(A_k\) ;
- 生成2724-bit 随机数 \(v''\), 随机素数 \(e,\ where\ 2^{596}\leqslant e \leqslant 2^{596}+2^{119}\) ;
- 随机生成 \(r<p'q'\) ,其中 \(p',q'\) 从Primary凭证私钥中得出 ;
- 计算签名:
\[ \tag{2.9}Q\leftarrow \cfrac{Z}{US^{v''}\prod_{i\in A_k}R_i^{m_i}(mod\ n)}\\ \]
\[ \tag{2.10}A\leftarrow Q^{e^{-1}(mod\ p'q')}(mod\ n) \]
- 计算签名Proof: \[ \tag{2.11}\widehat A\leftarrow Q^r\ (mod\ n) \] \[ \tag{2.12}c' \leftarrow H(Q||A||\widehat A||n_1) \] \[ \tag{2.13}s_e\leftarrow r-c'e^{-1}\ (mod\ p'q') \]
(2.3.3)Issuer 将primary pre-credential \((\{m_i\}_{i\in A_k},A,e,v'',s_e,c')\) 发送给Holder;
(2.3.4)Issuer 非撤销凭证(Non-revocation Credential)的颁发
生成随机数 \(s'',c\leftarrow Z_q\) ;
将Primary凭证中的 \(m_2\) 也加入到非撤销凭证中,进行两个凭证的关联;
\(acc_V\)是聚合器值,为证书分配一个未使用的索引index \(i\) ,\(V\) 是现在未被撤销的集合;
计算(其中L为最多颁发的证书个数,在代码中表示为n): \[ \tag{2.14} \sigma \leftarrow (h_0h_1^{m_2}\cdot U_R\cdot g_i\cdot h_2^{s''})^{\cfrac{1}{x+c}} \] \[ \tag{2.15}w\leftarrow \prod_{j\in V}g'_{L+1-j+i} \] \[ \tag{2.16} \sigma_i \leftarrow g'^{1/(sk+\gamma^i)} \] \[ \tag{2.17} u_i \leftarrow u^{\gamma_i} \] \[ \tag{2.18} acc_V\leftarrow acc_V\cdot g'_{L+1-i} \] \[ \tag{2.19} V\leftarrow V\cup\{i\} \] \[ \tag{2.20} wit_i\leftarrow \{\sigma_i,u_i,g_i,w,V\} \]
将非撤销凭证 \((I_A,\sigma,c,s'',wit_i,g_i,g'_i,i)\) 发给Holder;
将更新的 \(V,acc_V\) 放到区块链中;
2.4 Holder收到两个凭证,进行存储
(2.4.1)Holder存储凭证
计算 \(v\leftarrow v'+v''\);
验证 \(e\) 是素数,且符合 \(2^{596}\leqslant e \leqslant 2^{596}+2^{119}\) ;
- 计算: \[ \tag{2.21}Q\leftarrow \cfrac{Z}{S^v \prod_{i\in C_S}R_i^{m_i}}\ (mod\ n) \]
(2.4.2)验证 \(Q=A^e(mod\ n)\);
(2.4.3)计算: \[ \tag{2.22}\widehat A \leftarrow A^{c'+s_e\cdot e} \]
- 验证 \(c'=H(Q||A||\widehat A||n_1)\) ;
存储Primary凭证\(C_p=(\{m_i\}_{i\in C_s},A,e,v)\) ;
计算 \(s\leftarrow s'_R+s''\), 存储非撤销凭证 \(C_{NR}\leftarrow(I_A,\sigma,c,s,wit_i,g_i,g'_i,i)\) ;
(2.4.4)三个等式证明Holder收到的Non-revocation 凭证的正确性 \[ \cfrac{e(g_i,acc_V)}{e(g,w)}=z\\ e(pk\cdot g_i,\sigma_i)=e(g,g')\\ e(\sigma,y\cdot \widehat h^{c})=e(h_0\cdot h_1^{m_2}h_2^sg_i,\widehat h) \]
3. 凭证撤销
(3.1)Issuer在数据库找到要被撤销的凭证,并找出他的索引号 \(i\) ,以及聚合器 \(A\),有效凭证集合 \(V\)
- 从 \(V\) 中剔除 \(i\) : \(V \leftarrow V -\{i\}\) ;
- 从聚合器中剔除:\(acc_V\leftarrow acc_V/g'_{L+1-i}\) ;
- 公布出新的 \(\{V,acc_V\}\) ;
4. Holder展示凭证
4.1 Verifier向Holder发出Proof Request
- Verifier向Holder发出 \(d\) 个凭证模板集合 \(\{\mathcal S_1,\mathcal S_2,...\mathcal S_d\}\) 的证明请求(Proof Request);
- Holder 需要对应的给出 \(d\) 个凭证证明对 \((C_p,C_{NR})\) 回应;
- 假设模板集合有 \(X\) 个属性,其中,公开属性集合 \(x_1:A_h=X-x_1\) ,需证明相等的属性 \(x_2: m_i=m_j\) ,需证明不相等属性 \(x_3:m_i(><\geq \leq) z\) ;
- \(x_4=X-x_1-x_2\) ,映射 \(\phi:A_h\ to\ \{1,2,...,x_4\}\),\(A_v\) 表示 \(x_1\) 披露的属性索引集合;
- Verifier给Holder发80-bit随机数 \(n_2\) ,用于之后与Holder交互;
4.2 Holder提供证明
(4.2.1)Holder准备对应凭证对 \((C_p,C_{NR})\) 去验证;
- 生成 \(x_4\) 个592-bit随机数 \(\widetilde{y_1},\widetilde{y_2},...,\widetilde{y_{x_4}}\) ,并设定 \(\widetilde{m_j}\leftarrow \widetilde{y_{\phi(j)}} , where\ j\in A_h\) ;
- 生成两个空集合 \(\mathcal T,\mathcal C\) ;
- 对所有凭证对 \((C_p,C_{NR})\) 都准备证明;
(4.2.2)Holder给出非撤销证明:
加载Issuer的撤销公钥 \(p=(h,h_1,h_2,\widetilde h,\widehat h,u,pk,y)\) ;
加载非撤销凭证 \(C_{NR}=(I_A,\sigma,c,s,wit_i,g_i,g'_i,i)\) ;
获取现在的未撤销凭证索引集合 \(V\) ,聚合器 \(acc\) ;
更新非撤销凭证 \(C_{NR}\) : \[ \tag{4.1}w\leftarrow w\cdot \cfrac{\prod_{j\in (V\backslash V_{old})}g'_{L+1-j+i}}{\prod_{j\in (V_{old}\backslash V)}g'_{L+1-j+i}};\ where\ V_{old}\ is\ from\ wit_i;\\ V_{old}\leftarrow V; \]
随机取随机数: \(\rho,r,r',r'',r''',o,o'\ mod\ q\) ;
计算以下公式,并将最终所得放到集合 \(\mathcal C\) :
\[ \tag{4.2} E\leftarrow h^{\rho}\widetilde h^o; \] \[ \tag{4.3} D\leftarrow g^{r}\widetilde h^{o'}; \] \[ \tag{4.4} A\leftarrow \sigma \widetilde h^{\rho}; \] \[ \tag{4.5} \mathcal G \leftarrow g_i\widetilde h^r; \] \[ \tag{4.6} \mathcal W \leftarrow w\widehat h^{r'}; \] \[ \tag{4.7} \mathcal S \leftarrow \sigma_i \widehat h^{r''}; \] \[ \tag{4.8} \mathcal U \leftarrow u_i\widehat h^{r'''}; \] > E、D分别是对\(\rho\) 和 \(r\) 的承诺
\(\mathcal G\), \(\mathcal W\), \(\mathcal S\), \(\mathcal U\) 分别是对\(g_i\), \(w\), \(\sigma_i\), \(u_i\)的盲化
\(NonRevocProofCList \leftarrow \{ E, D, A, \mathcal G, \mathcal W, \mathcal S, \mathcal U \}\), 作为c_list
以上过程由ProofBuilder::_create_c_list_values() 完成
计算: \[ \tag{4.9} m\leftarrow \rho \cdot c; \] \[ \tag{4.10} t\leftarrow o\cdot c; \] \[ \tag{4.11} m'\leftarrow r\cdot r''; \] \[ \tag{4.12} t'\leftarrow o'\cdot r''; \]
随机取随机数:\(\widetilde{\rho},\widetilde{o},\widetilde{o'},\widetilde{c},\widetilde{m},\widetilde{m'},\widetilde{t},\widetilde{t'},\widetilde{m_2},\widetilde{s},\widetilde{r},\widetilde{r'},\widetilde{r''},\widetilde{r'''},mod\ q\) ;
计算以下公式,并将最终所得放到集合 \(\mathcal T\) : \[ \tag{4.13} \overline{T_1}\leftarrow h^{\widetilde{\rho}}\widetilde h^{\widetilde o};\ \overline{T_2} \leftarrow E^{\widetilde c}h^{-\widetilde m}\widetilde h^{-\widetilde t} \]
\[ \tag{4.14} \overline{T_3} \leftarrow e(acc_V,\widehat h)^{\widetilde c}\cdot e(\widetilde h,\widehat h)^{\widetilde r}\cdot e(\widetilde h,y)^{-\widetilde{\rho}}\cdot e(\widetilde h,\widehat h)^{-\widetilde m}\cdot e(h_1,\widehat h)^{-\widetilde{m_2}}\cdot e(h_2,\widehat h)^{-\widetilde s}; \]
\[ \tag{4.15} \overline{T_4}\leftarrow e(\widetilde h,acc_V)^{\widetilde r}\cdot e(1/g,\widehat h)^{\widetilde {r'}};\ \overline{T_5} \leftarrow g^{\widetilde r} \widetilde h^{\widetilde{o'}}; \]
\[ \tag{4.16} \overline{T_6}\leftarrow D^{\widetilde{r''}}g^{-\widetilde{m'}}\widetilde h^{-\widetilde{t'}};\ \overline{T_7}\leftarrow e(pk\cdot \mathcal G,\widehat h)^{\widetilde{r''}}\cdot e(\widetilde h,\widehat h)^{-\widetilde{m'}}\cdot e(\widetilde h,\mathcal S)^{\widetilde r}; \]
\[ \tag{4.17} \overline{T_8}\leftarrow e(\widetilde h,u)^{\widetilde r}\cdot e(1/g,\widehat h)^{\widetilde{r'''}}; \]
(4.2.3)Holder 给出Primary凭证有效证明:
对于每一个凭证 \(C_p=(\{m_j\},A,e,v)\) 以及Issuer的公钥 \(pk_I\leftarrow (n,S,Z,{R_i}_{1\leq i\leq l})\) :
随机选取2128-bit随机数 \(r\) ;
计算:
\[ \tag{4.18}A'\leftarrow AS^r\ (mod\ n);v'\leftarrow v-e\cdot r; \] 并将 \(A'\) 放入集合 \(\mathcal C\) ;
计算:\(e'\leftarrow e-2^{596}\) ;
随机取456-bit随机数 \(\widetilde e\) ,3060-bit随机数 \(\widetilde v\) ;
计算以下公式,并将结果放入集合 \(\mathcal T\) ; \[ \tag{4.19}T\leftarrow (A')^{\widetilde e}\Big(\prod_{j\in \mathcal A_{\overline r}}R_j^{\widetilde{m_j}}\Big)(S^{\widetilde v})\ (mod\ n) \]
对于每一个断言 \(p\) ,其操作符 \(*\) 都是 \(>,\geq, <,\leq\) 其中之一
计算 \(\Delta\) : \[ \tag{4.20}\Delta \leftarrow \begin{cases} z_j-m_j; &\text{if } * \equiv\ \leq\\ z_j-m_j-1; &\text{if } * \equiv\ <\\ m_j-z_j; &\text{if } * \equiv\ \geq\\ m_j-z_j-1; &\text{if } * \equiv\ > \end{cases} \]
计算 \(a\) :
\[ \tag{4.21} a\leftarrow \begin{cases} -1 &\text{if } * \equiv\ \leq\ or\ <\\ 1 &\text{if } * \equiv\ \geq\ or\ > \end{cases} \]
寻找四个值\(u_1,u_2,u_3,u_4\)符合以下等式: \[ \tag{4.22}\Delta =(u_1)^2+(u_2)^2+(u_3)^2+(u_4)^2 \]
- 随机取2128-bit随机数 \(r_1,r_2,r_3,r_4,r_{\Delta}\) ;
计算以下公式,并将结果按顺序放入集合 \(\mathcal C\) :
\[ \tag{4.23}\{T_i\leftarrow Z^{u_i}S^{r_i}\ (mod\ n)\}_{1\le i\le 4}; \] \[ \tag{4.24}T_\Delta \leftarrow Z^\Delta S^{r_\Delta}\ (mod\ n); \]
随机取592-bit数 \(\widetilde{u_i}, 1\le i \le 4\) ;
随机取672-bit数 \(\widetilde{r_i}, 1\le i \le 4, \widetilde{r_\Delta}\) ;
随机取2787-bit随机数 \(\widetilde{\alpha}\) ;
计算以下公式,并将值按顺序放入集合 \(\mathcal T\) :
\[ \tag{4.25}\{\overline{T_i}\leftarrow Z^{\widetilde{u_i}}S^{\widetilde{r_i}}\ (mod\ n)\}_{1\le i\le 4} ; \] \[ \tag{4.26}\overline{T_\Delta}\leftarrow Z^{\widetilde{m_j}}S^{a\widetilde{r_\Delta}}\ (mod\ n); \] \[ \tag{4.27}Q\leftarrow (S^{\widetilde{\alpha}}\prod_{i=1}^4 T_i^{\widetilde{u_i}}\ (mod\ n)); \]
4.2.1 Holder计算哈希,向Verifier提出挑战
计算:\(c_H\leftarrow H(\mathcal T,\mathcal C,n_2)\) ,并将其发给Verifier;
4.2.2 最终披露
Holder进行最终的披露:
- (4.2.2.1)对于Non-Revcation Credential:对参数 \(\rho, o,c,o',m,m',t,t',m_2,s,r,r',r'',r'''\) 都进行盲化处理,处理方法类似于下面的公式: \[ \tag{4.28}\widehat \rho \leftarrow \widetilde{\rho} -c_H\rho\ (mod\ q) \]
最终得出\(\widehat\rho,\widehat o,\widehat c,\widehat{o'},\widehat m,\widehat{m'},\widehat t,\widehat {t'},\widehat{m_2},\widehat s,\widehat r,\widehat {r'},\widehat{r''},\widehat{r'''}\) 并将结果放入集合 \(\mathcal X\) ;
(4.2.2.2)对于Primary 凭证 \(C_p=(\{m_j\},A,e,v)\) 计算: \[ \tag{4.29}\widehat e\leftarrow \widetilde e+c_He'; \] \[ \tag{4.30}\widehat v\leftarrow \widetilde v+c_Hv'; \] \[ \tag{4.31}\{\widehat m_j\leftarrow \widetilde{m_j}+c_Hm_j\}_{j\in \mathcal A_{\overline r}} \] 最终得出 \(Pr_C=(\widehat e,\widehat v,\{\widehat{m_j}\}_{j\in \mathcal A_{\overline r}},A')\) 是凭证 \(C_p\) 的子证明;
(4.2.2.3)对每一个断言 \(p\) ,计算: \[ \tag{4.32}\{\widehat{u_i}\leftarrow \widetilde{u_i}+c_Hu_i\}_{1\le i\le 4}; \] \[ \tag{4.33}\{\widehat{r_i}\leftarrow \widetilde{r_i}+c_Hr_i\}_{1\le i\le 4}; \] \[ \tag{4.34}\widehat{r_\Delta}\leftarrow \widetilde{r_\Delta}+c_Hr_\Delta; \] \[ \tag{4.35}\widehat\alpha\leftarrow \widetilde\alpha +c_H(r_\Delta-u_1r_1-u_2r_2-u_3r_3-u_4r_4); \] 最终得出 \(Pr_p=(\{\widehat{u_i}\},\{\widehat{r_i}\},\widehat{r_\Delta},\widehat{\alpha},\widehat{m_j})\) 是断言 \(p\) 的子证明;
4.2.3 Holder发送信息给Verifier
Holder发送 \((c_H,\mathcal X,\{Pr_c\},\{Pr_p\},\mathcal C)\) 给verifier。
4.3 Verifier验证
对于凭证对 \((C_p,C_{NR})\) ,Verifier收到证明相关参数 \((c_H,\mathcal X,\{Pr_c\},\{Pr_p\},\mathcal C)\)
4.3.1 非撤销检查
Verifier计算以下公式,并将结果放入集合 \(\widehat T\) :
\[ \tag{4.36} \widehat{T_1}\leftarrow E^{c_H}\cdot h^{\widehat{\rho}}\widetilde h^{\widehat o};\ \widehat{T_2} \leftarrow E^{\widehat c}h^{-\widehat m}\widetilde h^{-\widehat t} \]
\[ \tag{4.37} \widehat{T_3} \leftarrow \Big(\cfrac{e(h_o\mathcal G,\widehat h)}{e(A,y)} \Big)^{c_H}\cdot e(acc_V,\widehat h)^{\widehat c}\cdot e(\widetilde h,\widehat h)^{\widehat r}\cdot e(\widetilde h,y)^{-\widehat{\rho}}\cdot e(\widetilde h,\widehat h)^{-\widehat m}\cdot e(h_1,\widehat h)^{-\widehat{m_2}}\cdot e(h_2,\widehat h)^{-\widehat s}; \]
\[ \tag{4.38} \widehat{T_4}\leftarrow \Big(\cfrac{e(\mathcal G,acc_V)}{e(g,\mathcal W)z} \Big)^{c_H}\cdot e(\widetilde h,acc_V)^{\widehat r}\cdot e(1/g,\widehat h)^{\widehat {r'}};\ \widehat{T_5} \leftarrow D^{c_H}\cdot g^{\widetilde r} \widetilde h^{\widetilde{o'}}; \]
\[ \tag{4.39} \widehat{T_6}\leftarrow D^{\widehat{r''}}g^{-\widehat{m'}}\widetilde h^{-\widehat{t'}};\ \widehat{T_7}\leftarrow \Big(\cfrac{e(pk\cdot \mathcal G,\mathcal S)}{e(g,g')} \Big)^{c_H}\cdot e(pk\cdot \mathcal G,\widehat h)^{\widehat{r''}}\cdot e(\widetilde h,\widehat h)^{-\widehat{m'}}\cdot e(\widetilde h,\mathcal S)^{\widehat r}; \]
\[ \tag{4.40} \widehat{T_8}\leftarrow \Big(\cfrac{e(\mathcal G,u)}{e(g,\mathcal U)} \Big)^{c_H}\cdot e(\widetilde h,u)^{\widehat r}\cdot e(1/g,\widehat h)^{\widehat{r'''}}; \]
4.3.2 验证正确性
Verifier获取Issuer的公钥 \(pk_I\leftarrow (n,S,Z,{R_i}_{1\leq i\leq l})\) 、Primary凭证的证明 \(Pr_C=(\widehat e,\widehat v,\{\widehat{m_j}\}_{j\in \mathcal A_{\overline r}},A')\) ,并使用已披露属性 \(\{m_j\}_{j\in \mathcal A_r}\) ,定义空集合 \(\widehat{\mathcal T}\) ;
(4.3.2.1)对于每个凭证 \(C_p\) 都使用其对应的子证明 \(Pr_C\) 进行计算,并将其结果放入集合 \(\widehat{\mathcal T}\) : \[ \tag{4.41}\widehat T\leftarrow \Bigg(\cfrac{Z}{\big(\prod_{j\in \mathcal A_r}R_j^{m_j}\big)(A')^{2^{596}}} \Bigg)^{-c_H}(A')^{\widehat e}\Bigg(\prod_{j\in (\mathcal A_{\widetilde r})}R_j^{\widehat{m_j}} \Bigg)(S^{\widehat v})\ (mod\ n) \]
(4.3.2.2)对每个断言 \(p\) 进行计算:
- 得出\(\Delta'\) :
\[ \tag{4.42}\Delta' \leftarrow \begin{cases} z_j; &\text{if } * \equiv\ \leq\\ z_j-1; &\text{if } * \equiv\ <\\ z_j; &\text{if } * \equiv\ \geq\\ z_j+1; &\text{if } * \equiv\ > \end{cases} \]
- 得出\(a\) :
\[ \tag{4.43} a\leftarrow \begin{cases} -1 &\text{if } * \equiv\ \leq\ or\ <\\ 1 &\text{if } * \equiv\ \geq\ or\ > \end{cases} \]
- 使用断言子证明 \(Pr_p=(\{\widehat{u_i}\},\{\widehat{r_i}\},\widehat{r_\Delta},\widehat{\alpha},\widehat{m_j})\) 以及集合 \(\mathcal C\) ,进行计算: \[ \tag{4.44}\{\widehat{T_i}\leftarrow T_i^{-c_H}Z^{\widehat{u_i}}S^{\widehat{r_i}}\ (mod\ n)\}_{1 \le i\le 4}; \] \[ \tag{4.45} \widehat{T_\Delta}\leftarrow (T_{\Delta}^aZ^{\Delta'})^{-c_H}Z^{\widehat{m_j}}S^{a\widehat{r_\Delta}}\ (mod\ n); \] \[ \tag{4.46} \widehat{Q}\leftarrow (T_\Delta^{-c_H})\prod_{i=1}^4 T_i^{\widehat{u_i}}(S^{\widehat \alpha})\ (mod\ n); \] 最终将 \(\widehat{T_1},\widehat{T_2},\widehat{T_3},\widehat{T_4},\widehat{T_{\Delta}},\widehat Q\) 加入到集合 \(\widehat{\mathcal T}\) ;
4.3.3 最终的哈希比较
Verifier计算 \(\widehat{c_H}\leftarrow H(\widehat{\mathcal T},\mathcal C,n_2)\) ;如果 \(c_H=\widehat{c_H}\) 则验证成功,否则失败;
5. 证明
欲证明 \(c_H=\widehat{c_H}\) 成立,即证明 \(H(\mathcal T,\mathcal C,n_2)=H(\widehat{\mathcal T},\mathcal C,n_2)\) 成立,即证明 \(\mathcal T=\widehat{\mathcal T}\) ;
在 \(\mathcal T\) 中,集合为: \(\{T,\{\overline {T_i}\}_{1\le i\le 4},\overline{T_{\Delta}},Q \}\) ;
在 \(\widehat{\mathcal T}\) 中,集合为: \(\{\widehat T,\{\widehat{T_i}\}_{1\le i\le 4},\widehat{T_\Delta},\widehat Q\}\) ;
5.1 证明 \(T=\widehat T\)
\(\{\widehat{T_i}= T_i^{-c_H}Z^{\widehat{u_i}}S^{\widehat{r_i}}\ (mod\ n)\}_{1 \le i\le 4};\)
Prover计算:
\(\overline{T_1}= Z^{\widetilde{u_1}}S^{\widetilde{r_1}}\ (mod\ n)\}\)
Verifier计算:
\(\widehat{T_1}= T_1^{-c_H}Z^{\widehat{u_1}}S^{\widehat{r_1}}\ (mod\ n)\)
验证过程:
\(T_1= Z^{u_1}S^{r_1}\ (mod\ n)\)
\(u_1,r_1\)为随机数
\(c=H(U||\widetilde U||n_0)\)
验证 \[ T\leftarrow (A')^{\widetilde e}\Big(\prod_{j\in \mathcal A_{\overline r}}R_j^{\widetilde{m_j}}\Big)(S^{\widetilde v})\ (mod\ n) \] 和 \[ \widehat T\leftarrow \Bigg(\cfrac{Z}{\big(\prod_{j\in \mathcal A_r}R_j^{m_j}\big)(A')^{2^{596}}} \Bigg)^{-c_H}(A')^{\widehat e}\Bigg(\prod_{j\in (\mathcal A_{\widetilde r})}R_j^{\widehat{m_j}} \Bigg)(S^{\widehat v})\ (mod\ n) \] \(\widetilde e\)为 456bit随机数
\(\widetilde v\)为 3060bit随机数
随机取随机数: \(\rho,\rho',r,r',r'',r''',o,o'\ mod\ q\) ;
\(\widetilde{\rho},\widetilde{o},\widetilde{o'},\widetilde{c},\widetilde{m},\widetilde{m'},\widetilde{t},\widetilde{t'},\widetilde{m_2},\widetilde{s},\widetilde{r},\widetilde{r'},\widetilde{r''},\widetilde{r'''},mod\ q\)为随机数
随机素数\(e,\ where\ 2^{596}\leqslant e \leqslant 2^{596}+2^{119}\)
\(e' \gets e-2^{596}\)
\(\widehat e\leftarrow \widetilde e+c_He'\)
\(v_1,v_2\)为2128,673bit随机数
\(v=v_1+v_2\)
\(v'\gets v-e\cdot r\)
\(\widehat v\leftarrow \widetilde v+c_Hv'\)
\(\widehat{m_j} \leftarrow \widetilde{m_j} +c_Hm_j\ (mod\ q)\) \[ T\leftarrow (A')^{\widetilde e}\Big(\prod_{j\in \mathcal A_{\overline r}}R_j^{\widetilde{m_j}}\Big)(S^{\widetilde v})\ (mod\ n) \]
\[ \Bigg(\cfrac{Z}{\big(\prod_{j\in \mathcal A_r}R_j^{m_j}\big)(A')^{2^{596}}} \Bigg)^{-c_H}(A')^{\widehat e}\Bigg(\prod_{j\in (\mathcal A_{\widetilde r})}R_j^{\widehat{m_j}} \Bigg)(S^{\widehat v})\\ = \Bigg(\cfrac{Z}{\big(\prod_{j\in \mathcal A_r}R_j^{m_j}\big)(A')^{2^{596}}} \Bigg)^{-c_H}(A')^{ \widetilde e+c_He'}\Bigg(\prod_{j\in (\mathcal A_{\widetilde r})}R_j^{\widetilde{m_j} +c_Hm_j} \Bigg)(S^{\widetilde v+c_Hv'}) \]
除以\(T\), 得到 \[ \Bigg(\cfrac{Z}{\big(\prod_{j\in \mathcal A_r}R_j^{m_j}\big)(A')^{2^{596}}} \Bigg)^{-c_H}(A')^{c_He'}\Bigg(\prod_{j\in (\mathcal A_{\widetilde r})}R_j^{c_H{m_j}} \Bigg)(S^{c_Hv'})\\ \]
提取A \[ \Bigg(\cfrac{Z}{\big(\prod_{j\in \mathcal A_r}R_j^{m_j}\big)(A')^{2^{596}}} \Bigg)^{-c_H}(A')^{c_He'}\Bigg(\prod_{j\in (\mathcal A_{\widetilde r})}R_j^{c_H{m_j}} \Bigg)(S^{c_Hv'})\\ =\Bigg(\cfrac{Z}{\big(\prod_{j\in \mathcal A_r}R_j^{m_j}} \Bigg)^{-c_H}(A')^{c_H(e'+2^{596})}\Bigg(\prod_{j\in (\mathcal A_{\widetilde r})}R_j^{c_H{m_j}} \Bigg)(S^{c_Hv'})\\ =\Bigg(\cfrac{Z}{\big(\prod_{j\in \mathcal A_r}R_j^{m_j}} \Bigg)^{-c_H}(A')^{c_He}\Bigg(\prod_{j\in (\mathcal A_{\widetilde r})}R_j^{c_H{m_j}} \Bigg)(S^{c_Hv'}) \] 提取\(\prod\) \[ Z^{-c_H}(A')^{c_He}(S^{c_Hv'})\Bigg(\prod_{j\in (\mathcal A_{r})}R_j^{c_H{m_j}}\Bigg)\Bigg(\prod_{j\in (\mathcal A_{\widetilde r})}R_j^{c_Hm_j}\Bigg) \] \[ = Z^{-c_H}(A')^{c_He}(S^{c_Hv'})\Bigg(\prod_{j\in \mathcal A}R_j^{c_H{m_j}}\Bigg) \] \[ =Z^{-c_H}(A')^{c_He}(S^{c_Hv'})\Bigg(\prod_{j\in \mathcal A}R_j^{c_H{m_j}}\Bigg) \] \(Z=S^{x_Z}\)
\(A'=AS^r\)
\(A_c+A_k=A\)
\(A_r+A_\widetilde {r} =A\)
\(A\)表示所有属性
\(Q\leftarrow \cfrac{Z}{US^{v_2}\prod_{i\in A_k}R_i^{m_i}(mod\ n)}\\\)
\(U=(S^{v_1})\prod_{i\in A_c}R_i^{m_i}\)
\(A\leftarrow Q^{e^{-1} (mod\ p'q')}(mod\ n)\)
\[ Z^{-c_H}(A')^{c_He}(S^{c_Hv'})\\ =Z^{-c_H}S^{rc_He}(\cfrac{Z}{US^{v_2}\prod_{i\in A_k}R_i^{m_i}(mod\ n)})^{c_He\cdot e^{-1}}(S^{c_Hv'})\\ =S^{rc_He+c_Hv'}((S^{v_1+v_2})\prod_{i\in A_c}R_i^{m_i}\prod_{i\in A_k}R_i^{m_i}(mod\ n))^{-c_H}\\ =S^{rc_He+c_H(v-er)-c_Hv}\prod_{i\in A_c}R_i^{m_i}\prod_{i\in A_k}R_i^{m_i}(mod\ n))^{-c_H}\\ = (\prod_{i\in A_c}R_i^{m_i}\prod_{i\in A_k}R_i^{m_i}(mod\ n)))^{-c_H}\\ = \Bigg(\prod_{j\in \mathcal A}R_j^{-c_H{m_j}}\Bigg) \] 连乘公式左右为披露属性和未披露属性:
\(R_i= S^{x_{R_i}}\)
即: \[ \Bigg(\prod_{j\in \mathcal A}R_j^{-c_H{m_j}}\Bigg)\cdot \Bigg(\prod_{j\in \mathcal A}R_j^{c_H{m_j}}\Bigg) =1 \]
证毕。
5.2 证明 \(\overline{T_\Delta}=\widehat{T_\Delta}\)
\[ \overline{T_\Delta}\leftarrow Z^{\widetilde{m_j}}S^{a\widetilde{r_\Delta}}\ (mod\ n);\\ \widehat{T_\Delta}\leftarrow (T_{\Delta}^aZ^{\Delta'})^{-c_H}Z^{\widehat{m_j}}S^{a\widehat{r_\Delta}}\ (mod\ n); \]
其中: \[ T_\Delta=Z^{\Delta}S^{r_\Delta}\\ \widehat{m_j}=\widetilde{m_j}+c_Hm_j\\ \widehat{r_\Delta}\leftarrow \widetilde{r_\Delta}+c_Hr_\Delta;\\ \] 所以有: \[ \Large\begin{aligned} \widehat{T_\Delta}&=(Z^{\Delta a} S^{ar_\Delta}\cdot Z^{\Delta '})^{-c_H}\cdot Z^{\widetilde{m_j}+c_H m_j}\cdot S^{a(\widetilde{r_\Delta}+c_H r_\Delta)}\\ &=Z^{-\Delta a c_H} S^{-c_Har_\Delta}\cdot Z^{-c_H\Delta '}\cdot Z^{\widetilde{m_j}+c_H m_j}\cdot S^{a\widetilde{r_\Delta}+ac_H r_\Delta}\\ &=Z^{\widetilde{m_j}}Z^{c_H(m_j-a\Delta-\Delta')}\cdot S^{a\widetilde {r_\Delta}} \end{aligned} \] 再根据: \[ \Delta \leftarrow \begin{cases} z_j-m_j; &\text{if } * \equiv\ \leq\\ z_j-m_j-1; &\text{if } * \equiv\ <\\ m_j-z_j; &\text{if } * \equiv\ \geq\\ m_j-z_j-1; &\text{if } * \equiv\ > \end{cases}\\ \Delta' \leftarrow \begin{cases} z_j; &\text{if } * \equiv\ \leq\\ z_j-1; &\text{if } * \equiv\ <\\ z_j; &\text{if } * \equiv\ \geq\\ z_j+1; &\text{if } * \equiv\ > \end{cases}\\ a\leftarrow \begin{cases} -1 &\text{if } * \equiv\ \leq\ or\ <\\ 1 &\text{if } * \equiv\ \geq\ or\ > \end{cases} \]
假设这里的原属性值是 20
,待检测基准值 18
,那么 Verifier是检测 \(>\) 关系,检测原属性值是大于基准值的,所以有: \[
\begin{aligned}
\Delta &\leftarrow m_j-z_j-1\\
&\leftarrow 20-18-1\\
&\leftarrow 1\\
a &\leftarrow 1\\
\Delta'&\leftarrow z_j+1\\
&\leftarrow 18+1\\
&\leftarrow 19
\end{aligned}
\] 所以可得: \[
m_j-a\Delta-\Delta'=20-1-19=0
\] 所以上式可得: \[
\begin{aligned}
\widehat{T_\Delta}&=Z^{\widetilde{m_j}}Z^{c_H(m_j-a\Delta-\Delta')}\cdot S^{a\widetilde {r_\Delta}}\\
&=Z^{\widetilde{m_j}}Z^{c_H(0)}\cdot S^{a\widetilde {r_\Delta}}\\
&=Z^{\widetilde{m_j}}S^{a\widetilde{r_\Delta}}\\
&=\overline{T_\Delta}
\end{aligned}
\]
证毕。