Next Article in Journal
A CCA-PKE Secure-Cryptosystem Resilient to Randomness Reset and Secret-Key Leakage
Next Article in Special Issue
A Survey on Group Signatures and Ring Signatures: Traceability vs. Anonymity
Previous Article in Journal
A New Hybrid Automated Security Framework to Cloud Storage System
Previous Article in Special Issue
ES-HAS: ECC-Based Secure Handover Authentication Scheme for Roaming Mobile User in Global Mobility Networks
 
 
Font Type:
Arial Georgia Verdana
Font Size:
Aa Aa Aa
Line Spacing:
Column Width:
Background:
Article

Functional Encryption for Pattern Matching with a Hidden String

Institute of Cybersecurity and Cryptology, School of Computing and Information Technology, University of Wollongong, Wollongong, NSW 2522, Australia
*
Author to whom correspondence should be addressed.
Cryptography 2022, 6(1), 1; https://doi.org/10.3390/cryptography6010001
Submission received: 11 November 2021 / Revised: 22 December 2021 / Accepted: 24 December 2021 / Published: 31 December 2021
(This article belongs to the Special Issue Cryptography: A Cybersecurity Toolkit)

Abstract

:
We propose a new functional encryption for pattern matching scheme with a hidden string. In functional encryption for pattern matching (FEPM), access to a message is controlled by its description and a private key that is used to evaluate the description for decryption. In particular, the description with which the ciphertext is associated is an arbitrary string w and the ciphertext can only be decrypted if its description matches the predicate of a private key which is also a string. Therefore, it provides fine-grained access control through pattern matching alone. Unlike related schemes in the literature, our scheme hides the description that the ciphertext is associated with. In many practical scenarios, the description of the ciphertext cannot be public information as an attacker may abuse the message description to identify the data owner or classify the target ciphertext before decrypting it. Moreover, some data owners may not agree to reveal any ciphertext information since it simply gives greater advantage to the adversary. In this paper, we introduce the first FEPM scheme with a hidden string, such that the adversary cannot get any information about the ciphertext from its description. The security of our scheme is formally analyzed. The proposed scheme provides both confidentiality and anonymity while maintaining its expressiveness. We prove these security properties under the interactive general Diffie–Hellman assumption (i-GDH) and a static assumption introduced in this paper.

1. Introduction

Functional encryption was introduced to provide fine-grained access control for sensitive data. In particular, functional encryption for regular language (FERL) [1] was proposed by Waters et al. In FERL, a private key is associated with Deterministic Finite Automata (DFA) and a ciphertext is associated with a string. Access to an encrypted message is controlled by a descriptive string, such as a sentence or a genetic sequence. If the string associated with the ciphertext is satisfied by the DFA of a private key, the one holding the private key can decrypt the ciphertext. For example, medical data can be encrypted under the genetic sequence of a patient. A doctor who seeks a specific genetic disease can decrypt detailed medical data of patients by matching his private key, which is based on specific genetic sequences, to the genetic sequence that is used as the description of the ciphertext.
Although FERL is versatile, its usage is limited since the ciphertext description is not hidden. In FERL, the description of the ciphertext must be public information. This restricts the usefulness of FERL, particularly when the ciphertext description is also sensitive. For instance, based on the previous example, the genetic sequences of a patient can also be considered to be sensitive information even though the hospital still wants access control based on genetic sequences as it is a good indicator to triage patients. In this scenario, it would be difficult to use FERL as an encryption algorithm. Therefore, hiding the ciphertext description is of interest in public key encryption. Due to this reason, several public key primitives, including anonymous identity based encryption [2,3], function hiding inner production encryption [4,5,6,7,8,9,10], and hidden policy attribute based encryption [11,12,13], have been proposed to hide all information associated with the ciphertext.
In our paper, we provide functional encryption for pattern matching (FEPM) with a hidden string. Like FERL, FEPM can also be used for fine-grained access control over a string. In our proposed scheme, an arbitrary string is used to control access to the ciphertext. Therefore, it maintains the fine-grained access control that FERL provides. The difference between FERL and FEPM is that a private key is associated with a string, which is the predicate. In particular, the string used to describe a ciphertext is hidden. Hence, it is useful in the more restrictive scenario where the description of the ciphertext is also sensitive.
We propose a new FEPM scheme with a hidden string. Prior to our work, there is no functional encryption scheme that uses a hidden string (natural language) for access control of a ciphertext. Therefore, our scheme makes the following contributions to existing work:
  • Our scheme is fully expressive such that it supports any string that describes the ciphertext. In our scheme, another string is used as a predicate, which is associated with a private key. This enables us to select any language, from binary to alphabet letters, for the description and the predicate. For example, we can use a binary string of which characters are simply 0 and 1, and also a string which consists of English alphabets A–Z. Moreover, the predicate can consist of wildcard letters to increase the flexibility of pattern matching.
  • In our scheme, the size of the ciphertext only increases linearly with the size of the description, which is an arbitrary string that a ciphertext is associated with. Therefore, it can support a long description, such as a sentence or genetic sequences. Moreover, our scheme does not use Deterministic Finite Automata (DFA) for a private key. Instead, a private key is also associated with a string. Therefore, it does not require evaluation of the description from beginning to end. This may significantly reduce the evaluation time for decryption if the location where two strings, a predicate and a description, match are given.
  • We provide formal security proofs of our scheme. In particular, we show that both confidentiality and anonymity of the encrypted message and of a hidden string property hold by providing formal security proofs in our security analysis.
We organize the rest of the paper as follows: We provide important related work in Section 2. We explain the essential preliminary knowledge needed to understand our proposed scheme in Section 3. In Section 4, we introduce a pattern matching system which our work is motivated from. In Section 5, we introduce our FEPM scheme. We prove its security in Section 6 and we conclude our paper in Section 7.

2. Related Work

Functional encryption for regular language (FERL) was introduced by Waters et al. [1]. In the FERL proposed by Waters et al., a private key is associated with Deterministic Finite Automata (DFA) and its ciphertext is associated with a string. If the string in the ciphertext is expressed by DFA of a private key, the key owner can decrypt the message encrypted in the ciphertext. More recently, Attrapadung introduced an adaptively secure FERL [14] using dual system encryption [15]. Although both schemes are quite flexible as access to the encrypted message is controlled by DFA, which can evaluate a regular language and ciphertext associated with a string, there is no scheme for hiding the string that is the description of the ciphertext.
Hidden policy attribute based encryption (ABE) [4,5,6,7,8,9,10] was introduced to hide an access policy controlling the access to the encrypted message. Those schemes also hide the description, which is an access policy for the ciphertext. In particular, in a Ciphertext Policy ABE (CP-ABE) scheme, the description consists of attributes that must be well defined. For example, the ciphertext can be associated with two attributes “Computer” AND “Science”. A private key must also have exactly the same attributes to match them for decryption. If the private key is based on “Compute” (without r) or “Sci”, it cannot be used to decrypt the ciphertext. Similarly, function hiding inner product encryption [11,12,13] was introduced for hiding the description associated with a ciphertext for inner product encryption.
A searchable encryption with shiftable trapdoor scheme was proposed by Desmoulins et al. [16] as a pattern matching system over encrypted data. The proposed scheme uses a shiftable trapdoor and matches any string to the encrypted data. Therefore, its search method is as flexible as that of our functional encryption for pattern matching (FEPM). More recently, Bkakria et al. [17] proposed a system that improves both efficiency and security. This achieves an anonymous trapdoor such that a string corresponding to a trapdoor is hidden. It also significantly improves the computation for matching keywords. Moreover, Kim et al. [18] showed that its efficiency can be further improved.
Middlebox searchable encryption [19,20,21,22] can also be used to detect a keyword from encrypted data. In particular, the schemes from [19,20,21] allow the proposed systems to match a pattern to the encrypted traffic using only AES encryption, which is fast, and show good matching performance. However, those schemes need to tokenize a message before encrypting it. This significantly increases the size of the ciphertext and prevents flexible search compared to a pattern matching system and FEPM.
Pattern matching systems and middlebox searchable encryption only have a matching algorithm and do not have a decryption algorithm. Therefore, they can only be used for matching keywords to data. In the case of a pattern matching system, decryption can be performed by giving tokens for all alphabet letters. However, it cannot be used for access control as it only detects keywords or decrypts the entire data. Sophisticated access control that provides functional encryption cannot be implemented in those schemes. We compare FEPM to other encryption primitives in Table 1.

3. Preliminaries

We introduce important preliminaries that are needed to understand functional encryption for pattern matching (FEPM).

3.1. Bilinear Pairing

Let set G be a group generator that takes a security parameter λ as input and outputs a description of a bilinear group (p, G 1 , G 2 , G T , e) where p is a prime. G 1 , G 2 and G T are cyclic groups of order p, and e : G 1 × G 2 G T is an efficiently computable non-degenerate bilinear map. We assume that the group operations in G 1 , G 2 and G T as well as the bilinear map e are efficiently computable in polynomial time with respect to λ , and that the group descriptions of G 1 , G 2 and G T include generators of the respective cyclic groups. We call e an asymmetric pairing if G 1 G 2 and no efficiently computable homomorphism exists between G 1 and G 2 , in either direction.
We use the interactive General Diffie–Hellman (i-GDH) assumption [16] to prove our security, which is defined as follows:
Assumption 1.
(i-GDH Assumption) [16]. Let r, s, t, c and k be five positive integers and R F p [ X 1 ; ; X c ] r , S F p [ X 1 ; ; X c ] s , and T F p [ X 1 ; ; X c ] t be three tuples of multivariate polynomials over F p .
Let O R (resp. O S and O T ) be oracles that on input { { a i 1 , , i c ( k ) } i j = 0 d k } k add polynomials { i 1 , , i c a i 1 , , i c ( k ) j X j i j } k toR(resp.SandT).
Let ( x 1 , , x c ) be a secret vector and q R (resp. q S ) (resp. q T ) be the number of queries to O R (resp. O S ) (resp. O T ). The i-GDH assumption states that given the values { g R ( i ) ( x 1 , , x c ) } i = 1 r + k · q R , { g ˜ S ( i ) ( x 1 , , x c ) } i = 1 s + k · q S and { e ( g , g ˜ ) T ( i ) ( x 1 , , x c ) } i = 1 t + k · q T , it is hard to decide whether U = g f ( x 1 , , x c ) or U is random if f is independent of < R , S , T > .
Assumption 2.
Let g and h be random generators of G 1 and G 2 and u, v, c and d 1 , d n be selected randomly from Z p * and T is a random element from G T . We define
D 0 = ( g , h , g u , h c , { g d i , h d i , h v + c · d i } i = 0 n , e ( g , h ) b , e ( g , h ) u v )
D 1 = ( g , h , g u , h c , { g d i , h d i , h v + c · d i } i = 0 n , e ( g , h ) b , T )
Then, there is no PPT algorithm B that can distinguish D 0 from D 1 with non-negligible advantage. We denote the advantage of B as
A d v B A 2 = | Pr [ B ( D 0 = 0 ) ] Pr [ B ( D 1 = 0 ) ] | .
Lemma 1.
D 0 and D 1 in Assumption 2 are indistinguishable in a generic group model.
Proof. 
The proof of Lemma 1 is straightforward because the only difference between D 0 and D 1 is whether T is a random element or e ( g , h ) u v . Therefore, we can only distinguish D 1 and D 2 by testing the value of T, Because exponents u and v only appear in g u and h v + c · d i , T can only be tested by their pairing results, which are e ( g , h ) u v + u · c · d i . However, the computation of e ( g , h ) u · c · d i cannot be computed from the given instances as there is no monomial that has two of those three exponents, either u · c , u · d i or c · d i . Due to this fact, the adversary cannot use e ( g , h ) u v + u · c · d i to distinguish e ( g , h ) u v from T. □

3.2. Definitions

FEPM is defined by four algorithms that we call Setup, Keygen, Encrypt and Decrypt as follows:
  • Setup ( 1 λ , n, S ) ( p p , m s k ) : This algorithm takes as inputs a security parameter k and an integer n defining the maximum size of a string (i.e., a pattern) that one can use as a description associated with a ciphertext. It also takes a finite set S , which is a set of alphabet letters for the description, as input. It sets a master secret key m s k and publishes public parameters p p .
  • KeyGen ( W , m s k ) s k W : This algorithm takes as inputs a string W of any size 0 < W n , along with the master secret key, and returns a private key s k W .
  • Encrypt ( M , S , p p ) C T : This algorithm takes as inputs a message M and the public parameters p p along with a string S = s 0 s m 1 where m n , such that s i S for all i [ 0 , m 1 ] , and returns a ciphertext C T which encrypts M.
  • Decrypt ( C T , s k W ) M : This deterministic algorithm takes as inputs a ciphertext C T associating to a string S = s 0 s m 1 of size m, along with the private key s k W for a string W = w 0 w W 1 of size W . If W > m , then the algorithm returns ⊥. Otherwise, the algorithm decrypts a ciphertext C T and return M.
Correctness Property. For correctness, the following property must be satisfied:
  • Let ( p p , m s k ) Setup ( 1 k , S , n ) . For a string W = w 0 w W 1 of any size less than or equal to n (i.e., W n ), s k W KeyGEn ( W , m s k ) will be returned as a private key. For a string S = s 0 s m 1 , a ciphertext C T Encrypt ( M , S , p p ) is returned. For a ciphertext C T and a private s k W , M Decrypt ( C T , t d W ) will be returned if there exists an index j such that s j s j + W 1 = w 0 w W 1 .

3.3. Security Models

Our proposed FEPM scheme pursues both confidentiality of message (i.e., confidentiality) and hidden predicate (i.e., anonymity). These security properties can be proved by using two different security models. We use sIND-CPA and sANON-CPA, which are defined in this section, to prove confidentiality and anonymity, respectively.

3.3.1. IND-CPA

We first define the indistinguishable chosen plaintext security (IND-CPA) for our FEPM. IND-CPA of FEPM is defined by an experiment Exp A 1 IND - CPA - β ( 1 λ , ) where β { 0 , 1 } defined as follows:
  • Setup: The challenger runs Setup( 1 λ , n, S ) to obtain a public parameter p p . It gives A 1 the public parameter pp.
  • Phase I: The adversary A 1 queries private keys s k W 1 , , s k W q 1 for strings W 1 , , W q 1 .
  • Challenge: If Phase I is over, A 1 outputs messages M 0 and M 1 with a string S = s 0 s m 1 with the restriction that there is no private key queried in Phase I to be matched with S. More formally, the challenger outputs ⊥ if W = w 0 w W 1 { W 1 , , W q 1 } and i { 0 , , m w } such that
    s i s i + W 1 = w 0 w W 1 .
    The challenger randomly selects β { 0 , 1 } and runs Encrypt algorithm to obtain C = Encrypt ( M β , S , p p ) and returns C to A 1 .
  • Phase I: The adversary A 1 continues to query private keys s k W q 1 + 1 , , s k W q for strings W q 1 + 1 , , W q under the same restriction that
    s i s i + W 1 w 0 w W 1 .
    for all W = w 0 w W 1 { W q 1 + 1 , , W q } and all i { 0 , , m w } .
  • Guess: Finally, the adversary A 1 outputs a guess β { 0 , 1 } and wins the game if β = β .
We define the advantage of an adversary A 1 as follows:
A d v A 1 IND - CPA ( 1 λ , ) = | Pr [ Exp A 1 IND - CPA - 1 ( 1 λ , ) ] Pr [ Exp A 1 IND - CPA - 0 ( 1 λ , ) ] | .
A functional encryption for pattern matching is IND-CPA secure if this advantage is negligible for any polynomial-time adversary. A weaker notion, which is selective security, sIND-CPA, can be defined with an adversary giving S to the challenger before the challenge gives p p to the adversary in Setup.

3.3.2. ANON-CPA

We also define the ANON-CPA security of the functional encryption for pattern matching, namely FEPM-ANON-CPA security.
FEPM-ANON-CPA is defined by an experiment Exp A 2 ANON - CPA - β ( 1 λ , ) the adversary A 2 where β { 0 , 1 } defined as follows:
  • Setup: The challenger runs Setup( 1 λ , n, S ) to obtain a public parameter p p . It gives A 2 the public parameter pp.
  • Phase I: The adversary A 2 queries private keys s k W 1 , , s k W q 1 for strings W 1 , , W q 1 .
  • Challenge: If Phase I is over, A 2 outputs S 0 = s 0 ( 0 ) s m 1 ( 0 ) and S 1 = s 0 ( 1 ) s m 1 ( 1 ) with the restriction that there is no trivial trapdoors queried in Phase I to distinguish S 0 and S 1 . More formally, the challenger outputs ⊥ if W = w 0 w W 1 { W 1 , , W q } and i , j such that
    s j ( i ) s j + W 1 ( i ) = w 0 w W 1 s j ( i 1 ) s j + W 1 ( i 1 ) .
    The challenger randomly selects β { 0 , 1 } and runs Encrypt algorithm to obtain C = Encrypt ( M , S β , p p ) and returns C to A 2 .
  • Phase II: The adversary A 2 having accesses to the oracle O Issue continue to query private keys s k W q 1 + 1 , , s k W q for strings W 1 , , W q with the same restriction that there is no trivial W { W 1 , , W q } to distinguish M 0 and M 1 was queried in Phase I.
  • Guess: Finally, the adversary A 2 outputs a guess β { 0 , 1 } and wins the game if β = β .
We define the advantage of an adversary A 2 as follows:
A d v A 2 ANON - CPA ( 1 λ , ) = | Pr [ Exp A 2 ANON - CPA - 1 ( 1 λ , ) ] Pr [ Exp A 2 ANON - CPA - 0 ( 1 λ , ) ] | .
A functional encryption for pattern matching is FEPM-ANON-CPA secure if this advantage is negligible for any polynomial-time adversary.
A weaker notion, which is selective security, FEPM-sANON-CPA, can be defined with an adversary giving S 0 and S 1 to the challenger before the challenge gives p p to the adversary in Setup.

4. DFOS’s Pattern Matching System

To introduce our FEPM system, we first give an overview of the pattern matching system proposed by Desmoulines et al. [16]. In short, the pattern matching system encrypts a string by each letter so that one who has a valid token to search for a keyword (or a pattern) in the encrypted data can determine if the encrypted data contains a keyword (or a pattern) that matches the token. In particular, the pattern matching system [16] consists of five algorithms: Setup, KeyGen, Issue, Encrypt and Test as follows:
  • Setup ( 1 λ , n , S ) ( p p , m s k ) : The algorithm takes as input a security parameter λ and the maximum size of the ciphertext n. It selects g R G 1 and h R G 2 and publish p p = ( G 1 , G 2 , G T , e , g , h , n ) .
  • KeyGen ( S ) ( p k , s k ) : It takes as input the set of alphabet letters S . It selects | S | + 1 random values z and { σ s } s S from Z p * and sets g i g z i . It publishes a public key p k = ( { g i , { g i σ s } s S } i = 0 n 1 ) and outputs a secret key s k = ( z , { σ s } s S ) .
  • Issue ( W , s k ) s k W : To create a token sk W for a string W = w 0 w 1 w W 1 of length W ( n ) , the algorithm generates r , r 0 , r 1 , , r W 1 . For i { 0 , , W 1 } , it sets K i = h r i and K = h i = 0 w 1 σ w i · z i · r i . It sets a private key s k W for W as ( { K i } i { 0 , , W 1 } , K ) .
  • Encrypt ( S , p p ) C T : To encrypt a string S = s 0 , , s m 1 , for i { 0 , , m 1 } , the algorithm selects a random value a Z p * and sets C i = g i a and C i = g i a · σ s i . It outputs the ciphertext C T : = ( { C i , C i } i = 0 m 1 ) .
  • Test ( p k , t d W , C T ) J : The algorithm takes as inputs a public key p k , a token t d W , and a ciphertext C T . The algorithm sets J = . For all i { 0 , , m } , it computes D i = e ( C i , K ) and E i = j = 0 W 1 e ( C i + j , K j ) . If D i = E i , it add i to J . Finally, it outputs the set of indexes J .
It should be noted that the above pattern matching system from DFOS is selectively secure. This means that if oracles O P M S ( 0 ) and O P M S ( 1 ) respectively encrypt two strings S 0 and S 1 using the above pattern matching system, O P M S ( 0 ) and O P M S ( 1 ) are indistinguishable for any polynomial time adversary.
Proposition 1.
We let O P M S ( β ) denote an oracle to simulate a description S β for β { 0 , 1 } using the DFOS pattern matching system. Then, O P M S ( 0 ) and O P M S ( 1 ) are indistinguishable if S β is given before the system set-up.
It should be noted that it is straightforward to prove Proposition 1 using the definition of sIND-CPA for the pattern matching system given in [16].

5. Our Construction

In this section, we explain the technique that we used to construct a FEPM scheme. We then provide the construction of our proposed scheme.

5.1. Our Technique

FEPM with a hidden string needs two security proofs: one for confidentiality of the message and the other for anonymity of the ciphertext. Proving both properties in a single encryption system is difficult.
Therefore, we take an idea from a pattern matching system [16,17] which was recently introduced. We observe that a pattern matching system exhibits some similarity to FERL as it evaluates encrypted data using a search token based on alphabet letters. More precisely, the pattern matching system has a trapdoor and a ciphertext, which are associated with a search string and a message, respectively. If a search string matches with a message encrypted in a ciphertext, then, a trapdoor can be used to reveal a location (i.e., an index) where they match in the ciphertext. Thus, it can detect a search string in the message without full decryption of the ciphertext.
However, a pattern matching system is also different from FERL as it does not have a decryption algorithm. As it is designed to only detect a string from the encrypted message, it naturally does not have a decryption algorithm but has a match algorithm. This means that data that does not match the search token will remain encrypted. One of the trivial solutions to decrypt all encrypted data is by giving trapdoors (i.e., search tokens) to all individual alphabet letters. However, this makes detection inefficient as all tokens representing alphabet letters must be matched against each encrypted letter in the ciphertext until one of them matches. Moreover, each letter in a message will be encrypted by multiple group elements to search for a pattern in the whole message. It may not be suitable when a message to be encrypted is long, as several hundred bits are required for each alphabet letter (1 bit for binary or 1 byte for English letter) in the ciphertext. The efficiency of the system will be significantly improved if we can extract some strings, which can be used to control access to a whole message, and use the extracted strings as a description of the ciphertext.
Based on these observations, in our paper, we devise a new functional encryption (FE) scheme that controls access via pattern matching. We consider a message in the pattern match system as a description of a ciphertext in FE. This naturally hides the description of a ciphertext so that it guarantees the anonymity of FERL. Using this idea, we construct FEPM based on one of the simplest pattern matching systems [16] and show that the IND-CPA of the pattern matching system actually implies anonymity, called ANON-CPA, in our proposed FEPM with a hidden string.
Although the hidden string property can be proved relatively easily, proving confidentiality remains demanding. Anonymity in FEPM does not directly imply confidentiality. A ciphertext of FEPM with a hidden string contains two types of information, a description S and a message M, which it aims to hide. Assume that there are two ciphertexts, C 1 and C 2 encrypted under ( S 1 , M 1 ) and ( S 2 , M 2 ), respectively, where S 1 and S 2 are strings to describe ciphertexts and M 1 and M 2 are messages to be encrypted. S 1 and S 2 have the same length as M 1 and M 2 does so that the C 1 and C 2 cannot be trivially distinguished by the difference of their sizes. Anonymity implies that the adversary cannot distinguish between the two ciphertexts C 1 and C 2 if M 1 = M 2 but S 1 S 2 . However, confidentiality requires that the adversary cannot distinguish between C 1 and C 2 if M 1 M 2 , but S 1 = S 2 . Therefore, we need a separate proof for IND-CPA of FEPM. As this proof is not straightforward, we propose a new static assumption, which can be used to prove the security of the proposed FEPM, then show that the security can be reduced to the assumption. We also utilize the strategy that is used to prove anonymity as a part of the confidentiality proof. This implies that we first prove that the adversary cannot distinguish the ciphertext from the original ciphertext even if a string that the ciphertext is associated with is replaced with a random string. We then show that the message of this ciphertext also cannot be distinguished from a ciphertext containing a random message.

5.2. FEPM

In this section, we introduce our FEPM scheme. We use λ and n to denote a security parameter and the maximum size of the description for a ciphertext. It also sets a symmetric encryption Sym := ( Enc sym , Dec sym ) and a oneway function H : G T K where K is a key space of Sym. Our scheme consists of four algorithms, Setup, KeyGen, Encrypt and Decrypt as follows:
  • Setup ( 1 λ , n , S ) ( p p , m s k ) : The algorithm takes as input a security parameter λ , the maximum size of the description n and set of alphabet letters S . It selects g R G 1 and h R G 2 . It selects | S | + 2 random values γ , z and { σ s } s S from Z p * and set g i g z i . It publishes a public parameter:
    p p = ( Enc sym , Dec sym , H 1 , { e ( g i , h ) γ , g i , { g i σ s } s S } i = 0 n 1 )
    and sets a master secret key m s k = ( z , γ , h , { σ s } s S ) .
  • KeyGen ( W , m s k ) s k W : To create a token sk W for a string W = w 0 w 1 w W 1 of length W ( n ) , the algorithm generates r , r 0 , r 1 , , r W 1 . For i { 0 , , W 1 } , it sets K i = h r i and K = h γ + i = 0 w 1 σ w i · z i · r i . It sets the private key s k W for W as ( { K i } i { 0 , , W 1 } , K ) .
  • Encrypt ( M , S , p p ) C T : To encrypt a string S = s 0 , , s m 1 . It selects random value a and b from Z p * and K K . It sets C = Enc sym ( K , M ) . For i { 0 , , m 1 } , the algorithm sets C i = Enc sym ( H ( e ( g i , h ) γ · a ) , K ) , C i = g i a , C i = g i a · σ s i . It outputs the ciphertext C T : = ( C , { C i , C i , C i } i = 0 m 1 ) .
  • Decrypt ( p p , s k W , C T ) M : The algorithm takes as inputs a public parameter p p , a private key s k W , and a ciphertext C T . If W > m , it outputs ⊥. Otherwise, for all i { 0 , , m W } , it computes D i = e ( C i , K ) / j = 0 W 1 e ( C i + j , K j ) . It then outputs M = Dec sym ( Dec sym ( H ( D i ) , C i ) , C ) .
Correctness. 
Let W be a substring of S (i.e., i s.t. s i s i + W 1 = w 0 w W 1 ). First, one can compute D i as follows:
D i = e ( C i , K ) / j = 0 W 1 e ( C i + j , K j ) = e ( g i a , h γ + j = 0 w 1 σ w j · z j · r j ) / j = 0 W 1 e ( g i + j a · σ s i + j , h r j ) = e ( g , h ) a · γ · z i + a · j = 0 w 1 σ w j · z i + j · r j / j = 0 W 1 e ( g , h ) a · σ s i + j · z i + j · r j = e ( g , h ) a · γ · z i · e ( g , h ) a · j = 0 w 1 σ w j · z i + j · r j / e ( g , h ) a · j = 0 W 1 σ s i + j · z i + j · r j = e ( g , h ) a · γ · z i .
The last equality holds as W is a substring of S. Finally, we can compute M as
Dec sym ( Dec sym ( H ( D i ) , C i ) , C ) = Dec sym ( Dec sym ( H ( e ( g , h ) a · γ · z i ) , C i ) , C ) = Dec sym ( K , C ) = M .

6. Security Analysis

We formally prove the security of our proposed FEPM scheme.
Theorem 1.
Our FEPM scheme is FEPM-sANON-CPA secure.
Proof. 
We prove that the selective security sANON-CPA of FEPM using the security of sIND-CPA of DFOS. More formally, we prove the following claim to show the security of our FEPM scheme:
Claim: Suppose that there is a polynomial time algorithm A 1 breaking sANON-CPA of our FEPM with non-negligible advantage ϵ. Then, we can construct a polynomial time algorithm B distinguishing between O P M S ( 0 ) and O P M S ( 1 ) (i.e., breaking sIND-CPA of DFOS’s pattern matching system with advantage ϵ) using A 1 .
Before starting Setup, the challenger provides two strings S ( 0 ) = s 0 ( 0 ) s m 1 ( 0 ) and S ( 1 ) = s 0 ( 1 ) s m 1 ( 1 ) to B . B will also set the oracle O P M S ( β ) by giving S ( 0 ) and S ( 1 ) . B will simulate sANON-CPA with A to distinguish between O P M S ( 0 ) and O P M S ( 1 ) .
Setup: First, the oracle, O P M S ( β ) , will give a public parameter p p and a public key p k to B where p p = ( G 1 , G 2 , G T , e , g , h , n ) and p k = ( { g i , { g i σ s } s S } i = 0 n 1 ) . To simulate the Setup algorithm of FEPM with A , B randomly selects γ from Z p * . It computes { e ( g i , h ) γ } i = 0 n 1 . It returns a public parameters p p = ( { e ( g i , h ) γ , g i , { g i σ s } s S } i = 0 n 1 ) to A 1 .
Phase I and II: When A requests a key for W = w 0 , w W 1 { W 1 , W q } to B , first B check if W is a string that can trivially distinguish S ( 0 ) or S ( 1 ) . It can test it by checking if there exist β { 0 , 1 } and k { 0 , , | S β | W } such that
s k j ( β ) s k j + W 1 ( β ) = w 0 w W 1 s k j ( 1 β ) s k j + W 1 ( 1 β ) .
If β and k exists, it aborts. Otherwise, B also requests a trapdoor t d W = ( { K i } i = 0 W 1 , K ) = ( { h r i } i = 0 W 1 , h i = 0 W 1 σ w i · z i · r i ) to the oracle running the pattern matching system. It sets s k W = ( { K i } i = 0 W 1 , h γ · K ) and returns s k W to A .
Challenge: When the challenger requests a ciphertext to B . B first requests challenge ciphertext to the oracle and receives { g i a , g i a · σ s i ( β ) } . B randomly selects b Z p * , K K and a message M M and sets C = Enc sym ( K , M ) , C i = Enc sym ( H ( e ( g i a , h ) γ ) , K ) , C i = g i a and C i = g i a · σ s i . It sends C T : = ( C , { C i , C i , C i } i = 0 m 1 ) to A .
If β = 0 , then B simulates O P M S ( 0 ) with A 1 . Otherwise, β = 1 , it simulates O P M S ( 1 ) . Because A 1 have non-negligible advantage ϵ to distinguish β , B also can distinguish between O P M S ( 0 ) and O P M S ( 1 ) with non-negligible advantage ϵ . □
Theorem 2.
Our FEPM scheme is FEPM-sIND-CPA secure.
Proof. 
We will prove the selective security of FEPM by defining security games and showing that they are indistinguishable from Exp A sIN D - CPA ( 1 λ , n ) . First, we set Game 0 to be identical to Exp A sIN D - CPA ( 1 λ , n ) . Then, let S = s 0 , , s m 1 denote the description for the challenge ciphertext. For all j { 1 , , m 1 } , we define Game j by switching the first j elements C ( · ) (i.e., C 0 , , C j 1 ) of the challenge ciphertext to random elements of G 1 in Game 0 . This allows us to replace all elements C j for all j { 0 , , m 1 } in the ciphertext on Game m , which is the last game in the proof, to random values. It means that the adversary A only has negligible advantage to distinguish between Game 0 and Game m . Then, we will show that Game m is indistinguishable from the interim final game Game f i n a l , where the keys (in C i ) encrypting the message encryption key (in C) of symmetric encryption in the challenge ciphertext are replaced by random keys. Finally, we will show that this is equivalent to the final game Game f i n a l where the message is replaced by a random message in the proofs. Therefore, the adversary cannot distinguish the message in the challenge ciphertext. □
First, we will show that Game 0 and Game m are indistinguishable in Lemma 2. Lemmas 3 and 4 will show the indistinguishabilities among Game m , Game f i n a l and Game f i n a l .
Lemma 2.
For all j { 0 , , m 1 } , Game ( j ) and Game ( j + 1 ) are indistinguishable.
Proof. 
We will show that Game ( j ) and Game ( j + 1 ) for j { 0 , , m 1 } are indistinguishable using the i-GDH assumption. The parameters of the assumption are initially set as follows: R = { ( z i , x j · z i , a · z i ) } i = 0 , j = 0 2 m 1 , | S | 1 , S = , T = { z i , a · z i } i = 0 2 m 1 and f = a · x 0 · z 2 m 1 .
It should be noted that the simulator receives a string S before generating any parameters so that this will prove selective security of FEPM.
Setup: From the i-GDH assumption, the following parameters are given along with U G 1 :
{ g z i , g x j · z i , g a · z i } i = 0 , j = 0 2 m 1 , | S | 1 and { e ( g , h ) a , ( e ( g , h ) a · z i , e ( g , h ) z i ) i = 0 2 m 1 } .
The algorithm B randomly generates γ from Z p * . It, then, generates the public parameters p p as follows:
  • It sets by first defining g i = g z m + i j * . This results in g j * = g z m .
  • It sets g i σ s j * = g x 0 · z m + i j * and g i σ s = g x f ( s ) · z m + i j * for all s S { s j * } where a function f be a random permutation from s S { s j * } to { 1 , , | S | 1 } (i.e., f : S { s j * } { 1 , , | S | 1 } ).
  • It also sets ( e ( g , h ) z i ) γ .
The above setting allows the simulator to return p p .
Phase I: Upon receiving a query for a private key with a string W = w 0 w 1 { W 1 , , W q } , the simulator checks that the string complies with the restriction where there does not exist j { 0 , , m 1 } such that
s j * j ( β ) s j * j + 1 ( β ) = w 0 w 1 .
It, then, queries the key to O S to receive { ( h r i ) i = 0 1 , h i = 0 w 1 σ w i · z i · r i } . It returns a private key { ( h r i ) i = 0 1 , h γ + i = 0 1 σ w i · z i · r i } .
Challenge: When the challenger gives M 0 and M 1 . Finally, the algorithm B flip a coin to get β { 0 , 1 } and creates the challenge ciphertext as follows:
It selects a random symmetric key K K and sets C = Enc sym ( K , M β ) . For i { 0 , , m 1 } , the algorithm sets C i = Enc sym ( H ( e ( g , h ) z m + i j * · a ) , K ) , C i = g z m + i j * · a . For the first j indexes, C i are set as random values from G 1 . It then uses the O R oracle to get valid C i for all indexes i > j * . It sets C j * as U.
If U = g a · x 0 · z 2 m , then C j * is a valid element and the simulator is simulating Game ( j ) . Otherwise, if C j * is a random value from G 1 , it is simulating Game ( j + 1 ) . This implies that if an adversary A is able to distinguish Game ( j ) from Game ( j + 1 ) , it also can break the i-GDH assumption.
Now, we need to show that f = a · x 0 · z 2 m is independent of the sets R, S and T. This proof is identical with Lemma 5 in [16] except that T is not an empty. In this proof, T includes { z i , a · z i } i = 0 2 m 1 . Since those are the exponent of e ( g , h ) , we simply need to show that there are no outputs from O S that can be used to distinguish U. This holds obviously as monomials in T do not include x 0 and the outputs of O S ( G 2 ) also do not have 1 / x 0 , which can be taken as input of pairing together with U ( G 1 ) to evaluate U using an element in T ( G T ). Therefore, { z i , a · z i } i = 0 2 m 1 in T cannot be used to distinguish U, which has x 0 as an exponent. □
Lemma 3.
Game m andGame f i n a l are indistinguishable.
Proof. 
Given { g , h , g u , h c , { g d i , h d i , h v + c · d i } i = 0 | S | , e ( g , h ) v } from Assumption 2, the algorithm B will simulate either Game m or Game f i n a l .
Setup: The algorithm B randomly generates z. It implicitly sets γ = b and σ s i = d i for all i { 0 , , | S | 1 } where s i is the ith element in S . It publishes the public parameter:
p p = ( { ( g i , h ) γ = ( e ( g , h ) v ) z i , g i = g z i , { g σ s j = ( g d j ) z i } j S } i = 0 n 1 ) .
Phase I and II: When the adversary requests a private key for W = w 0 , , w W 1 , it randomly generates r 0 , , r W and sets K 0 = h c · h r 0 and K i = h r i for all i { 1 , , W 1 } . It also sets K = h v + c · σ w 0 · ( h c ) r 0 · i = 1 W 1 g σ w i · z i · r i .
It should be noted that σ w 0 d 1 , , d | S | so that h b + c · σ w 0 is the one of the elements given in the assumption. It sets s k W = ( { K i } i = 0 W 1 , h γ · K ) and returns s k W to A . This process can be repeated q times for each W { W 1 , , W q } .
Challenge: The adversary A requests a challenge ciphertext with M 0 and M 1 . To generate ciphertext, first, it randomly select β { 0 , 1 } . It selects random value b Z p * and { R 0 , , R n 1 } G 1 and implicitly sets a = u . It, then, sets C = Enc sym ( K , M β ) . For i { 0 , , m 1 } , the algorithm sets C i = Enc sym ( H ( T z i ) , K ) , C i = ( g u ) z i , C i = R i . It outputs the ciphertext C T : = ( C , { C i , C i , C i } i = 0 m 1 ) . It should be noted that if T = e ( g , h ) u v , this simulates Game m . Otherwise, it simulates Game f i n a l . □
Lemma 4.
Game f i n a l andGame f i n a l are indistinguishable.
Proof. 
This holds straightforwardly due to the security of symmetric encryption Sym. Since all keys used in C i = Enc sym ( H ( R z i ) , K ) replaced to random keys where R is a random element from G T in Game f i n a l , the adversary cannot differentiate if K is replaced by K R K which is a random key. This means K in C = Enc sym ( K , M β ) does not appear anywhere else. Therefore, the adversary cannot distinguish M β from a random message M R M . It should be noted that the keys in C i are correlated to each other because they are all based on the random element R K . This is natural in our scheme as the ciphertext is decrypted by decrypting any of C i , not all C i . Moreover, generally, symmetric key cryptography provides strong security, which provides enough permutation results even for those correlated keys. □

7. Conclusions

In this paper, we presented new functional encryption for pattern matching scheme with a hidden string. In the proposed scheme, we concealed the description of the ciphertext so that the ciphertext does not need to present any public information related to the message without the loss of expressiveness compared to existing functional encryption schemes. This is extremely useful for the scenario where the description of data used for access control is also sensitive. Moreover, our FEPM is the first scheme that achieves all those practical requirements together. To present formal security proofs for the proposed scheme, we define two security models for anonymity (ANON-CPA) and confidentiality (IND-CPA). We showed that the security of the proposed scheme under these security models. For future work, it would be interesting if can we achieve FEPM under static assumptions. The security of our scheme is proved under the i-GDH assumption which is considered to be stronger than static assumptions. Developing a scheme under static assumptions may guarantee better security. Additionally, it would be greatly valuable if FEPM is achieved with a non-pairing group. The proposed version of FEPM needs computationally expensive pairing computations. This computation overhead may become significant if the size of the predicate increases. Therefore, constructing a similar scheme without pairing computations will be beneficial in practice.

Author Contributions

Conceptualization, J.K. and J.B.; formal analysis, J.K. and I.K.; writing—original draft preparation, J.K.; writing—review and editing, Y.-W.C., W.S., J.B. and I.K. All authors have read and agreed to the published version of the manuscript.

Funding

This research received no external funding.

Institutional Review Board Statement

Not applicable.

Informed Consent Statement

Not applicable.

Data Availability Statement

Not applicable.

Conflicts of Interest

The authors declare no conflict of interest.

References

  1. Waters, B. Functional Encryption for Regular Languages. In Lecture Notes in Computer Science; Springer: Berlin/Heidelberg, Germany, 2012; Volume 7417, pp. 218–235. [Google Scholar]
  2. Boneh, D.; Franklin, M.K. Identity-Based Encryption from the Weil Pairing. In Advances in Cryptology—CRYPTO 2001, Proceedings of the 21st Annual International Cryptology Conference, Santa Barbara, CA, USA, 19–23 August 2001; Lecture Notes in Computer Science; Kilian, J., Ed.; Springer: Berlin/Heidelberg, Germany, 2001; Volume 2139, pp. 213–229. [Google Scholar]
  3. Boyen, X.; Waters, B. Anonymous Hierarchical Identity-Based Encryption (Without Random Oracles). In Advances in Cryptology—CRYPTO 2006, Proceedings of the 26th Annual International Cryptology Conference, Santa Barbara, CA, USA, 20–24 August 2006; Lecture Notes in Computer Science; Dwork, C., Ed.; Springer: Berlin/Heidelberg, Germany, 2006; Volume 4117, pp. 290–307. [Google Scholar]
  4. Lai, J.; Deng, R.H.; Li, Y. Expressive CP-ABE with partially hidden access structures. In Proceedings of the 7th ACM Symposium on Information, Compuer and Communications Security, ASIACCS ’12, Seoul, Korea, 2–4 May 2012; Youm, H.Y., Won, Y., Eds.; ACM: New York, NY, USA, 2012; pp. 18–19. [Google Scholar]
  5. Xiong, H.; Zhao, Y.; Peng, L.; Zhang, H.; Yeh, K. Partially policy-hidden attribute-based broadcast encryption with secure delegation in edge computing. Future Gener. Comput. Syst. 2019, 97, 453–461. [Google Scholar] [CrossRef]
  6. Belguith, S.; Kaaniche, N.; Laurent, M.; Jemai, A.; Attia, R. PHOABE: Securely outsourcing multi-authority attribute based encryption with policy hidden for cloud assisted IoT. Comput. Netw. 2018, 133, 141–156. [Google Scholar] [CrossRef] [Green Version]
  7. Phuong, T.V.X.; Yang, G.; Susilo, W. Hidden Ciphertext Policy Attribute-Based Encryption Under Standard Assumptions. IEEE Trans. Inf. Forensics Secur. 2016, 11, 35–45. [Google Scholar] [CrossRef]
  8. Xu, R.; Lang, B. A CP-ABE scheme with hidden policy and its application in cloud computing. Int. J. Cloud Comput. 2015, 4, 279–298. [Google Scholar] [CrossRef]
  9. Zhou, Z.; Huang, D.; Wang, Z. Efficient Privacy-Preserving Ciphertext-Policy Attribute Based-Encryption and Broadcast Encryption. IEEE Trans. Comput. 2015, 64, 126–138. [Google Scholar] [CrossRef]
  10. Hao, J.; Huang, C.; Ni, J.; Rong, H.; Xian, M.; Shen, X.S. Fine-grained data access control with attribute-hiding policy for cloud-based IoT. Comput. Netw. 2019, 153, 1–10. [Google Scholar] [CrossRef]
  11. Bishop, A.; Jain, A.; Kowalczyk, L. Function-Hiding Inner Product Encryption. In Advances in Cryptology—ASIACRYPT 2015 Part I, Proceedings of the 21st International Conference on the Theory and Application of Cryptology and Information Security, Auckland, New Zealand, 29 November–3 December 2015; Lecture Notes in Computer Science; Iwata, T., Cheon, J.H., Eds.; Springer: Berlin/Heidelberg, Germany, 2015; Volume 9452, pp. 470–491. [Google Scholar]
  12. Kim, S.; Lewi, K.; Mandal, A.; Montgomery, H.; Roy, A.; Wu, D.J. Function-Hiding Inner Product Encryption Is Practical. In Security and Cryptography for Networks, Proceedings of the 11th International Conference, SCN 2018, Amalfi, Italy, 5–7 September 2018; Lecture Notes in Computer Science; Catalano, D., Prisco, R.D., Eds.; Springer: Berlin/Heidelberg, Germany, 2018; Volume 11035, pp. 544–562. [Google Scholar]
  13. Tomida, J. Tightly Secure Inner Product Functional Encryption: Multi-input and Function-Hiding Constructions. In Advances in Cryptology—ASIACRYPT 2019, Part III, Proceedings of the 25th International Conference on the Theory and Application of Cryptology and Information Security, Kobe, Japan, 8–12 December 2019; Lecture Notes in Computer Science; Galbraith, S.D., Moriai, S., Eds.; Springer: Berlin/Heidelberg, Germany, 2019; Volume 11923, pp. 459–488. [Google Scholar]
  14. Attrapadung, N. Dual System Encryption via Doubly Selective Security: Framework, Fully Secure Functional Encryption for Regular Languages, and More. In Advances in Cryptology—EUROCRYPT 2014, Proceedings of the 33rd Annual International Conference on the Theory and Applications of Cryptographic Techniques, Copenhagen, Denmark, 11–15 May 2014; Lecture Notes in Computer Science; Nguyen, P.Q., Oswald, E., Eds.; Springer: Berlin/Heidelberg, Germany, 2014; Volume 8441, pp. 557–577. [Google Scholar]
  15. Waters, B. Dual System Encryption: Realizing Fully Secure IBE and HIBE under Simple Assumptions. In Advances in Cryptology—CRYPTO 2009, Proceedings of the 29th Annual International Cryptology Conference, Santa Barbara, CA, USA, 16–20 August 2009; Lecture Notes in Computer Science; Halevi, S., Ed.; Springer: Berlin/Heidelberg, Germany, 2009; Volume 5677, pp. 619–636. [Google Scholar]
  16. Desmoulins, N.; Fouque, P.; Onete, C.; Sanders, O. Pattern Matching on Encrypted Streams. In Advances in Cryptology—ASIACRYPT 2018, Part I, Proceedings of the 24th International Conference on the Theory and Application of Cryptology and Information Security, Brisbane, QLD, Australia, 2–6 December 2018; Lecture Notes in Computer Science; Peyrin, T., Galbraith, S.D., Eds.; Springer: Berlin/Heidelberg, Germany, 2018; Volume 11272, pp. 121–148. [Google Scholar]
  17. Bkakria, A.; Cuppens, N.; Cuppens, F. Privacy-Preserving Pattern Matching on Encrypted Data. In Advances in Cryptology—ASIACRYPT 2020, Part II, Proceedings of the 26th International Conference on the Theory and Application of Cryptology and Information Security, Daejeon, Korea, 7–11 December 2020; Lecture Notes in Computer Science; Moriai, S., Wang, H., Eds.; Springer: Berlin/Heidelberg, Germany, 2020; Volume 12492, pp. 191–220. [Google Scholar]
  18. Kim, J.; Susilo, W.; Chow, Y.W.; Baek, J.; Kim, I. Pattern Matching over Encrypted Data with a Short Ciphertext. In Proceedings of the Information Security Applications—WISA 2021, Jeju, Korea, 11–13 August 2021; Lecture Notes in Computer Science. Kim, H., Ed.; Springer: Berlin/Heidelberg, Germany, 2021; Volume 13009, pp. 132–143. [Google Scholar]
  19. Sherry, J.; Lan, C.; Popa, R.A.; Ratnasamy, S. BlindBox: Deep Packet Inspection over Encrypted Traffic. In Proceedings of the ACM SIGCOMM 2015, London, UK, 17–21 August 2015; ACM: New York, NY, USA, 2015; pp. 213–226. [Google Scholar]
  20. Kim, J.; Camtepe, S.; Baek, J.; Susilo, W.; Pieprzyk, J.; Nepal, S. P2DPI: Practical and Privacy-Preserving Deep Packet Inspection. In Proceedings of the ASIA CCS ’21: ACM Asia Conference on Computer and Communications Security, Virtual Event, Hong Kong, China, 7–11 June 2021; Cao, J., Au, M.H., Lin, Z., Yung, M., Eds.; ACM: New York, NY, USA, 2021; pp. 135–146. [Google Scholar]
  21. Ning, J.; Poh, G.S.; Loh, J.; Chia, J.; Chang, E. PrivDPI: Privacy-Preserving Encrypted Traffic Inspection with Reusable Obfuscated Rules. In Proceedings of the 2019 ACMCCS 2019, London, UK, 11–15 November 2019; Cavallaro, L., Kinder, J., Wang, X., Katz, J., Eds.; ACM: New York, NY, USA, 2019; pp. 1657–1670. [Google Scholar]
  22. Canard, S.; Diop, A.; Kheir, N.; Paindavoine, M.; Sabt, M. BlindIDS: Market-Compliant and Privacy-Friendly Intrusion Detection System over Encrypted Traffic. In Proceedings of the ACM AsiaCCS 2017, Abu Dhabi, United Arab Emirates, 2–6 April 2017; ACM: New York, NY, USA, 2017; pp. 561–574. [Google Scholar]
Table 1. Comparison with other primitives.
Table 1. Comparison with other primitives.
FunctionHidden PolicyDecryptionFlexible Predicate
FERL [1,14]DFANoYesYes
HP-ABE [4,5,6,7,8,9,10]Boolean policyYesYesNo
MBSE [19,20,21,22]MatchingYesNoNo
PA [16,17,18]MatchingYesNoYes
FEPM (Ours)MatchingYesYesYes
Publisher’s Note: MDPI stays neutral with regard to jurisdictional claims in published maps and institutional affiliations.

Share and Cite

MDPI and ACS Style

Kim, J.; Chow, Y.-W.; Susilo, W.; Baek, J.; Kim, I. Functional Encryption for Pattern Matching with a Hidden String. Cryptography 2022, 6, 1. https://doi.org/10.3390/cryptography6010001

AMA Style

Kim J, Chow Y-W, Susilo W, Baek J, Kim I. Functional Encryption for Pattern Matching with a Hidden String. Cryptography. 2022; 6(1):1. https://doi.org/10.3390/cryptography6010001

Chicago/Turabian Style

Kim, Jongkil, Yang-Wai Chow, Willy Susilo, Joonsang Baek, and Intae Kim. 2022. "Functional Encryption for Pattern Matching with a Hidden String" Cryptography 6, no. 1: 1. https://doi.org/10.3390/cryptography6010001

Article Metrics

Back to TopTop