In this section, we present the result of our study including security and performance analysis with corresponding discussion.
Security analysis
Traceability of TR-TABE
In this part, we show the reduction of the traceability of our TR-TABE scheme to l-SDH assumption.
Theorem 1
Our TR-TABE scheme is traceable if l-SDH assumption holds and the number of queries \(q < l\).
Proof
If there exists a PPT adversary \({\mathcal {A}}\) that can break the traceability game with non-negligible advantage \(\varepsilon\) after q queries, then we can construct a challenger \({\mathcal {C}}\) that have the ability to solve the l-SDH problem with advantage \(\varepsilon /2\) assuming \(l = q + 1\). We also suppose \(G_0, G_1\) are two bilinear groups of prime order p with a bilinear map \({\hat{e}}: G_0 \times G_0 \rightarrow G_1\) and a generator \(h \in G_0\). After receiving a l-SDH problem input \(({\hat{g}}, {\hat{g}}^{a}, {\hat{g}}^{a^2}, \ldots , {\hat{g}}^{a^l})\), \({\mathcal {C}}\) sets \(T_i = {\hat{g}}^{a^i}\) where \(i \in \{0, \ldots , l\}\) and intends to output \((c_t, w_t = {\hat{g}}^{1/(a + c_0)})\). \({\mathcal {C}}\) creates the following simulation in utilizing \({\mathcal {A}}\) to break the scheme by solving the l-SDH problem. \(\square\)
Init. \({\mathcal {C}}\) runs Setup to initiate the whole system and randomly selects q numbers \(c_1, c_2, \ldots , c_q \in Z_p\) and \(\alpha , \gamma \in _R Z_p, \{\eta _i\}_{i \in [d]} \in _R G_0\). Suppose a polynomial \(q(x) = \prod _{i=1}^{q} (x + c_i) = \sum _{i=0}^{q} \zeta _i x^i\), where \(\zeta _0, \ldots , \zeta _q \in Z_p\). \({\mathcal {C}}\) sets \(g = \prod \nolimits _{i=0}^{q} (T_i)^{\zeta _i} = {\hat{g}}^{q(a)}\) and \(g^a = \prod \nolimits _{i=1}^{q+1} (T_i)^{\zeta _{i-1}} = {\hat{g}}^{q(a) \cdot a}\). \({\mathcal {C}}\) publishes system public key \({\mathrm{PK}}=\{G_0, G_1, {\hat{e}}, g, g^a, {\hat{e}}(g,g)^{\alpha }, \eta _1, \ldots , \eta _d, h = g^{\gamma }\}\).
Key query. \({\mathcal {A}}\) submits \(({\mathrm{ID}}_i, S_i)\) to \({\mathcal {C}}\) for the corresponding decryption key \({\mathrm{DK}}_{{\mathrm{ID}},t}\) at time point t. For the ith query that \(i \le q\), suppose \(q_i(x) = q(x)/(x + c_i) = \prod \nolimits _{j=1, j \ne i}^{q} (x+c_j) = \sum _{j=0}^{q-1} \zeta _j x^j\). \({\mathcal {C}}\) computes \(\tau _i = \prod \nolimits _{j=0}^{q} (T_j)^{\zeta _j}\) = \({\hat{g}}^{q_i(a)} = {\hat{g}}^{q(a)/(a+c_i)} = g^{1/(a+c_i)}\). \({\mathcal {C}}\) randomly chooses \(r_{\delta }, r_{{\mathrm{ID}}_i}, \beta _{\delta } \in Z_p\), \(\{r_y\}_{{\mathrm{att}}_y \in S_i} \in Z_p\) then computes the decryption key by simulating AKeyGen, UKeyGen and DKeyGen,
$$\begin{aligned} \begin{aligned} K_{{\mathrm{ID}}_i}&= c_i, {\mathrm{dk}}_{{\mathrm{ID}}_i,0} = g^{r_{\delta }}, {\mathrm{dk}}_{{\mathrm{ID}}_i,1} = g^{\beta _{\delta }}, {\mathrm{dk}}_{{\mathrm{ID}}_i,2} = g^{a r_{\delta }} H(t)^{\beta _{\delta }}, {\mathrm{dk}}_{{\mathrm{ID}}_i,3} = g^{\frac{\alpha + r_{{\mathrm{ID}}_i}}{a + c_i}} g^{r_{\delta }} \\ \{{\mathrm{dk}}_{{\mathrm{ID}},y,1}&= g^{r_{{\mathrm{ID}}_i}} H_1({\mathrm{att}}_y)^{r_y}, {\mathrm{dk}}_{{\mathrm{ID}}_i,y,2} = g^{r_y}, {\mathrm{dk}}_{{\mathrm{ID}}_i,y,3} = g^{{\mathrm{ar}}_y}\}_{{\mathrm{att}}_y \in S_i} \end{aligned} \end{aligned}$$
Finally, \({\mathcal {C}}\) outputs \({\mathrm{DK}}_{{\mathrm{ID}}_i,t} = \{S_i, K_{{\mathrm{ID}}_i}, {\mathrm{dk}}_{{\mathrm{ID}}_i,0}, {\mathrm{dk}}_{{\mathrm{ID}}_i,1}, {\mathrm{dk}}_{{\mathrm{ID}}_i,2}, {\mathrm{dk}}_{{\mathrm{ID}}_i,3}, \{{\mathrm{dk}}_{{\mathrm{ID}}_i,y,1}, {\mathrm{dk}}_{{\mathrm{ID}}_i,y,2}, {\mathrm{dk}}_{{\mathrm{ID}}_i,y,3}\}_{{\mathrm{att}}_y \in S_i}\}\) to \({\mathcal {A}}\).
Key Forgery. \({\mathcal {A}}\) submits a decryption key \({\mathrm{DK}}_{{\mathrm{ID}}_i,t}^*\) to \({\mathcal {C}}\). Suppose an event that \({\mathcal {A}}\) breaks the game is denoted by \(E_{{\mathcal {A}}}\) in which \({\mathrm{DK}}_{{\mathrm{ID}}_i,t}^*\) can pass Key Sanity Check of Eqs. 1, 2, 3 and \(K_{{\mathrm{ID}}_i} \notin \{c_1, \ldots , c_q\}\). In case that \(E_{{\mathcal {A}}}\) does not happen, \({\mathcal {C}}\) randomly chooses \((c_{{\hat{t}}}, w_{{\hat{t}}}) \in Z_p \times G_0\) as a response to l-SDH problem. Otherwise, \({\mathcal {C}}\) represents \(q(x) = \vartheta (x)(x + K_{{\mathrm{ID}}_i}) + \vartheta -1\), where \(\vartheta (x) = \sum _{i=0}^{q-1}\vartheta _i x^i\) and \(\vartheta - 1 \ne 0\). Thus, \(q(x) \text { mod } (x + K_{{\mathrm{ID}}_i}) \ne 0\) as \(q(x) = \prod \nolimits _{i=1}^{q}(x + c_i)\) and \(K_{{\mathrm{ID}}_i} \notin \{c_1, \ldots c_q\}\). Then, \({\mathcal {C}}\) can calculate \(1/(\vartheta -1)\) as \({\mathrm{gcd}}(\vartheta -1,p)=1\). It also computes \(\tau = (\frac{{\mathrm{dk}}_{{\mathrm{ID}}_i,3}}{{\mathrm{dk}}_{{\mathrm{ID}}_i,1}})^{(\alpha + r_{{\mathrm{ID}}_i})^{-1}} = g^{\frac{1}{a+K_{{\mathrm{ID}}_i}}} = {\hat{g}}^{\frac{q(a)}{a+K_{{\mathrm{ID}}_i}}} = {\hat{g}}^{\vartheta (a)}{\hat{g}}^{\frac{\vartheta - 1}{a+K_{{\mathrm{ID}}_i}}}, w_{{\hat{t}}} = (\tau \prod \nolimits _{i=0}^{q-1} T_i^{-\vartheta _i})^{\frac{1}{\vartheta - 1}} = {\hat{g}}^{\frac{1}{a+K_{{\mathrm{ID}}_i}}}, c_{{\hat{t}}} = K_{{\mathrm{ID}}_i} (\text {mod } p)\). Then, \({\hat{e}}({\hat{g}}^{c_{{\hat{t}}}} \cdot {\hat{g}}^{w_{{\hat{t}}}}, {\hat{g}}^{\frac{1}{a+K_{{\mathrm{ID}}_i}}}) = {\hat{e}}({\hat{g}}, {\hat{g}})\) and \((c_{{\hat{t}}}, w_{{\hat{t}}})\) is a solution for l-SDH problem.
Suppose another event \(E_{{\mathrm{SDH}}}(c_t, w_t)\) that \((c_t, w_t)\) can solve l-SDH problem which satisfies \({\hat{e}}({\hat{g}}^{c_{t}} \cdot {\hat{g}}^{w_{t}}, {\hat{g}}^{\frac{1}{a+K_{{\mathrm{ID}}_i}}}) = {\hat{e}}({\hat{g}}, {\hat{g}})\). The event \(E_{{\mathrm{SDH}}}(c_t, w_t)\) happens if and only if \(E_{{\mathcal {A}}}\) happens and \({\mathrm{gcd}}(\vartheta -1,p)=1\) given \((c_t, w_t)\) from \({\mathcal {C}}\). Therefore, the probability that \({\mathcal {C}}\) solves l-SDH problem is
$$\begin{aligned} \begin{aligned} {\mathrm{Pr}}[E_{{\mathrm{SDH}}}(c_t, w_t)]&= {\mathrm{Pr}}[E_{{\mathrm{SDH}}}(c_t, w_t)|\overline{E_{{\mathcal {A}}}}] \cdot {\mathrm{Pr}}[\overline{E_{{\mathcal {A}}}}] \\&\quad + {\mathrm{Pr}}[E_{{\mathrm{SDH}}}(c_t, w_t)|E_{{\mathcal {A}}} \wedge {\mathrm{gcd}}(\vartheta -1,p)\ne 1] \cdot {\mathrm{Pr}}[E_{{\mathcal {A}}} \wedge {\mathrm{gcd}}(\vartheta -1,p)\ne 1] \\&\quad + {\mathrm{Pr}}[E_{{\mathrm{SDH}}}(c_t, w_t)|E_{{\mathcal {A}}} \wedge {\mathrm{gcd}}(\vartheta -1,p)= 1] \cdot {\mathrm{Pr}}[E_{{\mathcal {A}}} \wedge {\mathrm{gcd}}(\vartheta -1,p)= 1] \\&= 0 + 0 + 1 \cdot {\mathrm{Pr}}[E_{{\mathcal {A}}} \wedge {\mathrm{gcd}}(\vartheta -1,p)= 1] \\&= {\mathrm{Pr}}[E_{{\mathcal {A}}} \wedge {\mathrm{gcd}}(\vartheta -1,p)= 1] \\&= {\mathrm{Pr}}[E_{{\mathcal {A}}}] \cdot {\mathrm{Pr}}[{\mathrm{gcd}}(\vartheta -1,p)= 1] = {\mathrm{Pr}}[E_{{\mathcal {A}}}] \end{aligned} \end{aligned}$$
As the probability of \(E_{{\mathrm{SDH}}}(c_t, w_t)\) with random \((c_t, w_t)\) is negligible, we set it as zero in our computation.
In conclusion, if \({\mathcal {A}}\) can break our scheme with non-negligible advantage, then \({\mathcal {C}}\) can solve l-SDH problem with same advantage, which is inconsistent with l-SDH assumption. Therefore, our scheme is traceable.
IND-CPA security of TR-TABE
Theorem 2
No PPT adversaries can selectively win the security game of our scheme with an advantage that is non-negligible on condition the DBDH assumption holds.
Proof
When the advantage \(\varsigma\) of adversary \({\mathscr {A}}\) is non-negligible when he selectively break the security game against our scheme, we can create a simulator \({\mathscr {B}}\) who is able to distinguish a DBDH parameter from a random parameter with an identical advantage to that of \({\mathcal {A}}\). \(\square\)
Init: The simulator \({\mathscr {B}}\) of DBDH game creates the bilinear group \(\{G_0, G_1, {\hat{e}}, p, g\}\), where \({\hat{e}}: G_0 \times G_0 \rightarrow G_1\) and \(g \in G_0\). It than selects random \(c,d,m,\nu \in Z_p\) and \(\varepsilon \in [0,1]\). If \(\varepsilon =0\), the challenger \({\mathscr {B}}\) generates a tuple \((C,D,M,V)=(g^c, g^d, g^m, {\hat{e}}(g,g)^{{\mathrm{cdm}}})\); otherwise, it generates \((g^c, g^d, g^m, {\hat{e}}(g,g)^{\nu })\). \({\mathscr {B}}\) then sends the tuple to \({\mathscr {C}}\). In the meantime, the adversary \({\mathscr {A}}\) submits a selected challenging access policy tree \({\mathcal {T}}_a^*\), a time period \(t^* \in F_T\) and a revocation list \({\mathrm{RL}}_u^*\) which contains revoked users before the time period to challenger \({\mathscr {C}}\) of our scheme.
Setup: After the challenger \({\mathscr {C}}\) gets the DBDH tuple (C, D, M, V) and bilinear group from \({\mathscr {B}}\) as well as the security parameters \(N_u, \lambda , d\), it computes \(N_t = 2^d\) as the total number of time periods and randomly chooses \(\alpha ^{'}, \gamma \in Z_p\), sets \({\hat{e}}(g,g)^{\alpha } = {\hat{e}}(g,g)^{\alpha ^{'}} {\hat{e}}(g,g)^{cd}\). and hash functions \(H_0, H_1, H_2, H_3\). Then, for Type-A attack, \({\mathscr {C}}\) computes \(\delta = g^{\gamma }\) and for Type-B attack, it simulates \(\delta = D\). \({\mathscr {C}}\) also simulates \(H_1(x) = g^{q_x}\), where \(q_x \in Z_p\). Finally, \({\mathscr {C}}\) generates system public parameters \({\mathrm{PK}}=\{G_0,G_1,p, g, g^{a}, {\hat{e}}, {\hat{e}}(g,g)^{\alpha }, \eta _1, \ldots , \eta _d, h = g^{\gamma }\}\) and the master key \({\mathrm{MSK}} = \{g^{\alpha }, a, \gamma \}\). It keeps the MSK privately and sends the PK to the adversary \({\mathscr {A}}\).
Phase 1: The adversary \({\mathscr {A}}\) submits a series queries \(q_i\) for secret key and transformation key as follows:
-
SK Query: \({\mathscr {C}}\) generates secret attribute key given the attribute set S in \({\mathscr {A}}\)’s requests. It first sets random \(\mu _{\delta }^{'} \in G_0\) for each node \(\delta \in \mathcal {BT}\).
-
Type-A adversary: \({\mathcal {T}}_a^{*}(S) \ne 1\). To generate the secret attribute key, \({\mathscr {C}}\) chooses an empty leaf node \(\theta \in \mathcal {BT}\) randomly if the identity ID is not assigned. It picks random numbers \(r_{\delta }, c^{'}, r^{'} \in Z_p\) and sets \(r_{{\mathrm{ID}}} = r^{'} - c\).
$$\begin{aligned} \begin{aligned} K_{{\mathrm{ID}}}&= c^{'}, {\mathrm{sk}}_{\delta , 0} = g^{r_{\delta }}, {\mathrm{sk}}_{\delta , 1} = \mu _{\delta }^{'} \cdot g^{{\mathrm{ar}}_{\delta }}, {\mathrm{sk}}_{\delta , 2} = g^{\frac{\alpha + r^{'} - c}{a + c^{'}}} g^{r_{\delta }}, \\&\{{\mathrm{sk}}_{i,1} = g^{r_{{\mathrm{ID}}}} H_1({\mathrm{att}}_i)^{r_i} = \frac{g^{r^{'}}H_1({\mathrm{att}}_i)^{r_i}}{C}, {\mathrm{sk}}_{i,2} = g^{r_i}, {\mathrm{sk}}_{i,3} = g^{{\mathrm{ar}}_i}\}_{{\mathrm{att}}_i \in S} \end{aligned} \end{aligned}$$
-
Type-B adversary: \({\mathcal {T}}_a^*(S) = 1\) and \({\mathrm{ID}} \in {\mathrm{RL}}_u^*\). Then, ID must have been associated with a leaf node \(\theta \in \mathcal {BT}\) and each node \(\delta \in {\mathrm{Path(ID)}}\) is also assigned. \({\mathscr {C}}\) returns the original secret key to \({\mathscr {A}}\).
-
UK Query: \({\mathscr {C}}\) creates update key on inputting a revocation list \({\mathrm{RL}}_u\) and a time period t. For each node \(\delta \in Y\), \({\mathscr {C}}\) chooses a random number \(\beta _{\delta } \in Z_p\) for each node \(\delta\) and computes: \({\mathrm{UK}}_{\delta ,t} = \{{\mathrm{uk}}_{\delta , t,0} = \mu _{\delta }^{-1} \cdot H(t)^{\beta _{\delta }}, {\mathrm{uk}}_{\delta , t, 1} = g^{{\beta _{\delta }}}\}\)
-
DK Query: \({\mathscr {C}}\) queries this algorithm to generate the final decryption key as follows.
$${\mathrm{dk}}_{{\mathrm{ID}},0} = g^{r_{\delta }}, {\mathrm{dk}}_{{\mathrm{ID}},1} = g^{\beta _{\delta }}, {\mathrm{dk}}_{{\mathrm{ID}},2} = g^{ar_{\delta }} H(t)^{\beta _{\delta }}, {\mathrm{dk}}_{{\mathrm{ID}},3} = g^{\frac{\alpha + r^{'} - c}{a + c^{'}}} g^{r_{\delta }}$$
-
TK Query: Similar to the SK Query, the challenger \({\mathscr {C}}\) runs TKeyGen algorithm to generate transformation key pair and sends them to \({\mathscr {A}}\).
-
RL Query: Given the query of \({\mathscr {A}}\) for user revocation request with identity ID at time period t, \({\mathscr {C}}\) updates the revocation list by adding \(({\mathrm{ID}}, t)\) into revocation list \({\mathrm{RL}}_u\).
Challenge: The adversary \({\mathscr {A}}\) finishes the Phase 1 and submits two data \(B_0\) and \(B_1\) with equal length to \({\mathscr {C}}\). First, \({\mathscr {C}}\) picks \(\epsilon \in _R [0,1]\) and computes \(C_{\sigma ,0} = B_{\epsilon } \cdot {\hat{e}}(g,g)^{\alpha s_{\sigma ,R}^0} = B_{\epsilon } \cdot {\hat{e}}(g,g)^{\alpha m} = B_{\epsilon } \cdot V{\hat{e}}(g,g)^{\alpha ^{'} m}, C_{\sigma ,1} = g^{s_{\sigma ,R}^0} = g^m = M, C_{\sigma ,2} = g^{{\mathrm{as}}_{\sigma ,R}^0} = g^{{\mathrm{am}}} = M^a\).
With respect to the adversary \({\mathscr {A}}\), when \(\varepsilon = 0\), \(V={\hat{e}}(g,g)^{{\mathrm{cdm}}}\) and according to the decryption procedure, the adversary can get \(B_{\epsilon }\) from CT. Nevertheless, when \(\varepsilon =1\), \(V \in G_1\) is a random element. Thus, \({\mathscr {A}}\) cannot get any information about \(m_{\epsilon }\) from CT.
Phase 2: The adversary \({\mathscr {A}}\) repeats the procedures in Phase 1 with the same restriction that the \({\mathrm{ID}} \notin {\mathrm{RL}}\) and the attribute set \({\mathcal {S}}\) in queries do not satisfy T.
Guess: The adversary \({\mathscr {A}}\) outputs the guess of bit \(\epsilon ^{'}\). If \(\epsilon = \epsilon ^{'}\), the challenger \({\mathscr {C}}\) guesses \(V = {\hat{e}}(g,g)^{{\mathrm{cdm}}}\) with his output 0; otherwise, it guesses Z as a random element. If the adversary \({\mathscr {A}}\) has the advantage of \(\varsigma\), then the challenger \({\mathscr {C}}\) can break the DBDH game with advantage \(\frac{\varsigma }{2}\) given that the variables \(\epsilon\) and \(\varepsilon\) are independent. The computation of the advantage for \({\mathscr {C}}\) is the same as in [12].
In conclusion, if an adversary \({\mathscr {A}}\) can win the security game of our scheme with a non-negligible advantage \(\varsigma\), then the challenger \({\mathscr {C}}\) can break the DBDH game with identical advantage. Therefore, our scheme is IND-CPA secure in our security model.
Performance analysis
In this section, we compare our proposal and several existing related work in theoretical analysis and actual performance evaluation. We first present the function comparison of our scheme and various state-of-the-art CP-ABE schemes [6, 12, 21, 46, 48] summarized in Table 1.
Table 1 Function comparison Theoretical analysis
The theoretical analysis of our scheme involves computation and storage complexity. For computation complexity, we let \(|X|, K, N, |{\mathrm{TP}}|,|P|\) denote the size of leaf node set, non-leaf node set, node set of \({\mathcal {N}}_t\), trapdoors set and the length of the path in binary tree \(\mathcal {BT}\) in access policy tree \({\mathcal {T}}_a\). Then, we let \(E_0, M_0\) and \(E_1, M_1\) denote the exponential operation and the multiplication operation in \(G_0\) and \(G_1\), respectively while let P denote the pairing operations. For storage complexity, we let \(|G_0|, |G_1|\) and \(|Z_p|\) denote the length of elements in \(G_0, G_1\) and \(Z_p\), respectively. In Table 2, we compare the TR-TABE with scheme [12] from the aspect of computation cost of Encrypt, Decrypt, KeyGen and storage overhead involving public parameter size (PP Size), decryption key size (DSK Size) and ciphertext size (CT Size). Here, the KeyGen denotes the AKeyGen algorithm in TR-TABE and DSK Size in scheme [12] is the size of user secret key.
Table 2 Theoretical performance comparison Implementation and evaluation
As for the precise performance evaluation for our scheme, we implement it and the related scheme [12] using Java Programming Language and Java Pairing-Based Cryptography library (JPBC) [49] which supports operations of pairing, exponential, addition, multiplication and inversion in finite field and groups. In our implementation, we adopt the Type-A curve with prime order. It is defined over a 160-bit elliptic curve group and a 512-bit finite field. Moreover, our experimental simulations are run on a Windows10 system with Intel Core i5 CPU 2.13 GHz and 8.00-GB RAM.
Figure 4 shows the actual time cost comparison of Encrypt algorithm in different settings. The time cost of encryption in our scheme is affected by the number of leaf nodes, the number of trapdoors in access policy tree \({\mathcal {T}}_a\) and the size of \({\mathcal {N}}_t\) while that of [12] is only affected by the former two. However, we can see from Fig. 4a–d that the time cost difference between the two schemes is increasing with the growth of |N|.
In Fig. 5, we notice that within the same size of user attribute set, the decryption cost in our scheme is smaller and nearly constant when the number of ciphertexts grows, while in scheme [12], it is far more and linear with the growth of the number of ciphertexts. Moreover, from Fig. 5a–d, within the same size of user attribute set, the time cost of decryption for one data file in scheme [12] is far more than that of our scheme, and as the number of ciphertexts grows, the gap gets bigger.
Figure 6 depicts the actual time cost of key generation in the two schemes. From the theoretical analysis, the time cost of key generation in our scheme is affected by the number of attributes of a user and the length of the user path in \(\mathcal {BT}\) of the system, which incurs extra time cost. As Fig. 6a–d shows, when |P| is set as [4, 6, 8, 10], the time cost in our scheme is more than that of scheme [12] and the difference of time cost between the two schemes increases with the growth of |P|. This is consistent with the theoretical analysis of our scheme which incurs the extra cost for key components corresponding to the path for the users in \(\mathcal {BT}\). These extra components are used for user revocation with forward security. As the user secret attribute key is generated by TA just once for each user, the extra cost is also acceptable for DU.
Figure 7 plots the comparison of the size of public parameter, decryption key and ciphertext between the two schemes. Obviously, in Fig. 7a, the size of the system public parameters in our scheme is related to d (Here, we set \(d=6\)) and is larger than that of scheme [12] as we take some extra storage complexity for time function H in our scheme. Moreover, in Fig. 7b, the storage overhead of decryption key in our scheme is nearly none due to outsourced decryption, while that of the scheme [12] is far more and proportional to the size of the user attribute set. From Fig. 7c, d with different settings of |N|, we notice that the ciphertext size in our scheme is more than that of [12] and as |N| grows, the gap becomes bigger.
Table 3 User tracing complexity comparison
In Fig. 8, we present the comparison of the actual time and storage cost in user tracing between our scheme and the scheme [47]. Accordingly, we summarize the theoretical overhead comparison of the two schemes in Table 3. The user tracing algorithm in our scheme eliminates the identity table, which only costs O(1) in computational complexity and no storage overhead, while the scheme [47] costs O(n) in computation complexity for user tracing, where n is the size of identity table, and \(n|Z_N|\) in storage, where N is a composite number. We observe in Fig. 8a and b that the time cost and storage overhead in user tracing of our scheme is nearly none.
In conclusion, although our scheme incurs extra storage overhead for ciphertext, it outperforms existing related schemes in time cost of encryption and decryption as well as user tracing. Moreover, it can support large attribute universe, user traceability and revocability with forward and backward security and time-based data access control. Thus, our scheme is more suitable for data sharing of smart city applications with resource-poor user devices.