Privacy-Preserving Electronic Ticket Scheme with Attribute-Based Credentials
Privacy-Preserving Electronic Ticket Scheme with Attribute-Based Credentials
Boneh-Boyen(BB) Signature
在 2004 年,Boneh-Boyen 提出了一个短签名方案。该方案常用于构造高效的成员证明(setmembership proof)和范围证明(range proof)。本文中,我们使用该签名方案为我们的 ticket policys 生成 tags。
KeyGen. B G ( 1 l ) → ( e , p , G , G τ ) \mathcal{BG}(1^l)\rightarrow (e,p,\mathbb{G},\mathbb{G}_\tau) BG(1l)→(e,p,G,Gτ), g 1 , g 2 g_1,g_2 g1,g2 是 G \mathbb{G} G 的生成元。签名者生成私钥对 ( x , Y ) (x,Y) (x,Y) 其 x ← Z p x\leftarrow Z_p x←Zp 和 Y = g 2 x Y=g_2^x Y=g2x。
Signing. 为了生成消息 m m m 的签名,签名者计算签名 σ = g 1 1 x + m \sigma=g_1^{\frac{1}{x+m}} σ=g1x+m1。
Verifying. 为了验证 σ \sigma σ 是 m m m 的有效签名,验证者检查 e ( σ , Y g 2 m ) = e ( g 1 , g 2 ) e(\sigma,Yg_2^m)=e(g_1,g_2) e(σ,Yg2m)=e(g1,g2)
Signature with Efficient Proof Protocol
我们使用 BBS+ 签名方案向用户和 ticket sellers 发放凭证并为用户生成 tickets。BBS+ 签名方案如下:
KeyGen. B G ( 1 l ) → ( e , p , G , G , G τ ) \mathcal{BG}(1^l)\rightarrow (e,p,\mathbb{G},\mathbb{G},\mathbb{G}_\tau) BG(1l)→(e,p,G,G,Gτ) 和 ( h , g 0 , g 1 , . . . , g n + 1 ) (h,g_0,g_1,...,g_{n+1}) (h,g0,g1,...,gn+1) 是 G \mathbb{G} G 的生成元。签名者生成公私钥对 ( x , Y ) (x,Y) (x,Y) 其中 x ← Z p x\leftarrow Z_p x←Zp 和 Y = h x Y=h^x Y=hx。
Signing. 为了在 ( m 1 , m 2 , . . . , m n ) ∈ Z p n (m_1,m_2,...,m_n) \in Z_p^n (m1,m2,...,mn)∈Zpn,签名者选择 w , s ← Z p w,s\leftarrow Z_p w,s←Zp 并计算 σ = ( g 0 g 1 s g 2 m 1 , . . . , g n + 1 m n ) 1 x + w \sigma=(g_0g_1^sg_2^{m_1},...,g_{n+1}^{m_n})^{\frac{1}{x+w}} σ=(g0g1sg2m1,...,gn+1mn)x+w1。 ( m 1 , m 2 , . . . , m n ) (m_1,m_2,...,m_n) (m1,m2,...,mn) 的签名为 ( w , s , σ ) (w,s,\sigma) (w,s,σ)。
Verifying. 为了验证 ( w , s , σ ) (w,s,\sigma) (w,s,σ) 是一个在 ( m 1 , m 2 , . . . , m n ) (m_1,m_2,...,m_n) (m1,m2,...,mn) 的有效签名,验证者检查 e ( σ , Y h w ) = ? e ( g 0 g 1 s g 2 m 1 , . . . , g n + 1 m n , h ) e(\sigma,Yh^w)\overset{?}{=}e(g_0g_1^sg_2^{m_1},...,g_{n+1}^{m_n},h) e(σ,Yhw)=?e(g0g1sg2m1,...,gn+1mn,h)。
Proof of the Signature. 为了证明
(
w
,
s
,
σ
)
(w,s,\sigma)
(w,s,σ) 是在
(
m
1
,
m
2
,
.
.
.
,
m
n
)
(m_1,m_2,...,m_n)
(m1,m2,...,mn) 上的有效签名,证明者选择
r
1
,
r
2
←
Z
p
r_1,r_2\leftarrow Z_p
r1,r2←Zp,并计算
A
1
=
σ
g
2
r
1
A_1=\sigma g_2^{r_1}
A1=σg2r1 和
A
2
=
g
1
r
1
g
2
r
2
A_2=g_1^{r_1}g_2^{r_2}
A2=g1r1g2r2。令
t
1
=
w
r
1
t_1=wr_1
t1=wr1 和
t
2
=
w
r
2
t_2=wr_2
t2=wr2。
P
o
K
{
(
r
1
,
r
2
,
t
1
,
t
2
,
w
,
s
,
σ
,
m
1
,
.
.
.
,
m
n
)
:
A
2
=
g
1
r
1
g
2
r
2
∧
A
2
w
=
g
1
t
1
g
2
t
2
∧
e
(
A
1
,
Y
)
e
(
g
0
,
h
)
=
e
(
g
1
,
h
)
s
⋅
e
(
A
1
,
Y
)
−
w
⋅
e
(
g
2
,
h
)
r
1
w
⋅
e
(
g
2
,
Y
)
r
1
⋅
∏
i
=
2
n
+
1
e
(
g
i
,
h
)
m
−
1
}
}
PoK\begin{Bmatrix} (r_1,r_2,t_1,t_2,w,s,\sigma,m_1,...,m_n):A_2=g_1^{r_1}g_2^{r_2}\wedge \\A_2^w=g_1^{t_1}g_2^{t_2}\wedge \frac{e(A_1,Y)}{e(g_0,h)}=e(g_1,h)^s\cdot e(A_1,Y)^{-w}\cdot \\ e(g_2,h)^{r_1w}\cdot e(g_2,Y)^{r_1}\cdot \prod_{i=2}^{n+1}e(g_i,h)^{m-1}\} \end{Bmatrix}
PoK⎩
⎨
⎧(r1,r2,t1,t2,w,s,σ,m1,...,mn):A2=g1r1g2r2∧A2w=g1t1g2t2∧e(g0,h)e(A1,Y)=e(g1,h)s⋅e(A1,Y)−w⋅e(g2,h)r1w⋅e(g2,Y)r1⋅∏i=2n+1e(gi,h)m−1}⎭
⎬
⎫
Formal Definitions
我们的方案由四种实体组成,认证中心 CA,用户 U,ticket seller S 和 ticket verifier V。
- CA 认证 U 和 S,并且颁发匿名凭证给 U 和 S。
- S 向 CA 注册,并从 CA 获取到匿名凭证,并根据 ticket policies 向 U 销售门票。
- U 向 CA 注册,并从 CA 获取到匿名凭证,之后从 S 那里购买门票,并向 V 证明拥有门票。
- V 验证门票是由 U 提供,并检测门票是否被双花。
Setup ( 1 l ) → ( M S K , p a r a m s , P ) (1^l)\rightarrow (MSK,params,\mathcal{P}) (1l)→(MSK,params,P). CA 输入一个安全参数 1 l 1^l 1l,并输出主私钥 M S K MSK MSK,公共参数 p a r a m s params params 和一个通用的 ticket polices 集合 P \mathbb{P} P。
Registration. 注册算法由两部分组成:SRegistration 和 URegistration。
- SRegistration ( S ( I D S , S K S , P K S , p a r a m s ) ) ↔ C A ( M S K , P K s , p a r a m s ) ) → ( σ s , ( I D S , P K S ) ) (S(ID_S,SK_S,PK_S,params))\leftrightarrow CA(MSK,PK_s,params))\rightarrow (\sigma_s,(ID_S,PK_S)) (S(IDS,SKS,PKS,params))↔CA(MSK,PKs,params))→(σs,(IDS,PKS))。S 运行密钥生成算法 K G ( 1 l ) → ( S K S , P K S ) \mathcal{KG}(1^l)\rightarrow (SK_S,PK_S) KG(1l)→(SKS,PKS) 生成公私钥对 ( S K S , P K S ) (SK_S,PK_S) (SKS,PKS),输入他的身份 I D S ID_S IDS,他的公私钥对 ( S K S , P K S ) (SK_S,PK_S) (SKS,PKS) 和公共参数 p a r a m s params params,并输出一个凭证 σ s \sigma_s σs。CA 输入主私钥 M S K MSK MSK,S 的公钥 P K S PK_S PKS 和公共参数并输出 ( I D S , P K S ) (ID_S,PK_S) (IDS,PKS)。
- URegistration ( U ( I D U , A U , S K U , P K U , p a r a m s ) ↔ C A ( M S K , A U , P K U , p a r a m s ) ) → ( σ U , ( I D U , P K U ) ) (U(ID_U,A_U,SK_U,PK_U,params) \leftrightarrow CA(MSK,A_U,PK_U,params) )\rightarrow (\sigma_U,(ID_U,PK_U)) (U(IDU,AU,SKU,PKU,params)↔CA(MSK,AU,PKU,params))→(σU,(IDU,PKU))。U 运行密钥生成算法 K G → ( S K U , P K U ) \mathcal{KG}\rightarrow (SK_U,PK_U) KG→(SKU,PKU) 生成公私钥对 ( S K U , P K U ) (SK_U,PK_U) (SKU,PKU),输入他的身份 I D U ID_U IDU,他的属性 A U A_U AU,他的公私钥对 ( S K U , P K U ) (SK_U,PK_U) (SKU,PKU) 和公共参数 p a r a m s params params,输出一个凭证 σ U \sigma_U σU。CA 输入主私钥 M S K MSK MSK,U 的属性 A U A_U AU,U 的公钥 P K U PK_U PKU 和公共参数 p a r a m s params params,输出 ( I D U , P K U ) (ID_U,PK_U) (IDU,PKU)。
Ticket-Issuing ( U ( S K U , P K U , A U , σ U , P s U ) , P , V P , S e r v , p a r a m s ) ↔ S ( S K S , P K S , P S U , P , P r i c e , V P , S e r v , p a r a m s ) ) → ( T i c k e t U , ( P s U , S e r v i c e ) ) (U(SK_U,PK_U,A_U,\sigma_U,P_{s_U}),\mathbb{P},VP,Serv,params)\leftrightarrow S(SK_S,PK_S,P_{S_U},\mathbb{P},Price,VP,Serv,params))\rightarrow (Ticket_U,(Ps_U,Service)) (U(SKU,PKU,AU,σU,PsU),P,VP,Serv,params)↔S(SKS,PKS,PSU,P,Price,VP,Serv,params))→(TicketU,(PsU,Service)) 这是一个在 U 和 S 之间运行的交互式算法。U 输入他的公私钥对 ( S K U , P K U ) (SK_U,PK_U) (SKU,PKU),他的属性 A U A_U AU,他的凭证 σ U \sigma_U σU,一个假名 P s U P_{s_U} PsU,ticket policies P \mathbb{P} P,一个有效的时期 V P VP VP,选择的服务 S e r v Serv Serv 和公共参数 p a r a m s params params,输出 ( P s U , S e r v ) (P_{s_U},Serv) (PsU,Serv)。
Ticket-Validating ( U ( S K , P s U , T i c k e t U , V P , S e r v , p a r a m s ) ↔ V ( V P , S e r v , p a r a m s ) ) → ( 0 / 1 , ( S e r v , T r a n s T ) ) (U(SK,P_{s_U},Ticket_U,VP,Serv,params)\leftrightarrow V(VP,Serv,params))\rightarrow (0/1,(Serv,Trans_T)) (U(SK,PsU,TicketU,VP,Serv,params)↔V(VP,Serv,params))→(0/1,(Serv,TransT))。这是一个在 U 和 V 之间执行的交互式算法。U 输入他的公私钥对 ( S K U , P K U ) (SK_U,PK_U) (SKU,PKU),他的 ticket T i c k e t U Ticket_{U} TicketU,有效的时期 V P VP VP,选择的服务 S e r v Serv Serv 和公共参数 p a r a m s params params,如果 T i c k e t U Ticket_U TicketU 是有效的,输出 1 1 1。验证失败,输出 0 0 0。V 输入有效的时期 V P VP VP,选择的服务 S e r v Serv Serv 和公共参数 p a r a m s params params,输出 ( S e r v , T r a n s T ) (Serv,Trans_T) (Serv,TransT)。
Double-Spend-Detecting ( T r a n s T , p a r a m s ) → ( P K U , ⊥ ) (Trans_T,params)\rightarrow (PK_U,\perp) (TransT,params)→(PKU,⊥)。
Construction Of Our Scheme
在我们的 e-ticket 系统中,票据的类型可能受两种策略的影响:范围和集合。范围策略可能包括的属性有:年龄,旅行次数,薪水。集合策略:可能包含多种属性,职业,残疾,位置等。
Setup. 初始的票务价格策略 P \mathbb{P} P 被设置为 P = { R 1 , . . . , R N 1 , S 1 , . . . , S N 2 } \mathbb{P}=\{\mathbb{R}_1,...,\mathbb{R}_{N_1},\mathbb{S}_1,...,\mathbb{S}_{N_2}\} P={R1,...,RN1,S1,...,SN2} 其中 { R 1 , . . . , R N 1 } \{\mathbb{R}_1,...,\mathbb{R}_{N_1}\} {R1,...,RN1} 是被支持的范围策略和 { S 1 , . . . , S N 2 } \{\mathbb{S}_1,...,\mathbb{S}_{N_2}\} {S1,...,SN2} 是被支持的集合策略。CA 选择私钥 M S K = ( x , y , μ 1 , . . . , μ N 2 ) MSK=(x,y,\mu_1,...,\mu_{N_2}) MSK=(x,y,μ1,...,μN2) ,其中, x x x 是为系统用户生成凭证, y y y 是用来生成标识范围的 tags, μ i ( i = 1 , . . . , N 2 ) \mu_i(i=1,...,N_2) μi(i=1,...,N2) 是标记集合策略的 tags。CA 发布公共参数 p a r a m s params params 包含票据策略 P \mathbb{P} P 以及范围和集合策略 tags。
CA 公布票据价格策略 P = { R 1 , . . . , R N 1 , S 1 , . . . , S N } \mathbb{P}=\{\mathbb{R}_1,...,\mathbb{R}_{N_1},\mathbb{S}_1,...,\mathbb{S}_N\} P={R1,...,RN1,S1,...,SN} 其中 R l = [ c l , d l ] \mathbb{R}_l=[c_l,d_l] Rl=[cl,dl] 是范围策略和 S i = { I i 1 , I i 2 , . . . , I i ς } \mathbb{S}_i=\{I_{i_1},I_{i_2},...,I_{i_\varsigma}\} Si={Ii1,Ii2,...,Iiς} 是一个集合策略(位置,职业,残疾), l = 1 , 2 , . . . , N 1 l=1,2,...,N_1 l=1,2,...,N1 和 i = 1 , 2 , . . . , N 2 i=1,2,...,N_2 i=1,2,...,N2。
CA 运行 B G ( 1 l ) → ( e , p , G , G τ ) \mathcal{BG}(1^l)\rightarrow (e,p,\mathbb{G},\mathbb{G}_\tau) BG(1l)→(e,p,G,Gτ)。假设 { R 1 , . . . , R N 1 } \{\mathbb{R}_1,...,\mathbb{R}_{N_1}\} {R1,...,RN1} 的最大区间长度为 [ 0 , q k ) [0,q^k) [0,qk),其中 q ∈ Z p q\in Z_p q∈Zp 并且 p > 2 q k + 1 p>2q^k+1 p>2qk+1。 令 g , g 0 , g 1 , g 2 , g 3 , g ^ 1 , g ^ 2 , . . . , g ^ N 1 , h , g , η , ξ , ρ , ϑ , η 1 , η 2 , . . . , η N 2 g,g_0,g_1,g_2,g_3,\hat{g}_1,\hat{g}_2,...,\hat{g}_{N_1},h,\mathfrak{g},\eta,\xi,\rho,\vartheta,\eta_1,\eta_2,...,\eta_{N_2} g,g0,g1,g2,g3,g^1,g^2,...,g^N1,h,g,η,ξ,ρ,ϑ,η1,η2,...,ηN2 是 G \mathbb{G} G 的生成元, H : { 0 , 1 } ∗ → Z p H:\{0,1\}^*\rightarrow Z_p H:{0,1}∗→Zp 和 H ′ : { 0 , 1 } ∗ → G H':\{0,1\}^*\rightarrow \mathbb{G} H′:{0,1}∗→G 是两个哈希函数。
CA 选择 x , y , μ 1 , μ 2 , . . . , μ N 2 ← Z p x,y,\mu_1,\mu_2,...,\mu_{N_2}\leftarrow Z_p x,y,μ1,μ2,...,μN2←Zp 并计算 g ~ = g x , h ~ = h y , h 0 = h 1 y , h 1 = h 1 y + 1 , . . . , h q − 1 = h 1 y + q − 1 , h ~ 0 = h q 0 , h ~ 1 = h q , . . . , h ~ k − 1 = h q k − 1 , η ~ 1 = η 1 μ 1 , η ~ 2 = η 2 μ 2 , . . . , η ~ N 2 = η N 2 μ N 2 \tilde{g}=g^x,\tilde{h}=h^y,h_0=h^{\frac{1}{y}},h_1=h^{\frac{1}{y+1}},...,h_{q-1}=h^{\frac{1}{y+q-1}},\tilde{h}_0=h^{q^0},\tilde{h}_1=h^q,...,\tilde{h}_{k-1}=h^{q^{k-1}},\tilde{\eta}_1=\eta_1^{\mu_1},\tilde{\eta}_2=\eta_2^{\mu_2},...,\tilde{\eta}_{N_2}=\eta_{N_2}^{\mu_{N_2}} g~=gx,h~=hy,h0=hy1,h1=hy+11,...,hq−1=hy+q−11,h~0=hq0,h~1=hq,...,h~k−1=hqk−1,η~1=η1μ1,η~2=η2μ2,...,η~N2=ηN2μN2 和 ( η i 1 = η 1 μ i + H ( I i 1 ) , η i 2 = η 1 μ i + H ( I i 2 ) , . . . , η i ς = η 1 μ i + H ( I i ς ) ) i = 1 N 2 (\eta_{i_1}=\eta^{\frac{1}{\mu_i+H(I_{i_1})}},\eta_{i_2}=\eta^{\frac{1}{\mu_i+H(I_{i_2})}},...,\eta_{i_\varsigma}=\eta^{\frac{1}{\mu_i+H(I_{i_\varsigma})}})_{i=1}^{N_2} (ηi1=ημi+H(Ii1)1,ηi2=ημi+H(Ii2)1,...,ηiς=ημi+H(Iiς)1)i=1N2
CA 的私钥是 M S K = ( x , y , μ 1 , μ 2 , . . . , μ N 2 ) MSK=(x,y,\mu_1,\mu_2,...,\mu_{N_2}) MSK=(x,y,μ1,μ2,...,μN2) 和公共参数是 p a r a m s = ( e , p , G , G τ , g , g 0 , g 1 , g 2 , g ^ 1 , g ^ 2 , . . . , g ^ N 1 , h , g , η , ξ , ρ , g ~ , h ~ , h 0 , h 1 , . . . , h q − 1 , h ~ 0 , h ~ 1 , . . . , h ~ k − 1 , η 1 , η 2 , . . . , η N 2 , η ~ 1 , η ~ 2 , . . . , η ~ N 2 , ( η i 1 , η i 2 , . . . , η i ς ) i = 1 N 2 ) params=(e,p,\mathbb{G},\mathbb{G}_\tau,g,g_0,g_1,g_2,\hat{g}_1,\hat{g}_2,...,\hat{g}_{N_1},h,\mathfrak{g},\eta,\xi,\rho,\tilde{g},\tilde{h},h_0,h_1,...,h_{q-1},\tilde{h}_0,\tilde{h}_1,...,\tilde{h}_{k-1},\eta_1,\eta_2,...,\eta_{N_2},\tilde{\eta}_1,\tilde{\eta}_2,...,\tilde{\eta}_{N_2},(\eta_{i_1},\eta_{i_2},...,\eta_{i_\varsigma})_{i=1}^{N_2}) params=(e,p,G,Gτ,g,g0,g1,g2,g^1,g^2,...,g^N1,h,g,η,ξ,ρ,g~,h~,h0,h1,...,hq−1,h~0,h~1,...,h~k−1,η1,η2,...,ηN2,η~1,η~2,...,η~N2,(ηi1,ηi2,...,ηiς)i=1N2)
SRegistration.
S 的注册要求其生成一个公私钥对 ( x S , Y S ) (x_S,Y_S) (xS,YS)。S 发送 Y S Y_S YS 和 ∏ S 1 \prod_S^1 ∏S1 的知识证明(表示知道私钥 x s x_s xs)给 CA,并向 CA 提供证据他有作为 seller 的资格。如果 ∏ S 1 \prod_S^1 ∏S1 有效且认证通过,CA 生成一个凭证 σ S \sigma_S σS,该凭证是一个 BBS+ 签名包含了公钥 Y S Y_S YS 以及有效时期 V P S VP_S VPS。然后这些内容也回送给 S,S 通过验证凭证 σ S \sigma_S σS 确认 CA 是否授权他作为 seller。
- S 选择私钥 x s ← Z p x_s\leftarrow Z_p xs←Zp 并计算 Y S = ρ x S Y_S=\rho^{x_S} YS=ρxS。计算证明 ∏ S 1 : P o K { x s : Y S = ρ x S } \prod_S^1:PoK\{x_s:Y_S=\rho^{x_S}\} ∏S1:PoK{xs:YS=ρxS},发送 { I D S , Y S , ∏ S 1 } \{ID_S,Y_S,\prod_S^1\} {IDS,YS,∏S1} 给 CA
- CA 选择 c s , r s ← Z p c_s,r_s\leftarrow Z_p cs,rs←Zp 并计算 σ S = ( g 0 g 1 H ( V P S ) Y S g r S ) 1 x + c s \sigma_S=(g_0g_1^{H(VP_S)}Y_S\mathfrak{g}^{r_S})^{\frac{1}{x+c_s}} σS=(g0g1H(VPS)YSgrS)x+cs1,其中 V P S VP_S VPS 是一个有效的时期。将 c s , r s , σ S , V P S c_s,r_s,\sigma_S,VP_S cs,rs,σS,VPS 发送给 S
- S 验证 e ( σ S , g ~ g c s ) = ? e ( g 0 , g ) ⋅ e ( g , g 1 ) H ( V P S ) ⋅ e ( Y S , g ) ⋅ e ( g , g ) r s e(\sigma_S,\tilde{g}g^{c_s})\overset{?}{=}e(g_0,g)\cdot e(g,g_1)^{H(VP_S)}\cdot e(Y_S,g)\cdot e(g,\mathfrak{g})^{r_s} e(σS,g~gcs)=?e(g0,g)⋅e(g,g1)H(VPS)⋅e(YS,g)⋅e(g,g)rs,保存凭证 C r e d S = ( c s , r s , σ S ) Cred_S=(c_s,r_s,\sigma_S) CredS=(cs,rs,σS)
URegistration.
U 生成一个公私钥对 ( x U , Y U ) (x_U,Y_U) (xU,YU) 并提交他的公钥 P U P_U PU 和知识证明 ∏ U 1 \prod_U^1 ∏U1 说明他知道私钥 x U x_U xU。U 向 CA 发送属性列表 A U A_U AU(比如,年龄,职业,位置)。CA 认证 ∏ U 1 \prod_U^1 ∏U1,并为 U 生成凭证 σ U , σ U \sigma_U,\sigma_U σU,σU 是一个 BBS+ 签名,包含了公钥 Y U Y_U YU,他的有效时期 V P U VP_U VPU 和相应的属性 A U A_U AU。CA 将这些信息回送给 U,U 验证他现在已经是系统的合法用户,并且其属性已经得到了 CA 的认证。
- U 选择 x u ← Z p x_u\leftarrow Z_p xu←Zp 并计算 Y U = ξ x u Y_U=\xi^{x_u} YU=ξxu。选择 r ← Z p r\leftarrow Z_p r←Zp 并计算 R = g r R=\mathfrak{g}^r R=gr。计算证明 ∏ U 1 : P o K { ( x u , r ) : Y U = ξ x u ∧ R = g r } \prod_U^1:PoK\{(x_u,r):Y_U=\xi^{x_u}\wedge R=\mathfrak{g}^r\} ∏U1:PoK{(xu,r):YU=ξxu∧R=gr},发送 { I D U , Y U , R , A U , ∏ U 1 } \{ID_U,Y_U,R,A_U,\prod_U^1\} {IDU,YU,R,AU,∏U1} 给 CA。
- CA 选择 c u , r ′ ← Z p c_u,r'\leftarrow Z_p cu,r′←Zp 并计算 σ U = ( g 0 g 1 H ( V P U ) Y U R g r ′ ∏ l = 1 N 1 g ^ l a l ∏ i = 1 N 2 η i H ( I i j ) ) 1 x + c u \sigma_U=(g_0g_1^{H(VP_U)}Y_UR\mathfrak{g}^{r'}\prod_{l=1}^{N_1}\hat{g}_l^{a_l}\prod_{i=1}^{N_2}\eta_i^{H(I_{i_j})})^{\frac{1}{x+c_u}} σU=(g0g1H(VPU)YURgr′∏l=1N1g^lal∏i=1N2ηiH(Iij))x+cu1,发送 { c u , r ′ , σ U , V P U } \{c_u,r',\sigma_U,VP_U\} {cu,r′,σU,VPU} 给 U
- U 计算 r u = r + r ′ r_u=r+r' ru=r+r′ 验证 e ( σ U , g ~ g C u = e ( g 0 , g ) ⋅ e ( g , g 1 ) H ( V P U ) ⋅ e ( Y U , g ) ⋅ e ( g , g ) r u ⋅ ∏ l = 1 N 1 e ( g ^ l , g ) a l ⋅ ∏ i = 1 N 2 e ( η i , g ) H ( I i j ) ) e(\sigma_U,\tilde{g}g^{C_u}=e(g_0,g)\cdot e(g,g_1)^{H(VP_U)}\cdot e(Y_U,g)\cdot e(\mathfrak{g},g)^{r_u}\cdot \prod_{l=1}^{N_1}e(\hat{g}_l,g)^{a_l}\cdot \prod_{i=1}^{N_2}e(\eta_i,g)^{H(I_{i_j})}) e(σU,g~gCu=e(g0,g)⋅e(g,g1)H(VPU)⋅e(YU,g)⋅e(g,g)ru⋅∏l=1N1e(g^l,g)al⋅∏i=1N2e(ηi,g)H(Iij)),保存凭证 C r e d U = ( c U , r U , σ U ) Cred_U=(c_U,r_U,\sigma_U) CredU=(cU,rU,σU)。
r u = r + r ′ r_u=r+r' ru=r+r′ 是 U 和 CA 共同产生的
TicketIssuing.
设 P U P_U PU 是由 U 满足的范围策略和集合策略组成。为了防止攻击者收集到用户的隐私信息,S 首先需要向 U 证明他的确是受 CA 授权的。这是通过构造 S 的凭证 σ S \sigma_S σS 的知识证明 ∏ S 2 \prod_S^2 ∏S2 来实现。如果证明成立,用户继续生成一个新的假名 Y Y Y,其中涉及到她的秘钥 x u x_u xu,并构建一个关于 Y Y Y 的零知识证明 ∏ U 2 \prod_U^2 ∏U2。该证明向 S 显示 CA 已经认证她是一个合法用户且她拥有她声称的属性可以购买其属性对应的票。当 S 成功验证了 U 的证明后,S 应用 BBS+ 签名构建票据 T U T_U TU,其中包含用户的假名 Y Y Y,适用范围,集合策略,一个序列号(用于检测双花攻击)以及票据的价格和有效期 V P T VP_T VPT。
需要注意的是,虽然票据价格及其有效期包含在 T U T_U TU 的构造中,但他们仅是自由文本(free text),仅当应用上下文需要价格和有效期的时候才应使用,例如,当有效期很重要时,S 应检查用户的凭证有效期 V P U VP_U VPU,并确保凭据的有效期 V P T VP_T VPT 不低于 V P U VP_U VPU。S 将 T U T_U TU 以及相关详细信息发送给 U,U 可以使用该信息和 S 的公钥 Y S Y_S YS 来验证信息的有效性。请注意,由于使用了用户假名,我们的方案提供了票据的不可链接性,这阻止了卖家 S 和任何验证者 V 链接到同一用户请求的任何两张票据,即使他们可以串联。
- S 选择
z
,
v
←
Z
p
z,v\leftarrow Z_p
z,v←Zp 并计算
Q
=
σ
S
ϑ
z
,
Z
=
g
z
ϑ
v
,
Z
c
s
=
g
z
′
ϑ
v
′
(
z
′
=
z
c
s
,
v
′
=
v
c
s
)
Q=\sigma_S\vartheta^z,Z=g^z\vartheta^v,Z^{c_s}=g^{z'}\vartheta^{v'}(z'=zc_s,v'=vc_s)
Q=σSϑz,Z=gzϑv,Zcs=gz′ϑv′(z′=zcs,v′=vcs)。计算证明
∏
S
2
\prod_S^2
∏S2
P o K { ( c s , r s , σ S , z , v ) : Z = g z ϑ v ∧ Z c s = g z ′ ϑ v ′ ∧ e ( Q , g ~ ) e ( g 0 , g ) ⋅ e ( g 1 , g ) H ( V P S ) = e ( ρ , g ) x s ⋅ e ( g , g ) r s ⋅ e ( Q , g ) − c s ⋅ e ( ϑ , g ) c s z ⋅ e ( ϑ , g ~ ) z } } PoK\begin{Bmatrix} (c_s,r_s,\sigma_S,z,v):Z=g^z\vartheta^v\wedge Z^{c_s}=g^{z'}\vartheta^{v'} \wedge \frac{e(Q,\tilde{g})}{e(g_0,g)\cdot e(g_1,g)^{H(VP_S)}} \\=e(\rho,g)^{x_s}\cdot e(\mathfrak{g},g)^{r_s}\cdot e(Q,g)^{-c_s}\cdot e(\vartheta,g)^{c_sz}\cdot e(\vartheta,\tilde{g})^z\} \end{Bmatrix} PoK{(cs,rs,σS,z,v):Z=gzϑv∧Zcs=gz′ϑv′∧e(g0,g)⋅e(g1,g)H(VPS)e(Q,g~)=e(ρ,g)xs⋅e(g,g)rs⋅e(Q,g)−cs⋅e(ϑ,g)csz⋅e(ϑ,g~)z}} - U 设
P
U
P_U
PU 是由 U 满足的范围策略和集合策略组成。
a
l
∈
A
U
,
a
l
∈
[
c
l
,
d
l
]
,
a
l
−
c
l
,
a
l
−
d
l
+
q
k
∈
[
0
,
q
k
)
,
a
l
−
c
l
=
∑
i
=
1
k
−
1
w
l
i
q
i
,
a
l
−
d
l
+
q
k
=
∑
i
=
0
k
−
1
w
l
i
′
q
i
a_l\in A_U,a_l\in[c_l,d_l],a_l-c_l,a_l-d_l+q^k\in [0,q^k),a_l-c_l=\sum_{i=1}^{k-1}w_{l_i}q^i,a_l-d_l+q^k=\sum_{i=0}^{k-1}w_{l_i}'q^i
al∈AU,al∈[cl,dl],al−cl,al−dl+qk∈[0,qk),al−cl=∑i=1k−1wliqi,al−dl+qk=∑i=0k−1wli′qi,其中
w
l
i
,
w
l
i
′
∈
[
0
,
1
,
.
.
.
,
q
−
1
]
w_{l_i},w'_{l_i}\in [0,1,...,q-1]
wli,wli′∈[0,1,...,q−1]。选择
d
,
α
,
β
,
γ
1
,
γ
2
,
.
.
.
,
γ
N
1
,
t
l
0
,
t
l
1
,
.
.
.
,
t
l
0
,
t
l
1
,
.
.
.
,
t
l
k
−
1
,
t
l
0
′
,
t
l
1
′
,
.
.
.
,
t
l
k
−
1
′
,
e
1
,
e
2
,
.
.
.
,
e
N
2
←
Z
p
d,\alpha,\beta,\gamma_1,\gamma_2,...,\gamma_{N_1},t_{l_0},t_{l_1},...,t_{l_0},t_{l_1},...,t_{l_{k-1}},t'_{l_0},t'_{l_1},...,t'_{l_{k-1}},e_1,e_2,...,e_{N_2}\leftarrow Z_p
d,α,β,γ1,γ2,...,γN1,tl0,tl1,...,tl0,tl1,...,tlk−1,tl0′,tl1′,...,tlk−1′,e1,e2,...,eN2←Zp。计算
C
=
σ
U
ϑ
α
,
D
=
g
α
ϑ
β
,
D
c
u
=
g
α
′
ϑ
β
′
,
Y
=
ξ
x
u
g
1
d
,
(
Z
l
=
g
γ
l
h
a
l
,
(
A
w
l
i
=
h
w
l
i
t
l
i
,
A
w
l
i
′
=
h
w
l
i
t
l
i
′
)
i
=
0
N
1
,
(
B
i
,
j
=
n
i
j
e
i
)
i
=
1
N
2
C=\sigma_U\vartheta^\alpha,D=g^\alpha\vartheta^\beta,D^{c_u}=g^{\alpha'}\vartheta^{\beta'},Y=\xi^{x_u}g_1^d,(Z_l=g^{\gamma_l}h^{a_l},(A_{w_{l_i}}=h_{w_{l_i}}^{t_{l_i}},A'_{w_{l_i}}=h_{w_{l_i}}^{t_{l_i}'})_{i=0}^{N_1},(B_{i,j}=n_{i_j}^{e_i})_{i=1}^{N_2}
C=σUϑα,D=gαϑβ,Dcu=gα′ϑβ′,Y=ξxug1d,(Zl=gγlhal,(Awli=hwlitli,Awli′=hwlitli′)i=0N1,(Bi,j=nijei)i=1N2,其中
α
′
=
α
c
u
,
β
′
=
β
c
u
\alpha'=\alpha c_u,\beta'=\beta c_u
α′=αcu,β′=βcu。计算证明
∏
U
2
\prod_U^2
∏U2,发送
(
∏
U
2
,
Y
,
V
P
U
,
P
U
)
(\prod_U^2,Y,VP_U,\mathbb{P}_U)
(∏U2,Y,VPU,PU) 给 S:
P o K { ( x u , c u , r u , d , α , β , α ′ , β ′ , ( a l , ( t l i ′ , w l i , w l i ′ ) i = 0 k − 1 ) l = 0 N 1 , ( e i , H ( I i j ) i = 1 N 2 ) ) : Y = ξ x u g 1 d ∧ Z l = g γ l h a l ∧ D = g α ϑ β ∧ D c u = g α ′ ϑ β ′ ∧ e ( C , g ~ ) e ( g 0 , g ) ⋅ e ( g 1 , g ) H ( V P U ) = e ( ξ , g ) x u ⋅ e ( g , g ) r u ⋅ ∏ l = 1 N 1 e ( g ^ l , g ) a l ⋅ ∏ i = 1 N 2 e ( η i , g ) H ( I i , j ) ⋅ e ( C , g ) − c u ⋅ e ( ϑ , g ) α ′ ⋅ e ( ϑ , g ~ ) α ∧ ( Z l h − c l = g γ l ∏ i = 0 k − 1 h ~ i w l i ′ ) ∧ ( e ( A w i ′ , h ~ ) = e ( h , h ) t l i ′ ⋅ e ( A w l i ′ , h ) − w l i ′ ) i = 0 k − 1 ) l = 1 N 1 ∧ ( e ( B i , j , η ~ i ) = e ( η , η i ) e i ⋅ e ( B i j , η i ) H ( I i j ) ) i = 1 N 2 } PoK\begin{Bmatrix} (x_u,c_u,r_u,d,\alpha,\beta,\alpha',\beta',(a_l,(t'_{l_i},w_{l_i},w'_{l_i})_{i=0}^{k-1})_{l=0}^{N_1},(e_i,H(I_{i_j})^{N_2}_{i=1})): \\ Y=\xi^{x_u}g_1^d\wedge Z_l=g^{\gamma_l}h^{a_l}\wedge D=g^\alpha\vartheta ^\beta\wedge D^{c_u}=g^{\alpha'}\vartheta^{\beta'} \\ \wedge \frac{e(C,\tilde{g})}{e(g_0,g)\cdot e(g_1,g)^{H(VP_U)}}=e(\xi,g)^{x_u}\cdot e(\mathfrak{g},g)^{r_u}\cdot \\ \prod_{l=1}^{N_1}e(\hat{g}_l,g)^{a_l}\cdot \prod_{i=1}^{N_2}e(\eta_i,g)^{H(I_{i,j})}\cdot \\ e(C,g)^{-c_u}\cdot e(\vartheta,g)^{\alpha'}\cdot e(\vartheta,\tilde{g})^\alpha \\ \wedge (Z_lh^{-c_l}=g^{\gamma_l}\prod_{i=0}^{k-1}\tilde{h}_i^{w'_{l_i}}) \\ \wedge (e(A_{w_i}',\tilde{h})=e(h,h)^{t'_{l_i}}\cdot e(A_{w'_{l_i}},h)^{-w'_{l_i}})_{i=0}^{k-1})_{l=1}^{N_1} \\ \wedge (e(B_{i,j},\tilde{\eta}_i)=e(\eta,\eta_i)^{e_i}\cdot e(B_{i_j},\eta_i)^{H(I_{i_j})})_{i=1}^{N_2} \end{Bmatrix} PoK⎩ ⎨ ⎧(xu,cu,ru,d,α,β,α′,β′,(al,(tli′,wli,wli′)i=0k−1)l=0N1,(ei,H(Iij)i=1N2)):Y=ξxug1d∧Zl=gγlhal∧D=gαϑβ∧Dcu=gα′ϑβ′∧e(g0,g)⋅e(g1,g)H(VPU)e(C,g~)=e(ξ,g)xu⋅e(g,g)ru⋅∏l=1N1e(g^l,g)al⋅∏i=1N2e(ηi,g)H(Ii,j)⋅e(C,g)−cu⋅e(ϑ,g)α′⋅e(ϑ,g~)α∧(Zlh−cl=gγl∏i=0k−1h~iwli′)∧(e(Awi′,h~)=e(h,h)tli′⋅e(Awli′,h)−wli′)i=0k−1)l=1N1∧(e(Bi,j,η~i)=e(η,ηi)ei⋅e(Bij,ηi)H(Iij))i=1N2⎭ ⎬ ⎫
C , D , D c u C,D,D^{c_u} C,D,Dcu 为 c r e d U = ( σ U , c u , r u ) cred_U=(\sigma_U,c_u,r_u) credU=(σU,cu,ru) 承诺, Y = ξ x u g 1 d Y=\xi^{x_u}g_1^d Y=ξxug1d 为 U 的公钥 Y u Y_u Yu 承诺, Z l Z_l Zl 为属性范围值 a l a_l al 承诺, A w l i A_{w_{l_i}} Awli 为 a l − c u a_l-c_u al−cu 承诺, A w l i ′ A_{w_{l_i}}' Awli′ 为 a l − d l + q k a_l-d_l+q^k al−dl+qk 承诺, ( B i , j = n i j e i ) i = 1 N 2 (B_{i,j}=n_{i_j}^{e_i})_{i=1}^{N_2} (Bi,j=nijei)i=1N2 为系统参数的集合属性承诺, ( η i 1 = η 1 μ i + H ( I i 1 ) , η i 2 = η 1 μ i + H ( I i 2 ) , . . . , η i ς = η 1 μ i + H ( I i ς ) ) i = 1 N 2 (\eta_{i_1}=\eta^{\frac{1}{\mu_i+H(I_{i_1})}},\eta_{i_2}=\eta^{\frac{1}{\mu_i+H(I_{i_2})}},...,\eta_{i_\varsigma}=\eta^{\frac{1}{\mu_i+H(I_{i_\varsigma})}})_{i=1}^{N_2} (ηi1=ημi+H(Ii1)1,ηi2=ημi+H(Ii2)1,...,ηiς=ημi+H(Iiς)1)i=1N2
Z l h − ( d l − q k ) = g γ l ∏ i = 0 k − 1 h ~ i w l i ′ ⇒ g γ l h a l h − c l = g γ l ( h q , . . . , h q k − 1 ) w l i ⇒ a l − c l = w l 0 q 0 + w l 1 q 1 + . . . + w l k − 1 q k − 1 Z_lh^{-(d_l-q^k)}=g^{\gamma_l}\prod_{i=0}^{k-1}\tilde{h}_i^{w'_{l_i}}\Rightarrow g^{\gamma_l} h^{a_l}h^{-c_l}=g^{\gamma_l}(h^q,...,h^{q^{k-1}})^{w_{l_i}}\Rightarrow a_l-c_l=w_{l_0}q^0+w_{l_1}q^1+...+w_{l_{k-1}}q^{k-1} Zlh−(dl−qk)=gγl∏i=0k−1h~iwli′⇒gγlhalh−cl=gγl(hq,...,hqk−1)wli⇒al−cl=wl0q0+wl1q1+...+wlk−1qk−1
- S 选择 d ′ , s u , ω u ← Z p d',s_u,\omega_u\leftarrow \mathbb{Z}_p d′,su,ωu←Zp 并计算 T U = ( g 0 Y g 1 d ′ g 2 s u g 3 ψ u ) 1 x S + ω u T_U=(g_0Yg_1^{d'}g_2^{s_u}g_3^{\psi_u})^{\frac{1}{x_S+\omega_u}} TU=(g0Yg1d′g2sug3ψu)xS+ωu1,其中 s u s_u su 是一个序列号, ψ u = H ( P U ∣ ∣ P r i c e ∣ ∣ S e r v ∣ ∣ V P T ) \psi_u=H(\mathbb{P}_U||Price||Serv||VP_T) ψu=H(PU∣∣Price∣∣Serv∣∣VPT), P r i c e Price Price 是票据的价格, S e r v Serv Serv 是 U 想要访问的服务, V P T VP_T VPT 是有效期。发送 ( T U , d ′ , s u , ω u , ψ u , S e r v , P r i c e , V P T ) (T_U,d',s_u,\omega_u,\psi_u,Serv,Price,VP_T) (TU,d′,su,ωu,ψu,Serv,Price,VPT) 给 U。
- 计算 d u = d + d ′ d_u=d+d' du=d+d′ 并检查 e ( T U , Y s ρ ω u ) = ? e ( g 0 , ρ ) ⋅ e ( Y U , ρ ) ⋅ e ( g 1 , ρ ) d u ⋅ e ( g 2 , ρ ) s u ⋅ e ( g 3 , ρ ) ψ u e(T_U,Y_s\rho^{\omega_u})\overset{?}{=}e(g_0,\rho)\cdot e(Y_U,\rho)\cdot e(g_1,\rho)^{d_u}\cdot e(g_2,\rho)^{s_u}\cdot e(g_3,\rho)^{\psi_u} e(TU,Ysρωu)=?e(g0,ρ)⋅e(YU,ρ)⋅e(g1,ρ)du⋅e(g2,ρ)su⋅e(g3,ρ)ψu。保存假名 P s U = ξ x u g 1 d u Ps_U=\xi^{x_u}g_1^{d_u} PsU=ξxug1du 和票据 T i c k e t U = ( d u , s u , ψ u , ω u , T u , P U , P r i c e , S e r v , V P T ) Ticket_{U}=(d_u,s_u,\psi_u,\omega_u,T_u,\mathbb{P}_U,Price,Serv,VP_T) TicketU=(du,su,ψu,ωu,Tu,PU,Price,Serv,VPT)。
TicketValidation.
U 初始化一个空表用于存储验证者 V 的身份信息,改表的目的是确保一个验证者只能请求一个票据一次,防止诚实的用户被恶意的验证者去匿名化。另一方面,V 初始化一个空表来存储来自 U 的身份认证记录,以确保票据是否被使用过(双重消费检测)。票据验证过程为:V 发送一个随机数 r r r 和他的身份 I D V ID_V IDV 给 U。假设有一些带外通道允许 U 对 V 进行验证,比如是火车的警卫。U 首先检查 V 没有在 T a b l e U Table_U TableU 的条目中。否则,他继续向 V 发送他的票据 T i c k e t U Ticket_U TicketU 的票据记录 T r a n s T Trans_T TransT,其中包含零知识证明 ∏ U 3 \prod_U^3 ∏U3。票据记录使得 V 相信她是一个合法的用户,她拥有一张有效的票据 T i c k e t U Ticket_U TicketU。由于 T i c k e t U Ticket_U TicketU 包含了用户的私钥 x u x_u xu 作为其假名的一部分,因此需要将其知识作为 ∏ U 3 \prod_U^3 ∏U3 的一部分显示。假设 U 的私钥没有被泄露,我们的方案能够确保票据的不可转让性。此外, T r a n s T Trans_T TransT 包含 V 的随机数 r r r 来防止简单的重放攻击。U 通过更新 T a b l e U Table_U TableU V 的身份和 r r r 来完成验证过程。如果 V 可以成功验证 U 的票据记录,V 授权她访问服务的权限,并使用 T r a n s T Trans_T TransT 更新 T a b l e V Table_V TableV。
- V 初始化一个空表 T a b l e V Table_V TableV,选择随机数 r ← Z p r\leftarrow Z_p r←Zp,发送 ( I D V , r ) (ID_V,r) (IDV,r) 给 U。
- U 初始化一个空表:
T
a
b
l
e
U
Table_U
TableU。检查如果
H
(
I
D
V
)
∈
T
a
b
l
e
U
H(ID_V)\in Table_U
H(IDV)∈TableU,终止;反之
H
(
I
D
V
)
∉
T
a
b
l
e
U
H(ID_V)\notin Table_U
H(IDV)∈/TableU,进行下一步。选择
π
,
λ
←
Z
p
\pi,\lambda\leftarrow Z_p
π,λ←Zp 并计算
D
=
g
s
u
,
E
=
ξ
x
u
H
′
(
I
D
V
)
r
s
u
,
F
=
T
U
ϑ
π
,
J
=
g
π
ϑ
λ
D=g^{s_u},E=\xi^{x_u}H'(ID_V)^{rs_u},F=T_U\vartheta^\pi,J=g^\pi \vartheta^\lambda
D=gsu,E=ξxuH′(IDV)rsu,F=TUϑπ,J=gπϑλ 和
W
=
J
ω
u
=
g
π
′
ϑ
λ
′
W=J^{\omega_u}=g^{\pi'}\vartheta^{\lambda'}
W=Jωu=gπ′ϑλ′ 其中
π
′
=
π
ω
u
\pi'=\pi\omega_u
π′=πωu 和
λ
′
=
λ
ω
u
\lambda'=\lambda\omega_u
λ′=λωu。计算证明
∏
U
3
\prod_U^3
∏U3:
P o K { ( x u , d u , s u , ω u , π , λ , π ′ , λ ′ ) : D = g s u ∧ P s U = ξ x u g 1 d u ∧ E = ξ x u H ′ ( I D V ) r s u ∧ J = g π ϑ λ ∧ W = J ω u = g π ′ ϑ λ ′ ∧ e ( F , Y s ) e ( g 0 , ρ ) ⋅ e ( P S U , ρ ) ⋅ e ( g 3 , ρ ) ψ u = e ( g 2 , ρ ) s u ⋅ e ( F , ρ ) − ω u ⋅ e ( ϑ , r h o ) π ′ ⋅ e ( ϑ , ρ ) π } PoK\begin{Bmatrix} (x_u,d_u,s_u,\omega_u,\pi,\lambda,\pi',\lambda'):D=g^{s_u}\wedge P_{s_U}=\xi^{x_u}g_1^{d_u}\wedge E=\xi^{x_u}H'(ID_V)^{rs_u}\wedge \\ J=g^{\pi}\vartheta^\lambda \wedge W=J^{\omega_u}=g^{\pi'}\vartheta^{\lambda'}\wedge \frac{e(F,Y_s)}{e(g_0,\rho)\cdot e(P_{S_U},\rho)\cdot e(g_3,\rho)^{\psi_u}}=e(g_2,\rho)^{s_u}\cdot e(F,\rho)^{-\omega_u}\cdot e(\vartheta,rho)^{\pi'}\cdot e(\vartheta,\rho)^{\pi} \end{Bmatrix} PoK{(xu,du,su,ωu,π,λ,π′,λ′):D=gsu∧PsU=ξxug1du∧E=ξxuH′(IDV)rsu∧J=gπϑλ∧W=Jωu=gπ′ϑλ′∧e(g0,ρ)⋅e(PSU,ρ)⋅e(g3,ρ)ψue(F,Ys)=e(g2,ρ)su⋅e(F,ρ)−ωu⋅e(ϑ,rho)π′⋅e(ϑ,ρ)π} - 证明的 transcript 是: T r a n s T = ( ( D , E ) , F , J , W , ψ u , P S U , P U , P r i c e , S e r v , V P T , ∏ U 3 ) Trans_T=((D,E),F,J,W,\psi_u,P_{S_U},\mathbb{P}_{U},Price,Serv,VP_T,\prod_U^3) TransT=((D,E),F,J,W,ψu,PSU,PU,Price,Serv,VPT,∏U3),更新: T a b l e U = T a b l e U ∪ { H ( I D V ) , r } Table_U=Table_U\cup \{H(ID_V),r\} TableU=TableU∪{H(IDV),r},发送 ( T r a n s T , P s U , V P T ) (Trans_T,P_{s_U},VP_T) (TransT,PsU,VPT) 给 S。
- 检查 ψ u = ? H ( P U ∣ ∣ P r i c e ∣ ∣ S e r v ∣ ∣ V P T ) \psi_u\overset{?}{=}H(\mathbb{P}_U||Price || Serv||VP_T) ψu=?H(PU∣∣Price∣∣Serv∣∣VPT) 和证明 ∏ U 3 \prod_U^3 ∏U3。更新: T a b l e V = T a b l e V ∪ { ( ( r , D , E ) , F , J , ψ u ) } Table_V=Table_V\cup\{((r,D,E),F,J,\psi_u)\} TableV=TableV∪{((r,D,E),F,J,ψu)}