system: [SYSTEM]

user: 4. 系统模型 本文提出的系统模型由云服务器(Cloud Server， CS)、代理服务器(Proxy Server， PS)、属性授权机构(Attribute Authorities， AAs)、数据拥有者(Data Owner， DO)、用户(Data Users， DU)5个实体组成。如图1所示。 图1. 系统模型 云服务器是半可信的，能够为数据所有者和代理服务器分别提供数据存储服务与密文访问请求服务。 代理服务器也是半可信的，用来存储用户的属性密钥并利用该密钥执行外包解密操作后得到部分解密密文，并将其部分解密密文返回给用户。 属性授权机构负责管理用户的属性、用户信任值的计算、属性密钥与全局密钥的生成及分发、系统公钥和主密钥等公共参数的生成。 数据所有者可以通过构造访问树定义自己的访问策略，并对明文数据进行加密后上传至云服务器存储。 用户发出资源访问请求时可以向代理服务器发送部分外包解密请求，只有用户所拥有的属性满足数据所有者定义的访问策略，通过对代理服务器返回的部分解密密文使用全局密钥进行解密得到明文。 方案算法实现 方案主要分为初始化阶段、加密阶段、信任计算、密钥生成阶段和解密阶段五个阶段。 1) 初始化阶段 S e t u p ( λ ) → ( P K ， M S K ) ：初始化算法由AA执行，以安全参数λ作为输入，输出系统公钥PK和主密钥MSK。 选取两个阶为p的乘法群，设g为G S 群的一个随机生成元，让 ρ : G S × G S → G T 表示双线性映射，并定义公开映射 H : { 0 ， 1 } → G T 。AA随机选择 α ， β ∈ Z p ，生成系统公钥PK和主密钥MSK： P K = ( G S ， g ， h = g β ， f = g 1 / β ， e ( g ， g ) α ) (1) M S K = ( β ， g α ) (2) 2) 加密阶段 E n c r p t ( P K ， M ， T ) → C T ：加密算法由DO执行，以系统公钥PK、明文M和访问树T作为输入，输出密文CT。 设R为访问树T的根节点，首先从根节点R开始，自上而下为访问树T的每个节点x (包括叶子节点)选择一个多项式 q x ，针对多项式 q x 定义阶数 d x 和门限值 k x 的关系为 d x = k x − 1 。随机选择根节点R的多 项式 q R 中的常数项 s ∈ Z p ，则有 q R ( 0 ) = s 。计算 C ˜ = M e ( g ， g ) α s ， C = h s 。若 x ≠ R ，对于每个子节点，其常数项的值由函数 q x ( 0 ) = s = q p a r e n t s ( x ) ( i n d e x ( x ) ) 生成，其他 d x 个点同样是随机生成的。对于叶子节点，令Y为访问树T中的所有叶子节点集合，计算每个叶子节点 y ∈ Y 对应的 C y = g q y ( 0 ) ， C ′ y = H ( a t t ( y ) q y ( 0 ) ) 。 计算密文： C T = ( T ， C ˜ = M e ( g ， g ) α s ， C = h s ， ∀ y ∈ Y : C y = g q y ( 0 ) ， C ′ y = H ( a t t ( y ) q y ( 0 ) ) ) (3) 3) 信任计算 AA根据用户所拥有的属性进行信任计算，用户信任值T t 可使用一个三元组 T t = [ C ， I ， D ] 来表示，且 C ， I ， D ∈ [ 0 ， 1 ] 。对每个AA所管理的属性进行分类，即分为正面属性集P A 、负面属性集N A 和中性属性集M A 三类，通过用户所拥有的属性集U A 与每个AA所管理的各类属性的交集分别得到用户各类属性的数量。即正面属性数量n'、负面属性数量m'、中性属性数量l'。具体计算如下： n ′ = | U A ∩ P A | (4) m ′ = | U A ∩ N A | (5) l ′ = | U A ∩ M A | (6) 其中在三元组 T t = [ C ， I ， D ] 表达式中，C、I、D分别表示可信、怀疑、不可信的信任程度。具体计算如下： C = ∑ i = 1 n ′ ω p k ， i + ∑ x = 1 l ′ ω m k ， x 2 ∑ i = 1 n ′ ω p k ， i + ∑ j = 1 m ′ ω n k ， j + ∑ x = 1 l ′ ω m k ， x (7) I = ∑ j = 1 m ′ ω n k ， j + ∑ x = 1 l ′ ω m k ， x 2 ∑ i = 1 n ′ ω p k ， i + ∑ j = 1 m ′ ω n k ， j + ∑ x = 1 l ′ ω m k ， x (8) D = ∑ x = 1 l ′ ω m k ， x ∑ i = 1 n ′ ω p k ， i + ∑ j = 1 m ′ ω n k ， j + ∑ x = 1 l ′ ω m k ， x (9) 其中 ω p k ， i 、 ω n k ， j 、 ω m k ， x 分别表示每个AA管理的每个正面属性、负面属性以及中性属性的初始权重，满足 ω p k ， i ， ω n k ， j ， ω m k ， x ∈ [ 0 ， 1 ] 。 由于信任具有时间相关性，不仅依赖于当前时刻计算的信任值，还要考虑之前某个特定时刻由AA计算的信任值。假设当前时刻的信任值为 T t = [ C ， I ， D ] t ，t x 时刻的信任值为 T t x = [ C ， I ， D ] t x ，故用户信任值计算如下： T t = ϖ × [ C ， I ， D ] t + ( 1 − ϖ ) × [ C ， I ， D ] t x (10) 其中 ϖ 表示权重因子，且满足 ϖ ∈ [ 0 ， 1 ] 。 4) 密钥生成阶段 AA根据步骤(3)中计算的信任值对用户进行身份认证，若信任值 T t = [ C ， I ， D ] 中的C、I、D满足 C ≥ 1 2 & I < 1 2 & D < 1 2 ，则为可信用户，执行以下算法。否则，不执行。 K e y G e n ( U i d ， P K ， S ， φ ) → ( U G S K ， A A _ K e y ) ：密钥生成算法由AA执行，以全局身份标识U id 、系统公钥PK、用户属性集S和秘密值φ作为输入，输出用户的全局密钥UGSK和属性密钥AA_Key。 用户列表UL用来记录每一个可信用户，对于每一个需要注册的合法用户U，AA为其分配一个全局身份标识U id ，其中 U i d ∈ U L = { 1 ， 2 ， ⋯ ， n } ，对于每一个 U i d ，随机选择 α ， β ， r ， γ ∈ Z p ，生成用户的全局密钥UGSK以及秘密值 φ ： U G S K = ( g ( α + r ) / β ， g γ ) (11) φ = g ( r + γ ) (12) N个属性授权机构 A A i ( i ∈ N ) 选择生成的秘密值φ，并对所管理的属性 j ∈ S ，随机选择一个数 r j ∈ Z p ，生成用户的属性密钥AA_Key： A A _ k e y = ( ∀ i ∈ N ， { A A i _ k e y } ) = ( ∀ j ∈ S : D j = g ( r + γ ) H ( j ) r j ， T j = g r j ) (13) 并通过安全信道发送给PS存储，AA_Key用于PS执行部分解密操作，以减少用户的存储开销与计算开销。而用户密钥SK由全局密钥UGSK和属性密钥AA_Key组成。 S K = ( U G S K ， A A _ k e y ) = ( ( g ( α + r ) / β ， g γ ) ， ( ∀ i ∈ N ， { A A i _ k e y } ) ) = ( ( g ( α + r ) / β ， g γ ) ， ( ∀ j ∈ S : D j = g ( r + γ ) H ( j ) r j ， T j = g r j ) ) (14) 5) 解密阶段 ① 外包解密 D e c r y p t _ o u t s o u r c e ( P K ， A A _ K e y ， C T ) → P C T 或⊥：外包解密算法由PS执行，以系统公钥PK、属性密钥AA_Key、密文CT作为输入，输出部分解密密文PCT。 为降低用户的开销，当DU想要访问数据时，向PS请求部分解密，PS从CS中接收密文CT和用户列表UL对用户进行认证。若用户 U i d ∈ U L ，PS使用存储的属性密钥AA_Key执行外包解密计算，承担大量的解密运算，并将部分解密密文PCT发送给DU。否则，返回⊥。具体步骤如下： D e c r y p t N o d e ( C T ， A A _ K e y ， x ) 为定义的递归函数运算，令 i = a t t r ( x ) ，若节点x是访问树T的叶子节点且 i ∈ S ，计算如下： D e c r y p t N o d e ( C T ， A A _ K e y ， x ) = e ( D i ， C x ) e ( T i ， C ′ i ) = e ( g ( r + γ ) × H ( i ) r i ， h q x ( 0 ) ) e ( g r i ， H ( i ) q x ( 0 ) ) = e ( g ， g ) ( r + γ ) q x ( 0 ) (15) 如果 i ∉ S ，则有： D e c r y p t N o d e ( C T ， A A _ K e y ， x ) =   ⊥ 。当节点x是访问树T的非叶子节点，则对x的所有子节点z调用递归函数 D e c r y p t N o d e ( C T ， A A _ K e y ， x ) ，其函数输出值集合为F z ，令子节点z中的所有k x 大小的集合为S x ，当且仅当 F z ≠   ⊥ 时，计算如下： F x = ∏ z ∈ S x F z Δ i ， S ′ x ( 0 ) = ∏ z ∈ S x ( e ( g ， g ) ( r + γ ) q z ( 0 ) ) Δ i ， S ′ x ( 0 ) = ∏ z ∈ S x ( e ( g ， g ) ( r + γ ) q p a r e n t ( z ) ( i n d e x ( z ) ) ) Δ i ， S ′ x ( 0 ) = ∏ z ∈ S x ( e ( g ， g ) ( r + γ ) q x ( i ) ) Δ i ， S ′ x ( 0 ) = e ( g ， g ) ( r + γ ) q x ( 0 ) (16) 其中 i = i n d e x ( z ) ， S ′ x = { i n d e x ( z ) : z ∈ S x } 。 若属性集合S满足访问树T，PS执行部分解密操作并将部分解密密文PCT发送给DU。计算部分解密密文： A = P C T = D e c r y p t N o d e ( C T ， A A _ K e y ， R ) = e ( g ， g ) ( r + γ ) q R ( 0 ) = e ( g ， g ) ( r + γ ) s (17) ② 用户解密 D e c r y p t _ u s e r ( P K ， P C T ， U G S K ) → M ：用户解密算法由DU执行，以系统公钥PK和部分解密密文PCT，全局密钥UGSK为输入，输出明文数据M。计算明文： B = g ( α + r ) / β × g γ = g ( α + r ) / β + γ (18) C ˜ / ( e ( C ， B ) / A ) = C ˜ / ( e ( h s ， g ( α + r ) / β + γ ) ) / e ( g ， g ) ( r + γ ) s = M e ( g ， g ) α s / ( e ( g β s ， g ( α + r ) / β + γ ) ) / e ( g ， g ) ( r + γ ) s = M (19)