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

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



                 GP 、属于权威机构      aid 的属性   x 和该权威机构的私钥     SK  , 为该属性、身份对生成属性密钥         K x,GID , K ′   .
                                                                                              x,GID
                    (4)   Encrypt(M,(A,ρ),{PK},GP) → CT  : 加密算法通过消息  M  、访问结构、相关属性权威的公钥集和全局参
                 数, 计算输出密文     CT  .
                    (5)   Decrypt(CT,{K x,GID ,K ′ x,GID },GP) → M  : 解密算法输入密文、用户  GID 的属性密钥集合和全局参数. 当用户
                 所拥有的属性集合满足对应于密文的访问结构时, 输出消息                   M, 否则解密失败.

                 1.4   零知识证明

                    零知识证明是指证明者在不泄露论据的情况下, 向验证者证明论题为正确的. 一个零知识证明系统具备完备
                 性  (completeness)、可靠性  (soundness) 和零知识性  (zero-knowledge). 其中可靠性是指如果论题是假的, 任何证明
                 者都不能说服验证者相信它是真的, 有时我们需要更强的可靠性, 即知识证明                        (proof of knowledge). 知识证明是指
                 对于任何证明者, 都存在一个与证明者交互的提取算法, 该算法可以输出论据.
                    对于  NP  完全语言   L = {x|w s.t. C(x,w) = 1} , 零知识证明算法可以用  (S,P,V) 表示.
                       S (C) → crs : 初始化算法为证明者和验证者输出公共参数.
                    (1)
                       UserSetup(GP) → GID,S u  . 生成用户的私钥
                    (2)   P(crs, x,w) → π : 证明算法可以使用论据   w 生成证明  π , 证明  x ∈ L .
                    (3)   V(crs, x,π) → 1/0 : 验证算法可以验证证明的正确性.
                    零知识证明系统分为交互式和非交互式两种类型, 而                  zk-SNARKs [30] 是非交互式零知识证明的一种优化形式,
                 它减小了证明大小和验证时间, 显著降低了计算和通信成本.

                               [21]
                 1.5   ZebraLancer  的公共前缀可链接匿名认证方案
                    本文所提出的去中心化可问责属性认证方案基于                  ZebraLancer [21] 中的公共前缀可链接匿名认证方案实现, 该
                 方案的基本流程如下.
                    (1)   Setup(λ) . 生成   ZK  的公共参数  PP , 同时为数字签名算法生成公私钥对     (msk,mpk) .
                    (2)   CertGen(msk, pk i ) . 对   pk i  执行签名算法,    pk i  是用户的公钥, 生成的签名为  σ i  , 输出证书  cert i = σ i  .
                                                                        t 1 = H(p, sk i ),t 2 = H(p ∥ m, sk i ), H  是安全的
                    (3)    Auth(p ∥ m, sk i , pk i ,cert i ,PP)  . 输入前缀为  p  的消息   p ∥ m  , 计算
                 哈希函数, 对如下语言执行        ZK.Prove:   L T = {t 1 ,t 2 ,⃗ x = (p ∥ m,mpk) : ∃⃗ w = (sk i , pk i ,cert i ) s.t. CertVerify(cert i , pk i ,mpk) =

                 1∧ pair(pk i , sk i )∧t 1 = H(p, sk i )∧t 2 = H(p ∥ m, sk i )}  , 其中  CertVerify  算法是签名验证算法, 用来验证证书的有效性,
                 而   pair  则验证公私钥对. 得到证明   η  后, 算法输出  π = (t 1 ,t 2 ,η)  .
                    (4)   Verify(p ∥ m,π,mpk,PP). 验证算法执行  ZK.Verify 通过则输出  1, 否则为  0.
                                                                           1
                                                                              2
                                             1  1       2  2               t = t  , 如相等则输出  1, 否则为  0.
                                                   ,
                    (5)   Link(m 1 ,π 1 ,m 2 ,π 2 ) . 对  π 1 = (t ,t ,η 1 ) π 2 = (t ,t ,η 2 ) 算法验证是否有
                                             1  2       1  2               1  1

                 2   去中心化可问责属性认证方案
                    本文提出了一种去中心化可问责属性认证方案, 该方案基于                    ZebraLancer [21] 提出的公共前缀可链接匿名认证
                 方案实现, 在其基础上实现了属性认证和可追踪性, 并通过门限秘密分享实现了权威机构组织和追踪组. 本方案使
                 用了  RW [28] 去中心属性密码, 主要由以下几个算法组成.

                    (1)   GlobalSetup(λ) → GP. λ 为安全参数, 初始化算法生成全局参数     GP .
                    (2)                                  S u  和全局唯一  GID .
                                                                         n 个用户组成, 门限值为   , 生成属性权威
                                                                                            t
                    (3)   AASetup(n,t,aid,GP) → PK,{SK i }. 属性权威机构  aid 的初始化, 由
                 的公钥和部分私钥.
                                                                 n 个用户组成, 门限值为   , 生成追踪组的公钥和部
                                                                                    t
                    (4)   TracerSetup(n,t,GP) → TPK,{TSK i }. 追踪组初始化, 由
                 分私钥.
                                                              t
                    (5)   KeyGen(aid, x,GID,{SK i },GP) → K x,GID ,K ′  . 通过   个属性权威  aid 的部分私钥  SK i  , 生成用户  GID 属性  x
                                                      x,GID
                 的属性密钥    K x,GID ,K ′   .
                                x,GID
                        Auth(M,{K x,GID ,K  ′           |Ω|                                  (A,ρ)  的属性密
                    (6)             x,GID  },S u ,GID,(A,ρ),{PK j } ,TPK,GP) → η.  输入用户  GID  满足访问策略
                                                        j=1
   436   437   438   439   440   441   442   443   444   445   446