Page 443 - 《软件学报》2025年第4期
P. 443

陶静怡 等: 基于区块链和去中心化可问责属性认证的众包方案                                                   1849


                 同时执行   zk-SNARKs 的初始化算法生成参数        crs . 将公共参数  GP = {p,G,g,crs,H ,H,H 1 ,H 2 ,F} 公开上链.
                                                                                *
                                                                 R
                                                                                                *
                                                                      *
                    (2)    UserSetup(GP) → GID,S u . 用户注册时, 选择秘密值   S u ←{0,1}  , 计算用户的唯一标识  GID = H (S u ) , 由智
                 能合约保证    GID 在区块链上全局唯一.
                                                                 n  个成员组成, 门限值为      t. 首先, 机构的每个成员
                    (3)   AASetup(n,t,aid,GP) → PK,{SK i }.  属性授权机构  aid  由
                              R    R       R       R
                                                  ′
                                                                                            ′
                                                                           ′
                 Member i  选择   α i ←Z p ,y i ←Z p  和   f i ←Z p [x], f i ←Z p [x] 满足   deg(f i ) = t −1,deg( f i ) = t −1 且   f i (0) = α i , f i (0) = y i  . 则机构
                                     n           n
                                   ∑          ∑
                                                                                               ′
                 的私钥为   SK = {OSK =    α i ,ASK =  y i }  . 接着针对全部  n 个成员生成秘密  share ij = {f i (GID j ), f i (GID j )}  , 并
                                     i=1         i=1
                                                                                        n−1 个成员发送了对
                 将其通过可信信道秘密分享给           Member j , j ∈ [1,n], j , i , 自己保留   share ii  . 所有成员都给其他
                 应的秘密, 也拥有了      n 个不同成员生成的秘密.       Member i  接收到  n 个不同成员生成的秘密      share ji , j ∈ [1,n] , 可以计
                                       ∑ n              ∑ n
                                                             ′
                 算得到部分机构私钥       OSK i =   f j (GID i ),ASK i =  f j (GID i ) 和部分机构公钥  OPK i = e(g,g) OSK i ,APK i = g ASK i  .
                                         j=1              j=1
                 智能合约选取     t 个部分机构公钥生成属性机构公钥           PK = {OPK,APK} 并公开上链.

                                           ∏       ∏ t  GID j     ∏       ∏ t   GID j
                                              t                      t
                                     OPK =     OPK i  j=1, j, GID j −GID i , APK =  APK i  j=1, j,i GID j −GID i .
                                              i=1                    i=1
                                                                              R      R
                                                                                   ,
                    (4)    TracerSetup(n,t,GP) → TPK,{TSK i }.  追踪者协作分享秘密,    Tracer i  选择   z i ←Z p θ i ←Z p [x] , 满足  deg(θ i )=t−1
                                                                                   ∑
                                                                                      n
                                                                              TSK i =   θ j (GID i ),TPK i = g TSK i  .
                 且  θ i (0) = z i  . 将   θ i (GID j ) 发送给   Tracer j  ,    j ∈ [1,n], j , i. Tracer i  计算部分公私钥为

                                                                                      j=1
                 智能合约挑选     t 个追踪者生成的部分公钥        TPK i  可以生成追踪组公钥     TPK 并公开上链.

                                                       ∏ t     ∏ t  GID j
                                                 TPK =     TPK i  j=1, j,i GID j −GID i .
                                                         i=1

                 3.2   属性申请阶段
                     KeyGen(aid, x,GID,{SK i },GP) → K x,GID ,K ′                           x t 个属性权威
                                                    x,GID . 用户的身份标识为  GID , 向属性权威申请属性         ,
                                                R
                 的成员协作生成属性密钥, 成员         i 选择  β i ←Z p  , 计算用户关于属性  x 的部分属性密钥:

                                         partK x i ,GID = g OSK i H(GID) APK i F(x) , partK ′  = g .
                                                                  β i
                                                                              β i
                                                                        x i ,GID
                    智能合约通过     t 个部分属性私钥计算用户        GID 的属性密钥:

                                       ∏           ∏ t  GID j      ∏           ∏ t  GID j
                                          t                          t
                                                                            ′
                                                              ′
                                 K x,GID =  partK x i ,GID  j=1,j,i GID j −GID i , K x,GID =  partK x i ,GID  j=1,j,i GID j −GID i .
                                          i=1
                                                                     i=1
                    用户可以通过     e(g,K x,GID ) = OPK ·e(APK,H(GID))·e(K ′  ,F(x)) 验证属性密钥正确性.
                                                              x,GID
                 3.3   任务发布阶段
                                      |Ω|                                         |Ω| 为访问策略中所涉及属性
                       Encrypt(M,(A,ρ),{PK j } ,GP) → C. 请求者制定访问策略对任务内容进行加密,
                                      j=1
                                                          R             R
                                                                           l
                                                                                 s
                                                                                        v
                 对应的属性机构公钥的数量. 首先选择一个随机数                s←Z p  和随机向量   v←Z  , 其中   是向量   的第  1  个元素. 再选
                                                                           p
                            R
                                                                                         R
                               l
                 择随机向量    w←Z  , 其中第  1  个元素为  0. 最后对于矩阵    A 中的每一行    A k  , 选择一个随机数  r k ←Z p  , 则可以使用如
                               p
                 下公式加密任务信息       M  得到密文   C = {C 0 ,{C 1,k ,C 2,k ,C 3,k ,C 4,k ∀k}} , 其中,

                                              s
                                   C 0 = M ·e(g,g)
                                                                                     .
                                            A k ·v                     A k ·w
                                    C 1,k = e(g,g)  e(g,g)  ,C 2,k = g ,C 3,k = g  g  ,C 4,k = F(δ(k))
                                                  α ρ(k) r k  −r k  y ρ(k) r k     r k
                      δ 将  A 的每一行映射为一个属性字符串. 请求者发布任务号              tid  , 访问策略, 任务密文, 奖励信息, 签名和时间
                 限制, 并把押金传入合约.

                 3.4   提交认证阶段
                                                                                       ∑
                    (1)   Decrypt(C,{K x,GID ,K ′  },GP) → M . 符合策略的工作者首先需要计算   ω k ∈ Z p ,∀k , 使得   ω k A k = (1,0,...,0) .
                                      x,GID
                                                                                          k
                 之后针对每一行      k , 计算:

                                                             ′
                               C 1,k ·e(K δ(k),GID ,C 2,k )·e(H(GID),C 3,k )·e(K δ(k),GID ,C 4,k ) = e(g,g) A k ·v  ·e(H(GID),g) A k ·w .
                                                              ∏       A k ·v      A k ·w ω k  s
                    接下来针对每行获得的值进行乘方和累乘, 可以得到:                   k (e(g,g)  ·e(H(GID),g)  ) = e(g,g)  最终可以求得
                               s
                 明文  M = C 0 /e(g,g)  .
   438   439   440   441   442   443   444   445   446   447   448