Page 444 - 《软件学报》2025年第4期
P. 444
1850 软件学报 2025 年第 36 卷第 4 期
|Ω|
(2) Auth(tid ∥ m,{K x,GID ,K ′ },S u ,GID,(A,ρ),{PK j } ,TPK,GP) → η. 工作者在完成任务后, 随机选择对称密钥
x,GID j=1
R
S 2 对工作结果加密得到密文 S 1 , 并计算 Tag = H(S 1 )⊕ H(S 2 ) , 记 m = H(S 1 ) . 然后使用 TPK 对 GID 加密, 选择 l←Z p ,
l l
则 Ex 1 = GID·TPK ,Ex 2 = g , 记 σ = Enc tr (TPK,GID,l,GP) = {Ex 1 ,Ex 2 } . 对任务 tid 计算标记 t 1 = H 1 (tid,S u ),t 2 = H 2
(tid ∥ m,S u ) . 对如下语言执行 ZK.Prove(⃗ x, ⃗ w,crs) 生成证明 π :
′
|Ω|
L 1 = {⃗ x = (tid ∥ m,(A,ρ),{PK j } ,t 1 ,t 2 ,σ,TPK,GP) : ∃⃗ w = (GID,{K x,GID ,K x,GID },ω,S u ,l) s.t. ωA = (1,0,...,0) (1)
j=1
′
|Ω|
∧ (ω i = 0∨e(g,K δ(i),GID ) = OPK ρ(i) ·e(APK ρ(i) ,H(GID))·e(K δ(i),GID ,F(δ(i)))) (2)
i=1
∧ t 1 = H 1 (tid,S u )∧t 2 = H 2 (tid ∥ m,S u ) (3)
*
∧GID i = H (S u )∧σ = Enc tr (TPK,GID,l,GP) (4)
工作者将 Tag,m 和匿名认证 η = (t 1 ,t 2 ,σ,π) 一起提交, 同时发送押金.
3.5 验证认证阶段
|Ω|
(1) Veri fy(tid ∥ m,η,(A,ρ),{PK j } ,TPK,GP) → 1/0 . 请求者收到工作者的提交信息后, 通过智能合约执行
j=1
ZK.Veri fy(⃗ x,π,crs) 验证证明, 如验证通过则输出 1, 否则输出 0.
GID = Ex 1
′ ′ ′ ′ t 1 = t , 如相等
′
(2) Link(M, M ,η,η ) → 1/0. 对工作者的两个不同信息 M = tid ∥ m, M 和认证 η ,η 比较是否有 1
则代表同一个工作者对这个任务提交了两次工作结果, 输出 1, 否则输出 0.
匿名验证不通过和提交两次的用户不会被放入该任务的工作者列表中, 且不会返还押金.
3.6 任务结果提交阶段
(1) 通过后验证后工作者在规定时间内通过链下安全通道发送加密后的工作结果 S 1 .
(2) 在到达规定时间后, 请求者对收到的所有 S 1 计算 H(S 1 ) , 并与链上的 m 进行比较, 一致则确认该工作者的
提交. 请求者将奖励放入合约, 未被确认的工作者的押金被退还.
(3) 被确认的工作者在规定时间内发布 S 2 .
3.7 奖励阶段
(1) 智能合约验证 Tag = H(S 1 )⊕ H(S 2 ) , 验证不通过的工作者不能得到奖励和押金, 同时通知追踪者追踪.
(2) 请求者用 S 2 解密 S 1 得到工作结果, 可以在规定时间内提交奖励分配的零知识证明, 对应的语言下:
L 2 = {⃗ x = ({S 2,j },{R j },{m j }) :
n n n
∃⃗ w = ({S 1,j },{Ans j }) s.t.∧ Ans j = Dec(S 1,j ,S 2,j )∧ H(S 1,j ) = m j ∧ R j = R(Ans j ;Ans 1 ,...,Ans n ,τ)},
j=1 j=1 j=1
其中, n 为参与任务的工作者数量, R 为请求者在发布任务时制定的奖励规则, Ans j 为工作结果的明文. 智能合约
验证通过后会发送给工作者奖励 R j , 从而避免工作者提交无效结果骗取奖励的情况. 如请求者未提交则合约将平
均分配奖励, 并返还工作者和请求者的押金.
3.8 追踪阶段
Trace(η,{TSK i }) → GID . 当工作者不能通过验证时, 将得不到奖励和押金, 同时会使用追踪机制. 追踪者生成
TSK i
追踪线索, 至少 t 个追踪者协作可以获得工作者身份. 通过认证 η 中的 σ, Tracer i 计算 Ex 2 . 当系统收集到 t 份时,
可以解密出:
/ ∏ ∏ t GID j
t
TSK i j=1,j,i GID j −GID i
(Ex 2 ) .
i=1
3.9 追踪者动态变化
(1) 追踪者加入
R
假设 Tracer r 加入, 追踪者变为 n+1 个, 原来的 n 个成员 Tracer i 选择 h i ←Z p [x], 满足 deg(h i ) = t −1 且 h i (GID r ) = 0.
′
接着针对原来的 n 个成员生成 h i (GID j ) , 并将其通过可信信道秘密分享给 Tracer j , j ∈ [1,n], j , i. Tracer j 计算 TSK =
j
∑ n ∑ t ∏ t GID r −GID k
TSK j + h i (GID j ) 并发给 Tracer r , Tracer r 收到至少 个 TSK 后, 计算 TSK r = TSK ′ ,
′
t
j=1 j j=1 j k=1,k,j GID j −GID k