system: [SYSTEM]

user: 4. VF-OO-ABPRE方案构造 4.1. 具体方案 1) 系统初始化算法 S e t u p ( 1 λ ， U ) 该算法由AA执行。AA输入安全参数 λ ∈ ℕ 和属性全集 U = { 1 ， 2 ， ⋯ ， n } ⊂ ℤ p * ，选择一个 p 阶的乘法循环群 Γ ，生成元为 g ， g 1 ， h 1 ， ⋯ ， h n ∈ G 为随机群元素。另一个 p 阶的乘法循环群为 Γ T ， e ( g ， g ) ⊂ Γ T ，选择两个随机数 α ， a ∈ ℤ p * ，定义抗碰撞杂凑函数 H 0 : { 0 ， 1 } * → ℤ p ， H 1 : { 0 ， 1 } * → { 0 ， 1 } λ ， H 2 : { 0 ， 1 } 2 λ → { 0 ， 1 } * 。最后生成系统公钥 P K = ( p ， g ， e ( g ， g ) α ， g a ， g 1 ， h 1 ， ⋯ ， h n ， H 0 ， H 1 ， H 2 ) ，主密钥 M S K = ( g α ) ，可信机构将 M S K = ( g α ) 作为主密钥保存起来。 2) 密钥生成算法 K e y G e n ( P K ， M S K ， S ) 该算法由AA执行。输入系统公钥 P K ，主密钥 M S K 和属性集 S ⊆ U ，AA随机选择 t ∈ ℤ p ，对于所有的 i ∈ S ，计算 K = g α g a t ， L = g t ， { K i = h i t } i ∈ S ，最后输出用户私钥 S K S = ( S ， K ， L ， { K i } i ∈ S ) 通过安全通道发给用户。 3) 外包密钥生成算法 K e y G e n o u t ( S ， S K S ) 该算法由解密用户DU执行，输入用户私钥 S K S ，随机选择 z ∈ ℤ p ，满足 g c d ( z ， p ) = 1 ，计算 K t k = K ( 1 / z ) ， L t k = L ( 1 / z ) ， { K i ， t k = K i ( 1 / z ) } i ∈ S 。输出解密密钥 K e y = z 用户秘密保存，外包密钥 D T K S = ( S ， K t k ， L t k ， { K i ， t k } i ∈ S ) 通过安全通道发给解密云服务商D-CSP。 4) 加密算法 E n c r y p t 加密算法分为两个阶段，由数据拥有者DO在闲时执行的离线加密算法 O f f l i n e . E n c 和真正加密阶段执行的在线加密算法 O n l i n e . E n c 。 a) 离线加密算法 O f f l i n e . E n c ( P K ， P ) 。该阶段算法由数据拥有者DO执行，利用文献 [ 12 ] 的“pooling”思想，输入系统公钥 P K ，用户根据自己需求假设最大可能的属性集合 P ⊆ U 。对于每一个 i ∈ P ，随机选取 λ i ， 1 ， s i ∈ ℤ p ，计算 { C 2 ， i = g a λ i ， 1 h i − s i ， C 3 ， i = g s i } i ∈ P 作为密文组件，输出中间密文 I C H = ( { C 2 ， i ， C 3 ， i } i ∈ P ) ，可将其上传至存储云服务商S-CSP以节省本地存储资源。将临时密钥 T K = { λ i ， 1 } i ∈ P 保存在本地。 b) 在线加密算法 O n l i n e . E n c ( P K ， m ， I C H ， T K ， ( M ， ρ ) ) ：该阶段算法由数据拥有者DO执行。输入系统公钥 P K ，明文信息 m ∈ { 0 ， 1 } λ ，中间密文 I C H ，临时密钥 T K ，以及属性 S 满足的访问结构 A = ( M ， ρ ) (其中 M 是一个 l × n 的矩阵， ρ ( ⋅ ) 是一个单射函数可以把矩阵 M 的每一行映射成一个属性值)。从“pooling”中随机选取 l 个 I C H ，随机选择 W ∈ G ，并计算 s = H 0 ( W ， m ) ，取随机数 y 2 ， ⋅ ⋅ ⋅ ， y n ∈ ℤ p ，向量 v = ( s ， y 2 ， ⋅ ⋅ ⋅ ， y n ) ∈ ℤ p n ， M j 表示矩阵 M 的第 j 行，计算 λ j = { M j v T } j ∈ { 1 ， ⋯ ， l ) 。对于任意 j ∈ { 1 ， ⋯ ， l } ，计算密文组件得： C = W ⋅ e ( g ， g ) α s ， C 1 = g s ， C 2 ， j = C 2 ， ρ ( j ) ， C 3 ， j = C 3 ， ρ ( j ) ， C 4 ， j = λ j − λ j ， 1 ， k = H 1 ( W ) ， C 5 = k ⊕ m ， C 6 = g H 1 ( e ( g ， g ) α s ) ， V K m = H 2 ( k ‖ C 5 ) 最后输出密文初始密文 C ( M ， ρ ) = ( C ， C 1 ， { C 2 ， j ， C 3 ， j ， C 4 ， j } j ∈ { 1 ， ⋯ ， l ) ， C 5 ， C 6 ) 和验证标识 V K m = H 2 ( k ‖ C 5 ) 发送给存储云服务商S-CSP进行存储。 5) 重加密密钥生成算法 R e K e y G e n ( P K ， S K S ， ( M ′ ， ρ ′ ) ) 该算法由授权用户DU执行。假设授权用户A满足访问结构 A = ( M ， ρ ) ，用户A运行重加密密钥生成算法 R e K e y G e n ，输入系统公钥 P K 、和用户A的私钥 S K S ，新的访问结构 A ′ = ( M ′ ， ρ ′ ) (其中 M ′ 是一个 l ′ × n ′ 的矩阵， ρ ′ ( ⋅ ) 是一个单射函数可以把矩阵 M ′ 的每一行映射成一个属性值，且属性集合 S ′ 满足 A ′ = ( M ′ ， ρ ′ ) )。随机选择 δ ∈ G ， s ′ ∈ ℤ p * ，其中 s ′ 是共享的秘密值。取随机数 y ′ 2 ， ⋅ ⋅ ⋅ ， y ′ n ∈ ℤ p ，向量 v ′ = ( s ′ ， y ′ 2 ， ⋅ ⋅ ⋅ ， y ′ n ) ， M ′ j 表示矩阵 M ′ 的第 j 行， λ ′ j = { M ′ j v ′ T } j ∈ { 1 ， ⋯ ， l ′ } 。首先，随机选取 λ ′ j ， 1 ， s ′ j ∈ ℤ p ，对于 j ∈ { 1 ， ⋯ ， l ′ } ，计算密文组件： C ′ = δ ⋅ e ( g ， g ) α s ′ ， C ′ 1 = g s ′ ， C ′ 2 ， j = g a λ ′ j ， 1 h ρ ′ ( j ) − s ′ j ， C ′ 3 ， j = g s ′ j ， C ′ 4 ， j = λ ′ j − λ ′ j ， 1 记 C ( M ′ ， ρ ′ ) = ( C ′ ， C ′ 1 ， { C ′ 2 ， j ， C ′ 3 ， j ， C ′ 4 ， j } j ∈ { 1 ， ⋯ ， l ′ } ) 。随机选择 θ ∈ ℤ p ，并计算 r k 1 = K H 1 ( δ ) ⋅ g 1 θ ， r k 2 = g 1 θ ， r k 3 = L H 1 ( δ ) ，对于所有的 j ∈ { 1 ， ⋯ ， l ′ } ， r k 4 = C ( M ′ ， ρ ′ ) ， r k j = K j H 1 ( δ ) ，最后输出重加密密钥 R K S → ( M ′ ， ρ ′ ) = ( S ， r k 1 ， r k 2 ， r k 3 ， r k 4 ， r k j ) 发送给Proxy。 6) 重加密算法 R e E n c ( P K ， R K S → ( M ′ ， ρ ′ ) ， C T ( M ， ρ ) ) 该算法由Proxy执行。Proxy收到重加密密钥 R K S → ( M ′ ， ρ ′ ) 后，运行重加密算法 R e E n c r y p t ，输入系统公钥 P K ，重加密密钥 R K S → ( M ′ ， ρ ′ ) 和初始密文 C ( M ， ρ ) 。若 C ( M ， ρ ) 与访问结构 A = ( M ， ρ ) 有关，且属性集 S 满足访问结构 A ，则定义 I ⊂ { 1 ， ⋯ ， l } 为 I = { j : ρ ( j ) ∈ S } ， { λ j } 是根据矩阵 M 对秘密 s 的有效共享，存在一个常数集 { ω j ∈ ℤ p } j ∈ I ，使得 ∑ j ∈ I ω j ⋅ λ j = s 。计算： C 7 = e ( C 1 ， r k 1 ) / e ( C 1 ， r k 2 ) ∏ j ∈ I ( e ( C 2 ， j ⋅ g a ⋅ C 4 ， j ， r k 3 ) ⋅ e ( C 3 ， j ， r k ρ ( j ) ) ) ω j = e ( g ， g ) α s H 1 ( δ ) ， 最后输出重加密密文 C S → ( M ′ ， ρ ′ ) = ( ( M ′ ， ρ ′ ) ， C ， C 5 ， C 6 ， C 7 ， r k 4 ) 和验证标识 V K m 发送给解密云服务商D-CSP。 7) 重加密验证算法 R e E n c V e r i f y ( P K ， δ ， C 6 ， C 7 ) 该阶段由授权用户 D U 执行。验证重加密密文是否被云服务代理商Proxy正确加密时， δ 对授权用户DU是已知的，输入来自云服务器Proxy的 C 7 ，计算 V = ( C 7 ) H 1 ( δ ) − 1 ，若 C 6 = g H 1 ( V ) ，则说明代理商Proxy重加密计算结果正确，输出 T r u e ，否则输出终止符 ⊥ 。 8) 解密算法 D e c r y p t 解密算法包含了对初始密文的解密算法 D e c 1 和对重加密密文的解密算法 D e c 2 。二者均包含了由外包云服务器D-CSP提供的外包解密转换密文生成算法 T r a n s f o r m o u t 和用户端提供的转换密文解密 D e c r y p t o u t 。 a) 初始密文解密算法Dec 1 · 转换密文生成算法 T r a n s f o r m o u t ( P K ， D T K S ， C ( M ， ρ ) ) ：该阶段由解密云服务商D-CSP执行。若用户属性集 S 不满足访问结构 A = ( M ， ρ ) ，则输出 ⊥ 。若 C ( M ， ρ ) 与访问结构 A 有关，授权人外包密钥 D T K S = ( S ， K t k ， L t k ， { K i ， t k } i ∈ S ) 与用户属性集 S 相关，且用户属性集 S 满足访问结构 A ，则定义 I ⊂ { 1 ， ⋯ ， l } 为 I = { j : ρ ( j ) ∈ S } ， { λ j } 是根据矩阵 M 对秘密 s 的有效共享，存在一个常数集 { ω j ∈ ℤ p } j ∈ I ，使得 ∑ j ∈ I ω j ⋅ λ j = s 。计算： C T p a r t = e ( C 1 ， K t k ) ∏ j ∈ I ( e ( C 2 ， j ⋅ g a ⋅ C 4 ， j ， L t k ) ⋅ e ( C 3 ， j ， K ρ ( j ) ， t k ) ) ω j = e ( g ， g ) α s / z 将外包解密转换密文 T C = ( C ， C T p a r t ， C 5 ) 发送给用户。 · 转换密文解密 D e c r y p t o u t ( P K ， K e y ， T C ， V K m ) ：该阶段由授权用户DU执行，输入解密密钥 K e y = z 、来自解密云服务商的外包解密转换密文 T C 、验证标识 V K m ，计算 W = C / C T p a r t K e y ， k = H 1 ( W ) 。若 V K m ≠ H 2 ( k ‖ C 5 ) ，则输出终止符 ⊥ ；否则计算 m = C 5 ⊕ k ， s = H 0 ( W ， m ) 。若 C = W ⋅ e ( g ， g ) α s ， C T p a r t = e ( g ， g ) α s / z ，输出 m ；否则输出终止符 ⊥ 。 b) 重加密密文解密算法Dec 2 · 转换密文生成算法 T r a n s f o r m o u t ( P K ， D T K S ′ ， C S → ( M ′ ， ρ ′ ) ) ：该阶段由解密云服务商S-CSP执行。若用户属性集 S ′ 不满足访问结构 A ′ = ( M ′ ， ρ ′ ) ，则输出 ⊥ 。若 C S → ( M ′ ， ρ ′ ) 与访问结构 A ′ 有关，被授权人外包密钥 D T K S ′ = ( S ， K ′ t k ， L ′ t k ， { K ′ i ， t k } i ∈ S ) 与用户属性集 S ′ 相关，且用户属性集 S ′ 满足访问结构 A ′ ，则定义 I ′ ⊂ { 1 ， ⋯ ， l ′ } 为 I ′ = { j : ρ ′ ( j ) ∈ S ′ } ， { λ ′ j } 是根据矩阵 M ′ 对秘密 s ′ 的有效共享，存在一个常数集 { ω ′ j ∈ ℤ p } j ∈ I ′ ，使得 ∑ j ∈ I ′ ω j ⋅ λ j = s ′ 。计算： C T ′ p a r t = e ( C ′ 1 ， K ′ t k ) ∏ j ∈ I ′ ( e ( C ′ 2 ， j ⋅ g a ⋅ C ′ 4 ， j ， L ′ t k ) ⋅ e ( C ′ 3 ， j ， K ′ ρ ′ ( j ) ， t k ) ) ω ′ j = e ( g ， g ) α s ′ / z ′ 将 T C ′ = ( C ， C ′ ， C T ′ p a r t ， C 5 ， C 7 ) 发送给用户。 · 转换密文解密 D e c r y p t o u t ( P K ， K e y ′ ， T C ′ ， V K m ) ：该阶段由被授权用户DU执行，输入解密密钥 K e y ′ = z ′ 、来自解密云服务商的外包解密转换密文 T C ′ 、验证标识 V K m ，计算 δ = C ′ / C T ′ p a r t K e y ′ ， W = C / ( C 7 ) H 1 ( δ ) ， k = H 1 ( W ) 。若 V K m ≠ H 2 ( k ‖ C 5 ) ，则输出终止符 ⊥ ；否则计算 m = C 5 ⊕ k ， s = H 0 ( W ， m ) 。若 C = W ⋅ e ( g ， g ) α s ， C T ′ p a r t = e ( g ， g ) α s ′ / z ′ ，输出 m ；否则输出终止符 ⊥ 。 4.2. 正确性 1) 原始密文的解密正确性。如果用户属性集 S 满足访问结构 A ，存在 ∑ j ∈ I ω j ⋅ λ j = s 。则计算： C T p a r t = e ( C 1 ， K t k ) ∏ j ∈ I ( e ( C 2 ， j ⋅ g a ⋅ C 4 ， j ， L t k ) ⋅ e ( C 3 ， j ， K ρ ( j ) ， t k ) ) ω j = e ( g s ， ( g α g a t ) 1 / z ) ∏ j ∈ I ( e ( g a λ j ， 1 h ρ ( j ) − s j ⋅ g a ⋅ ( λ j − λ j ， 1 ) ， g t / z ) ⋅ e ( g s j ， h ρ ( j ) t / z ) ) ω j = e ( g s ， ( g α g a t ) 1 / z ) ∏ j ∈ I ( e ( g a λ j h ρ ( j ) − s j ， g t / z ) ⋅ e ( g s j ， h ρ ( j ) t / z ) ) ω j = e ( g ， g ) α s / z ⋅ e ( g ， g ) a t s / z e ( g ， g ) a t / z ∑ j ∈ I λ j ω j = e ( g ， g ) α s / z 接着计算 C C T p a r t K ey = W ⋅ e ( g ， g ) α s ( e ( g ， g ) α s / z ) z = W ， k = H 1 ( W ) ， k ⊕ C 5 = k ⊕ k ⊕ m = m 得到明文。 2) 重加密密文的解密正确性。如果用户属性集 S ′ 满足访问结构 A ′ = ( M ′ ， ρ ′ ) ，存在 ∑ j ∈ I ′ ω ′ j ⋅ λ ′ j = s ′ 。先计算重加密密文组件 C 7 ，计算得： C 7 = e ( C 1 ， r k 1 ) / e ( C 1 ， r k 2 ) ∏ j ∈ I ( e ( C 2 ， j ⋅ g a ⋅ C 4 ， j ， r k 3 ) ⋅ e ( C 3 ， j ， r k j ) ) ω j = e ( g s ， ( g α g a t ) H 1 ( δ ) ⋅ g 1 θ ) / e ( g s ， g 1 θ ) ∏ j ∈ I ( e ( g a λ j ， 1 h ρ ( j ) − s j ⋅ g a ⋅ ( λ j − λ j ， 1 ) ， ( g t ) H 1 ( δ ) ) ⋅ e ( g s j ， ( h ρ ' ( j ) t ) H 1 ( δ ) ) ) ω j = e ( g ， g ) s α H 1 ( δ ) e ( g ， g ) s a t H 1 ( δ ) ∏ j ∈ I ( e ( g a λ j h ρ ( j ) − s j ， ( g t ) H 1 ( δ ) ) ⋅ e ( g s j ， ( h ρ ( j ) t ) H 1 ( δ ) ) ) ω j = e ( g ， g ) s α H 1 ( δ ) e ( g ， g ) s a t H 1 ( δ ) e ( g ， g ) a t / H 1 ( δ ) ∑ j ∈ I λ j ω j = e ( g ， g ) s α H 1 ( δ ) 同样的，按照 C T p a r t 的计算方法，可以计算出 C T ′ p a r t = e ( g ， g ) α s ′ / z ′ ，综合以上结果，接着计算 C ′ / C T ′ p a r t K e y ′ = δ ⋅ e ( g ， g ) α s ′ / ( e ( g ， g ) α s ′ / z ′ ) z ′ = δ ， C / ( C 7 ) H 1 ( δ ) − 1 = W ⋅ e ( g ， g ) α s / ( e ( g ， g ) s α ⋅ H 1 ( δ ) ) H 1 ( δ ) − 1 = W ， k = H 1 ( W ) ， k ⊕ C 5 = k ⊕ k ⊕ m = m 得到明文。