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