From 3a937e55d43344b9f7b89330b5ac24a689fd8ae5 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 23 Dec 2019 11:35:15 +0100 Subject: [PATCH] More --- papers/IBESecProof.pdf | Bin 0 -> 96166 bytes report.tex | 362 ++++++++++++++++++++++++----------------- 2 files changed, 214 insertions(+), 148 deletions(-) create mode 100644 papers/IBESecProof.pdf diff --git a/papers/IBESecProof.pdf b/papers/IBESecProof.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0d63a884bce5ef9c3390e0e2a31beabfea44ec28 GIT binary patch literal 96166 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 tx3hBsA3)K+u6-P~H3xez;tq|tA#`*ya&RK n$ with a bilinear map $e : \mathbb{G} \times \mathbb{G} \rightarrow \mathbb{G}_T$, based on a security parameter $\lambda$. + +\begin{description} +\item[BSetup$(n, \ell)$] Run $(\mathbb{G}, \mathbb{G}_T, e) \xleftarrow{R} GroupGen(\lambda, n)$. Set $\alpha \in_R \Z_p$ and $g,h_1,\dots,h_n \in_R \mathbb{G}^{n+1}$. Finally, set $PK = (\mathbb{G}, \mathbb{G}_T, e), g, e(g,g)^\alpha, h_1, \dots, h_n$. The secret key is $SK = g^\alpha$. The result is the pair $(PK, SK)$. +\item[BKeyGen$(i, SK)$] Set $r_i \in_R \Z_p$ and output; $$d_i \leftarrow (d_{i,0},\dots,d_{i,n}) \quad \text{ where } \quad d_{i,0} = g^{-r_i}, \quad d_{i,i} = g^\alpha h^{r_i}_i, \quad d_{i,j \text{ for } i\neq j} h^{r_i}_j$$ +\item[BEncrypt$(S, PK)$] Set $t \in_R \Z_p$ and $$Hdr = (C_1,C_2), \quad \text{ where }\quad C_1 = g^t, \quad C_2 = (\prod_{i \in S}h_i)^t $$ Finally, set $K = e(g,g)^{t\cdot \alpha}$. Output $(\hdr, K)$. +\item[BDecrypt$(S,i,d_i,\text{Hdr}, PK)$] Check if $i \in S$, if so; let $d_i = (d_{i,0},\dots,d_{i,n})$, Hdr$=(C_1,C_2)$, output $$k =e(d_{i,i} \cdot \prod_{j \in S \setminus \{i\}} d_{i,j}, C_1) \cdot e(d_{i,0}, C_2)$$ +\item[Correctness] Correctness is given by; +\begin{align*} + K &= e(d_{i,i} \cdot \prod_{j \in S \setminus \{i\}} d_{i,j}, C_1) \cdot e(d_{i,0}, C_2) \\ + &= e(g^{\alpha}h^{r_i}_i \cdot (\prod_{j \in S \setminus \{i\}} h_j)^{r_i}, g^t) \cdot e(g^{-r_i}, (\prod_{j \in S}h_j)^t) \\ + &= e(g^{\alpha} \cdot (\prod_{j \in S} h_j)^{r_i}, g^t) \cdot e(g^{-r_i}, (\prod_{j \in S}h_j)^t) \\ + &= e(g,g)^{t \cdot \alpha} +\end{align*} +\end{description} + + +\subsection{Proof of Security} +The proof is a reduction from their construction to the \emph{BDHE}-problem. The scheme is proven secure in the semi-static model. We note that the proof in the original paper does not hold, likely due to a typo, but we'll emphasise the fix. + +We wish to build an algorithm \adv{B}, which will use an adversary \adv{A} of the system described in \ref{sec:GentryWatersConst}, to break the \emph{BDHE} problem. \\ \\ +\adv{B} receives a problem instance which contains $g^s, Z, \{g^{a^i}: i \in [0,m] \cup [m+2, 2m]\}$. +\begin{description} +\item[Init] \adv{A} commits to a set $\tilde{S} \subseteq [1,n]$. +\item[Setup] \adv{B} generates $y_0,\dots,y_n \in_R \Z_p$. \adv{B} sets: +$$ +h_i = +\begin{cases} + g^{y_i} & \text{ for } i \in \tilde{S} \\ + g^{y_i + a^{i}} & \text{ for } i \in [1,n] \setminus \tilde{S} +\end{cases} +$$ +\adv{B} then sets $\alpha = y_0 \cdot a^{n+1}$. $PK$ is then defined as the scheme dictates where the only oddity is $e(g,g)^\alpha$, which can be computed as $e(g^a,g^{a^{n}})^{y_0}$ due to the definition of $\alpha$. $PK$ is sent to \adv{A}. + +\item[Key Extraction Phase] \adv{A} is allowed to query private keys for indices $i \in [1,n] \setminus \tilde{S}$. Intuitively, you should not be allowed to query the indices of which you wish to be challenged. To answer a query, \adv{B} will generate a $z_i \in_R \Z_p$ and set $r_i = z_i - y_0 \cdot a^{n+1-i}$. \adv{B} then outputs + $$ d_i = (d_{i,0},\dots,d_{i,n})\quad \text{ where } \quad d_{i,0} = g^{-r_i},\quad d_{i,i} = g^\alpha h^{r_i}_i, \quad d_{i,j \text{ where } i\neq j}h^{r_i}_j $$ + \item[Challenge] \adv{A} will then choose a subset $S^* \subseteq \tilde{S}$ to which \adv{B} sets: +$$\text{Hdr} = (C_1, C_2) \quad \text{ where } C_1 = g^s, \quad C_2 = (\prod_{j \in S^*}h_j)^s$$ +Note that $g^s$ comes from the original challenge and due to the construction of the $h_j$ values, $C_2$ is computable, as \adv{B} knows the discrete log of each of them, specifically $h_j = g^{y_j}$, as long as $j \in \tilde{S}$. +\adv{B} sets $K = Z^{y_0}$ (The original; $K = Z$) and sends $(\text{Hdr},K)$ to \adv{A}. +\item[Guess] \adv{A} will output a guess $b'$. \adv{B} forwards this bit to the Challenger. + \item[Correctness] This simulation intuitively works, as if \adv{A} returns $b' = 0$ then the pair $(\text{Hdr}, K)$ is generated according to the same distribution as in the real world, according to \adv{A}. This is also true for \adv{B}'s simulation, as for $b=0$, $K = e(g,g)^{\alpha \cdot s} = e(g,g)^{(a^{n+1} \cdot s) \cdot y_0} = Z^{y_0}$, so it's a valid ciphertext under randomness $s$. When $b=1$, the $K$ is however picked randomly from $\mathcal{K}$, resulting in a correctly header Hdr with randomness $s$, but the ciphertext is random. +\end{description} +This construction we'll be the foundation of the \emph{Ad-Hoc Broadcast Encryption} which we will explore shortly and likewise will this proof be brought up when exploring possible proofs of security of said \emph{Ad-Hoc Broadcast Encryption} scheme. \section{Dynamic Threshold Public-Key Encryption} In a Threshold Public-Key Encryption (\texttt{TPKE}) scheme, the decryption key corresponding to a public key is shared among a set of $n$ users \cite{TPKE}. Specifically for \texttt{TPKE} is that for any ciphertext to be correctly decrypted, $t$ receivers has to participate and cooperate. Thus, if any number of users less than $t$ try to decrypt, they will gain nothing, hence the threshold part of \texttt{TPKE}. A limitation of existing \texttt{TPKE} schemes however, is that the threshold value of $t$ is tightly connected to the public key of the system, as such, one has to fix the threshold for good, when setting up the system. Many applications would benefit from a flexibility to choose $t$ whenever broadcasting. As such Dynamic Threshold Public-Key Encryption (\texttt{DTPKE}) is proposed \cite{DTPKE}. +In a sense, Broadcast Encryption Systems can be related to notion of \emph{Threshold Public Key Encryption Systems} (\texttt{TPKE}) if we define the authorized set of the \texttt{TPKE} system to be equal to $S$ and the threshold parameter $t$ is set to be $1$. This is only true however, for the specific value of $t=1$, thus, specialized systems can be designed for the purpose of being broadcast encryption systems and \texttt{TPKE} can be seen as a general case of \texttt{BE}. + +\subsection{Modelling Dynamic Threshold Public-Key Encryption} +A \texttt{DTPKE}-scheme consist of $7$ algorithms: \texttt{DTPKE} $= ($\texttt{Setup}, \texttt{Join}, \texttt{Encrypt}, \texttt{ValidateCT}, \texttt{ShareDecrypt}, \texttt{ShareVerify}, \texttt{Combine}$)$. + +\begin{description} +\item[Setup$(\lambda)$] Takes security parameter $\lambda$. Outputs a set of system parameters: $$\mathtt{params} = (MK,EK,DK,VK,CK).$$ $MK$ is a Master Secret Key, $EK$ is the Encryption Key, $DK$ is the Decryption Key, $VK$ is the Validation Key and $CK$ is the Combination Key. $MK$ is kept secret by the issuer, but the other four are public parameters. +\item[Join$(MK, \mathtt{ID})$] Takes the $MK$ and an identity \ID of a user. Outputs the user's keys $(usk, upk, uvk)$, where $usk$ is the secret key used for decryption, $upk$ is the public key used for encrypting and $uvk$ is the verification key. $upk, uvk$ are both public, whereas $usk$ is given privately to the user. +\item[Encrypt$(EK, S, t, M)$] Takes the Encryption Key, the public keys of the users within the receiver set $S$, a threshold $t$ and a message to be encrypted, $M$. Outputs a ciphertext. +\item[ValidateCT$(EK, S, t, C)$] Takes the encryption key, the public keys of the receiver set, a threshold and a ciphertext. Checks whether $C$ is a valid ciphertext with respect to $EK, S$ and $t$. +\item[ShareDecrypt$(DK, \mathtt{ID}, usk, C)$] Takes the decryption key, a user id \ID and his private key $usk$, as well as a ciphertext $C$. Outputs a decryption share $\sigma$ or $\perp$. +\item[ShareVerify$(VK, \mathtt{ID}, uvk, C, \sigma)$] Takes the verification key $VK$, a user id \ID and his verification key $uvk$ plus a ciphertext $C$ and decryption share $\sigma$. Checks whether $\sigma$ is a valid decryption share with respect to $uvk$. +\item[Combine$(CK, S, t, C, T, \Sigma)$] Takes the combination key $CK$, a ciphertext $C$, some subset $T \subseteq S$ of $t$ authorised users and $\Sigma = (\sigma_1, \dots, \sigma_t)$ which is a list of $t$ decryption share. Outputs the plaintext $M$ or $\perp$. +\end{description} + + \subsection{Security Model} -\-\hspace{5mm} \textbf{Setup:}\quad The challenger runs Setup$(\lambda)$ of the \texttt{DTPKE} scheme, obtaining the $$\mathtt{params} = (MK,EK,DK,VK,CK)$$. All the public parameters (all except for $MK$) are given to the adversary \adv{A}. \vsp{3mm} -\-\hspace{5mm} \textbf{Phase 1:}\quad The adversary is allowed to adaptively issue queries where query $q_i$ is one of three queries; +\begin{description} +\item[Setup] The challenger runs Setup$(\lambda)$ of the \texttt{DTPKE} scheme, obtaining the $$\mathtt{params} = (MK,EK,DK,VK,CK)$$. All the public parameters (all except for $MK$) are given to the adversary \adv{A}. +\item[Phase 1] The adversary is allowed to adaptively issue queries where query $q_i$ is one of three queries; \begin{itemize} \item A \texttt{Join} query on an id \texttt{ID}; The challenger runs the \texttt{Join} algorithm on input $(MK,\mathtt{ID})$, to create a new user in the system. Note that the challenger has $MK$ from the setup step. \item A \texttt{Corrupt} query on an id \texttt{ID}: The challenger forwards the corresponding private key to the adversary. \item A \texttt{ShareDecrypt} query on an id \texttt{ID} and a header \texttt{Hdr}: The challenger runs the \texttt{ShareDecrypt} algorithm of the \texttt{DTPKE} scheme on \texttt{Hdr}, using the corresponding private key, and forwards the partial decryption to the adversary. -\end{itemize} -\hsp{5mm} \textbf{Challenge:}\quad The adversary \adv{A} outputs a target set of users $S^*$ as well as a threshold $t^*$. The challenger selects $b \in_R \set{0, 1}$ and then runs \texttt{Encrypt} to obtain $\mathtt{Hdr}^*, k_0) \la \mathtt{Encrypt}(EK, S^*, t^*)$. Furthermore, he picks another key $k_1 \in_R \mathcal{K}$. The challenger outsputs $(\mathtt{Hdr}^*, k_b)$ to \adv{A}. \vsp{3mm} -\hsp{5mm} \textbf{Phase 2:}\quad The adversary \adv{A} is allowed to continue adaptively issuing \texttt{Join, Corrupt} and \texttt{ShareDecrypt} queries, with the only constraint that he asks less than or equal to $t^*-1$.\vsp{3mm} -\hsp{5mm} \textbf{Guess:} The adversary outputs a guess bit $b' \in \{0,1\}$ and he will win the game if $b' = b$. \vsp{5mm} -From this basic description, we can define three sub definitions: +\end{itemize} +\item[Challenge] The adversary \adv{A} outputs a target set of users $S^*$ as well as a threshold $t^*$. The challenger selects $b \in_R \set{0, 1}$ and then runs \texttt{Encrypt} to obtain $\mathtt{Hdr}^*, k_0) \la \mathtt{Encrypt}(EK, S^*, t^*)$. Furthermore, he picks another key $k_1 \in_R \mathcal{K}$. The challenger outsputs $(\mathtt{Hdr}^*, k_b)$ to \adv{A}. +\item[Phase 2] The adversary \adv{A} is allowed to continue adaptively issuing \texttt{Join, Corrupt} and \texttt{ShareDecrypt} queries, with the only constraint that he asks less than or equal to $t^*-1$. +\item[Guess] The adversary outputs a guess bit $b' \in \{0,1\}$ and he will win the game if $b' = b$. + + From this basic description, we can define three sub definitions: \begin{itemize} \item \emph{Non-Adaptive Adversary} (\texttt{NAA}): We restrict the adversary to decide upon the challenge set $S^*$ as well as the threshold $t^*$ before the \texttt{Setup} step is run. \item \emph{Non-Adaptive Corruption} (\texttt{NAC}): We restrict the adversary to decide before the setup is run, which identities will be corrupted. \item \emph{Chosen-Plaintext Adversary} (\texttt{CPA}): We restrict the adversary from issuing share decryption queries. \end{itemize} +\end{description} + + +% TODO: Consider having parameters for all modelling or none! + -\subsection{Modelling \texttt{DTPKE}} -A \texttt{DTPKE}-scheme consist of $7$ algorithms: \texttt{DTPKE} $= ($\texttt{Setup}, \texttt{Join}, \texttt{Encrypt}, \texttt{ValidateCT}, \texttt{ShareDecrypt}, \texttt{ShareVerify}, \texttt{Combine}$)$. \vsp{4mm} -\hsp{5mm}\textbf{Setup$(\lambda)$:}\quad Takes security parameter $\lambda$. Outputs a set of system parameters: $$\mathtt{params} = (MK,EK,DK,VK,CK).$$ $MK$ is a Master Secret Key, $EK$ is the Encryption Key, $DK$ is the Decryption Key, $VK$ is the Validation Key and $CK$ is the Combination Key. $MK$ is kept secret by the issuer, but the other four are public parameters. \vsp{3mm} -\hsp{5mm}\textbf{Join$(MK, \mathtt{ID})$:}\quad Takes the $MK$ and an identity \ID of a user. Outputs the user's keys $(usk, upk, uvk)$, where $usk$ is the secret key used for decryption, $upk$ is the public key used for encrypting and $uvk$ is the verification key. $upk, uvk$ are both public, whereas $usk$ is given privately to the user.\vsp{3mm} -\hsp{5mm}\textbf{Encryptp$(EK, S, t, M)$:}\quad Takes the Encryption Key, the public keys of the users within the receiver set $S$, a threshold $t$ and a message to be encrypted, $M$. Outputs a ciphertext.\vsp{3mm} -\hsp{5mm}\textbf{ValidateCT$(EK, S, t, C)$:}\quad Takes the encryption key, the public keys of the receiver set, a threshold and a ciphertext. Checks whether $C$ is a valid ciphertext with respect to $EK, S$ and $t$. \vsp{3mm} -\hsp{5mm}\textbf{ShareDecrypt$(DK, \mathtt{ID}, usk, C)$:}\quad Takes the decryption key, a user id \ID and his private key $usk$, as well as a ciphertext $C$. Outputs a decryption share $\sigma$ or $\perp$. \vsp{3mm} -\hsp{5mm}\textbf{ShareVerify$(VK, \mathtt{ID}, uvk, C, \sigma)$:}\quad Takes the verification key $VK$, a user id \ID and his verification key $uvk$ plus a ciphertext $C$ and decryption share $\sigma$. Checks whether $\sigma$ is a valid decryption share with respect to $uvk$. \vsp{3mm} -\hsp{5mm}\textbf{Combine$(CK, S, t, C, T, \Sigma)$:}\quad Takes the combination key $CK$, a ciphertext $C$, some subset $T \subseteq S$ of $t$ authorised users and $\Sigma = (\sigma_1, \dots, \sigma_t)$ which is a list of $t$ decryption share. Outputs the plaintext $M$ or $\perp$.\vsp{3mm} \subsection{A scheme and the Security Thereof} It should be noted that this scheme is very long and as such will be left out of the report, but it will be included in the appendix, completely as the original authors wrote it. We will instead list their security proof, which contains an error worth of noting. Their proof is a reduction to the \texttt{MSE-DDH} problem, as defined in Section \ref{sec:MSE-DDH}. Regardless, their security proof states that the \texttt{DTPKE} scheme has \texttt{IND-NAA-NAC-CPA} security (Non-adaptive adversary, non-adaptive corruption, chosen-plaintext attack). @@ -237,7 +333,7 @@ It should be noted that this scheme is very long and as such will be left out of For any $l,m,t,$ $\mathbf{Adv}^{ind}_{\mathtt{DTPKE}}(l,m,t) \leq 2 \cdot \mathbf{Adv}^{\text{MSE-DDH}}(l,m,t)$. Where $l$ denotes the total number of \textbf{Join} queries that can be issued by the adversary, $m$ is the maximal size the authorised set of receivers is allowed to be, $t$ is the threshold. \end{theorem} \begin{proof} - Let \texttt{DTPKE} denote the construction as described in Appendix A. Now, to establish the semantic security, the \texttt{IND-NAA-NAC-CPA} security, for static adversaries of the \texttt{DTPKE} scheme, we describe a reduction to the \texttt{MSE-DDH} problem. To this end, we assume an adversary \adv{A} who can break the scheme under an $(l,m,t)$-collusion. This adversary \adv{A} will be used to build an algorithm \adv{B} who can then distinguish the two distributions of the $(l,m,t)$-\texttt{MSE-DDH} problem. + Let \texttt{DTPKE} denote the construction as described in Appendix \ref{app:DTPKE-Scheme}. Now, to establish the semantic security, the \texttt{IND-NAA-NAC-CPA} security, for static adversaries of the \texttt{DTPKE} scheme, we describe a reduction to the \texttt{MSE-DDH} problem. To this end, we assume an adversary \adv{A} who can break the scheme under an $(l,m,t)$-collusion. This adversary \adv{A} will be used to build an algorithm \adv{B} who can then distinguish the two distributions of the $(l,m,t)$-\texttt{MSE-DDH} problem. The algorithm \adv{B} is given as input some group system $Pub = (p, \Gm_1, \Gm_2, \Gm_T, e)$ as described in \ref{sec:MSE-DDH} as well as an $(l,m,t)$-\texttt{MSE-DDH} instance in $Pub$. The \texttt{MSE-DDH} instances gives us, \adv{B}, two coprime polynomials $f_{poly}$ and $g_{poly}$ of orders $l$ and $m$ with pairwise distinct roots $(x_1, \dots, x_l)$ and $(x_{l+t}, \dots, x_{l+t+m-1})$ respectively. Finally, \adv{B} has all the exponents; \begin{align*} @@ -299,100 +395,45 @@ It should be noted that this scheme is very long and as such will be left out of Now, as the distribution of $b$ is independent from the adversarys view; $$Pr(b'=1 | b=1 \wedge \text{random}) = Pr(b'=1 | b=0 \wedge \text{random})$$ Thus, the left side cancels out. In the real case however, the distribution of all variables which are defined by \adv{B} comply with the definition of the semantic security game, as all simulations are perfect. Thus, to conclude: $$\mathbf{Adv}_{\mathtt{DTPKE}}^{\text{ind}}(\mathcal{A}) = Pr(b'=1 | b=1 \wedge \text{real}) - Pr(b'=1 | b=0 \wedge \text{real})$$ Is exactly equal to $$2 \cdot (\frac{1}{2} \times (Pr(b'=1 | b=1 \wedge \text{real}) + Pr(b'=1 | b=0 \wedge \text{real})).$$ -\end{proof} + \end{proof} + +% TODO: Consider giving some outro to this + % TODO: Explain this scheme and their security proof which doesn't work. Yikes. -% TOOD: Add the DTPKE scheme to the appendix A. % TODO: Consider making all upk and usk bold -\section{Broadcast Encryption} -\label{sec:BE} -Broadcast Encryption systems \cite{BEDef} in a nutshell, allows one sender to send to a subset $S \subseteq [1,n]$ of users with a single message. Traditionally, the user would have to encrypt this message once per user in a horribly inefficient manner. This is fixed, by defining the encryption key in such a way to allow for any user within the $S$ to decrypt the message, while not allowing anyone outside of $S$ to do so. It is preferable for this kind of schem to be \emph{public key based}, rather than symmetric. This allows any user to encrypt. It should allow \emph{stateless receivers} s.t. users won't need to keep any state such as updating a private key, and the system should be \emph{fully collusion resistant}, i.e. not allow decryption even if everybody outside of the set $S$ cooperated. - -In a sense, Broadcast Encryption Systems can be related to notion of \emph{Threshold Public Key Encryption Systems} (\texttt{TPKE}) if we define the authorized set of the \texttt{TPKE} system to be equal to $S$ and the threshold parameter $t$ is set to be $1$. This is only true however, for the specific value of $t=1$, thus, specialized systems can be designed for the purpose of being broadcast encryption systems. In this paper we will focus on a scheme due to Gentry and Waters \cite{GentryWaters}. - -\subsection{Security Defintions} -\label{sec:BESec} -We define three levels of security, \emph{Static, Semi-Static} and \emph{Adaptive}. For the sake of simplicity, we will explain Semi-static and then emphasise the differences. Note that Semi-Static security is stronger than Static security, but weaker than Adaptive. The definition of Semi-Static is due to Gentry and Waters \cite{BESecDef, GentryWaters}. \vsp{4mm} -\hsp{5mm}\textbf{Initialisation:}\quad The adversary \adv{A} first commits to a \emph{potential} set of receivers which he wishes to attack, $\tilde{S}$, and outputs this. \vsp{3mm} -\hsp{5mm}\textbf{Setup:}\quad The challenger \CH runs the $\mathbf{BSetup}(n, \ell)$ algorithm of the BE scheme, obtaining a public key PK. \CH gives this PK to \adv{A}. \vsp{3mm} -\hsp{5mm}\textbf{Key Extraction Phase:}\quad The adversary \adv{A} is allowed to issue private key queries for indices $i \in [1,n] \setminus \tilde{S}$, i.e. he is allowed to ask for the private keys of any user not in the set of potential receivers. \vsp{3mm} -\hsp{5mm}\textbf{Challenge:}\quad Once the adversary \adv{A} has extracted all desired keys, he specifies an attack set $S^* \subseteq \tilde{S}$, on which he wants to be challenged. The challenger \CH then sets $(\hdr^*, k_0) \leftarrow BEnc(S^*, PK)$ and $k_1 \in_R \mathcal{K}$. Then $b \in_R \{0,1\}$ and \CH sends $(\hdr^*, k_b)$ to \adv{A}. \vsp{3mm} -\hsp{5mm}\textbf{Guess:}\quad Adversary \adv{A} outputs a guess $b' \in \{0,1\}$ and he wins if $b' = b$. \\ \\ -\noindent -The advantage of \adv{A} is then defined as: $$Adv_{SS,BE,n,\ell}(\lambda) = |Pr(b'=b) - \frac{1}{2}|$$ -Static security is the least strongest type and it requires the adversary to commit to the set of receivers of which he wants to be challenged on, in the initialisation phase, rather than the potential set the Semi-Static adversary has to commit to. Adaptive security is arguably the most desired and correct type, as it enforces nothing in regards to the attack set $S^*$. The adversary is allowed to see the public key PK and ask for several private keys, before choosing which set he wishes to be challenged on. We note here, that due to Gentry and Waters \cite{GentryWaters}, we can transform a Semi-Statically secure BE scheme to an Adaptively secure BE scheme. - - -% TODO: Consider using description environment or https://tex.stackexchange.com/questions/436977/how-to-insert-multiple-hspace-into-one-row-line -% TODO, maybe new page this -\subsection{Their construction} -\label{sec:GentryWatersConst} -Let $GroupGen(\lambda,n)$ be an algorithm which generates a group \G and \Gp{_T} of prime order $p = poly(\lambda, n) > n$ with a bilinear map $e : \mathbb{G} \times \mathbb{G} \rightarrow \mathbb{G}_T$, based on a security parameter $\lambda$. \vsp{5mm} -\-\hspace{5mm}\textbf{BSetup$(\lambda,n)$:}\quad Run $(\mathbb{G}, \mathbb{G}_T, e) \xleftarrow{R} GroupGen(\lambda, n)$. Set $\alpha \in_R \Z_p$ and $g,h_1,\dots,h_n \in_R \mathbb{G}^{n+1}$. Finally, set $PK = (\mathbb{G}, \mathbb{G}_T, e), g, e(g,g)^\alpha, h_1, \dots, h_n$. The secret key is $SK = g^\alpha$. The result is the pair $(PK, SK)$. \vspace{3mm} \\ -\-\hspace{5mm}\textbf{BKeyGen$(i, SK)$:}\quad Set $r_i \in_R \Z_p$ and output; $$d_i \leftarrow (d_{i,0},\dots,d_{i,n}) \quad \text{ where } \quad d_{i,0} = g^{-r_i}, \quad d_{i,i} = g^\alpha h^{r_i}_i, \quad d_{i,j \text{ for } i\neq j} h^{r_i}_j$$ \vspace{3mm} \\ -\-\hspace{5mm}\textbf{BEncrypt$(S, PK)$:}\quad Set $t \in_R \Z_p$ and $$Hdr = (C_1,C_2), \quad \text{ where }\quad C_1 = g^t, \quad C_2 = (\prod_{i \in S}h_i)^t $$ Finally, set $K = e(g,g)^{t\cdot \alpha}$. Output $(\hdr, K)$. \vspace{3mm} \\ -\-\hspace{5mm}\textbf{BDecrypt}$(S,i,d_i,\text{Hdr}, PK)$\textbf{:}\quad Check if $i \in S$, if so; let $d_i = (d_{i,0},\dots,d_{i,n})$, Hdr$=(C_1,C_2)$, output $$k =e(d_{i,i} \cdot \prod_{j \in S \setminus \{i\}} d_{i,j}, C_1) \cdot e(d_{i,0}, C_2)$$ \vsp{3mm} -\hsp{5mm} \textbf{Correctness:}\quad Correctness is given by; -\begin{align*} - K &= e(d_{i,i} \cdot \prod_{j \in S \setminus \{i\}} d_{i,j}, C_1) \cdot e(d_{i,0}, C_2) \\ - &= e(g^{\alpha}h^{r_i}_i \cdot (\prod_{j \in S \setminus \{i\}} h_j)^{r_i}, g^t) \cdot e(g^{-r_i}, (\prod_{j \in S}h_j)^t) \\ - &= e(g^{\alpha} \cdot (\prod_{j \in S} h_j)^{r_i}, g^t) \cdot e(g^{-r_i}, (\prod_{j \in S}h_j)^t) \\ - &= e(g,g)^{t \cdot \alpha} -\end{align*} - -\subsection{Proof of Security} -The proof is a reduction from their construction to the \emph{BDHE}-problem. The scheme is proven secure in the semi-static model. We note that the proof in the original paper does not hold, likely due to a typo, but we'll emphasize the fix. - -We wish to build an algorithm \adv{B}, which will use an adversary \adv{A} of the system described in \ref{sec:GentryWatersConst}, to break the \emph{BDHE} problem. \vsp{4mm} -\hsp{5mm} \adv{B} receives a problem instance which contains $g^s, Z, \{g^{a^i}: i \in [0,m] \cup [m+2, 2m]\}$. \vsp{3mm} -\hsp{5mm} \textbf{Init:}\quad \adv{A} commits to a set $\tilde{S} \subseteq [1,n]$. \vsp{3mm} -\hsp{5mm} \textbf{Setup:}\quad \adv{B} generates $y_0,\dots,y_n \in_R \Z_p$. \adv{B} sets: -$$ -h_i = -\begin{cases} - g^{y_i} & \text{ for } i \in \tilde{S} \\ - g^{y_i + a^{i}} & \text{ for } i \in [1,n] \setminus \tilde{S} -\end{cases} -$$ -\adv{B} then sets $\alpha = y_0 \cdot a^{n+1}$. $PK$ is then defined as the scheme dictates where the only oddity is $e(g,g)^\alpha$, which can be computed as $e(g^a,g^{a^{n}})^{y_0}$ due to the definition of $\alpha$. $PK$ is sent to \adv{A}. \vsp{3mm} -\hsp{5mm} \textbf{Private Key Queries:}\quad \adv{A} is allowed to query private keys for indices $i \in [1,n] \setminus \tilde{S}$. Intuitively, you should not be allowed to query the indices of which you wish to be challenged. To answer a query, \adv{B} will generate a $z_i \in_R \Z_p$ and set $r_i = z_i - y_0 \cdot a^{n+1-i}$. \adv{B} then outputs -$$ d_i = (d_{i,0},\dots,d_{i,n})\quad \text{ where } \quad d_{i,0} = g^{-r_i},\quad d_{i,i} = g^\alpha h^{r_i}_i, \quad d_{i,j \text{ where } i\neq j}h^{r_i}_j $$ -\hsp{5mm} \textbf{Challenge:}\quad \adv{A} will then choose a subset $S^* \subseteq \tilde{S}$ to which \adv{B} sets: -$$\text{Hdr} = (C_1, C_2) \quad \text{ where } C_1 = g^s, \quad C_2 = (\prod_{j \in S^*}h_j)^s$$ -Note that $g^s$ comes from the original challenge and due to the construction of the $h_j$ values, $C_2$ is computable, as \adv{B} knows the discrete log of each of them, specifically $h_j = g^{y_j}$, as long as $j \in \tilde{S}$. -\adv{B} sets $K = Z^{y_0}$ (The original; $K = Z$) and sends $(\text{Hdr},K)$ to \adv{A}. \vsp{3mm} -\hsp{5mm} \textbf{Guess:}\quad \adv{A} will output a guess $b'$. \adv{B} forwards this bit to the Challenger. \vsp{3mm} -\hsp{5mm} \textbf{Security:}\quad This simulation intuitively works, as if \adv{A} returns $b' = 0$ then the pair $(\text{Hdr}, K)$ is generated according to the same distribution as in the real world, according to \adv{A}. This is also true for \adv{B}'s simulation, as for $b=0$, $K = e(g,g)^{\alpha \cdot s} = e(g,g)^{(a^{n+1} \cdot s) \cdot y_0} = Z^{y_0}$, so it's a valid ciphertext under randomness $s$. When $b=1$, the $K$ is however picked randomly from $\mathcal{K}$, resulting in a correctly header Hdr with randomness $s$, but the ciphertext is random. \\ \\ -\noindent -This construction we'll be the foundation of the \emph{Ad-Hoc Broadcast Encryption} which we will explore shortly and likewise will this proof be brought up when exploring possible proofs of security of said \emph{Ad-Hoc Broadcast Encryption} scheme. - - \section{Ad-Hoc Broadcast Encryption} The scheme presented in \ref{sec:BE} requires a \emph{trusted dealer} to perform its \emph{setup} and \emph{keygen}. It goes for a lot of \emph{Broadcast Encryption} systems, that they require a trusted entity to generate and distribute secret keys to all users. This tends to make the system very rigid and not applicable to ad hoc networks or peer-to-peer networks. A \emph{potential} solution to this is presented by \cite{AHBE}. They present a solution to the fully dynamic case of broadcast encryption. This has significant ties to the \emph{Dynamic Threshold Encryption} scheme in which users could freely join and leave, however they did not quite get rid of the trusted dealer. This is accomplished here. Keep in mind that broadcast encryption is simply threshold encryption for the threshold of $t=1$. In an Ad-Hoc Broadcast Encryption (\texttt{AHBE}) scheme all users possess a public key and by only seeing the public keys of users, a sender can securely broadcast to \emph{any} subset of the users. Only users within the picked subset can decrypt the message. To accomplish this, the authors create a generic transformation from any \emph{key homomorphic} BE scheme to an \texttt{AHBE} scheme. It turns out that the scheme of Gentry and Waters presented in \ref{sec:BE} is just this and the transformation will be performed on this. +\subsection{Modelling Ad-Hoc Broadcast Encryption} +As an \texttt{AHBE} system eliminate the trusted dealer, the \emph{setup} and \emph{keygen} step morph together, as there is no global \emph{setup} step required, but merely something each user should locally run. As all other schemes defined in this paper, this too is defined to be a \emph{Key Encapsulation Method} (\texttt{KEM}). -\subsection{Security Definition of Adaptive Security in AHBE} +\begin{description} +\item[KeyGen$(i,n,N)$] Let $N$ be defined as the number of potential receivers of the scheme and let $n \leq N$ be defined as the maximum number of receivers of an ad-hoc broadcast recipient group. The \emph{KeyGen} (this) algorithm is run by each user $i \in [1,N]$ to create her own public/secret key pair. A user takes $n, N$ as well as her own index $i \in [1,N]$. It's not mentioned how the user receives this index in practice, without simply having a central authority giving them, but one could imagine the users being aware of how many recipients there are in total and simply increment this to get their own index, if one disregards the issues of people joining the peer-to-peer network at the same time. The \emph{KeyGen} algorithm outputs the users public/secret key pair $(PK_i,SK_i)$. We define a shorthand for several users key pairs; $\{(PK_i, SK_i) | i \in S \subseteq [1,N] $ as $(PK_i,SK_i)_{S}$ and likewise only for the public keys; $(PK_i)_{S}$. All of this depends on a security parameter $\lambda$, which is implicitly given to the algorithm. +\item[AHBEnc$(\mathbb{S}, (PK_i)_{S})$] This is run by any sender who may or may not be in $[1,N]$, as long as the sender knows the public keys of the receivers. It takes the recipient set $S \subseteq [1,N]$ and the public keys for $i \in S$; $(PK_i)_{S}$. Given that $|S| \leq n$, the algorithm returns a pair $(\text{Hdr}, K)$ where Hdr is the header, the encapsulated key, and $K$ is the message encryption key. +\item[AHBDec$(\mathbb{S}, j, sk_j, \text{Hdr}, (PK_i)_{S})$] This allows each recipient $i \in S$ to decrypt the message encryption key which is hidden in the header. If $|S| \leq n, j \in S$, then the algorithm returns the message encryption key $k$. +\end{description} + + +\subsection{Definition of Adaptive Security in AHBE} An \emph{Ad-Hoc Broadcast Encryption} system is defined to be \textbf{correct} if any user within the receiver set $S$ can decrypt a valid header. In an adaptively secure ad-hoc broadcast encryption system, the adversary is allowed access to all the public keys of the receivers and to ask for several secret keys before choosing the set of indices that the adversary wishes to attack. -Both the Challenger and an adversary \adv{A} are given the security parameter $\lambda$. \vsp{3mm} -\hsp{5mm}\textbf{Setup:}\quad The Challenger runs $KeyGen(i, n, N)$ to obtain the users' public key. These public keys and the public parameters are given to the adversary \adv{A}. \vsp{3mm} -\hsp{5mm}\textbf{Corruption:}\quad Adversary \adv{A} is allowed to adaptively issue private key queries for \emph{some} indices $i \in [1,N]$. \vsp{3mm} -\hsp{5mm}\textbf{Challenge:}\quad \adv{A} specifies some challenge set $S^* \subseteq [1,N]$ s.t. \adv{A} has corrupted none of the users $i$ within $S^*$. The challenger sets $(\text{Hdr}^*, k_0) \leftarrow \mathtt{AHBEnc}(S^*, (pk_i)_{S^*})$ and $k_1 \in_R \mathbb{K}$. The challenger sets $b \in_R \{0,1\}$. It gives $(\text{Hdr}^*, k_b)$ to the adversary \adv{A}. \vsp{3mm} -\hsp{5mm}\textbf{Guess:}\quad The adversary \adv{A} will output a bit $b' \in \{0,1\}$ as an attempt to guess the bit $b$. \adv{A} wins if $b' = b$. \\ \\ -\noindent -The advantage of \adv{A} is as expected; $Adv^{\texttt{AHBE}}_{\mathcal{A},n,N}(1^\lambda) = |Pr(b = b') - \frac{1}{2}|$. +% Both the Challenger and an adversary \adv{A} are given the security parameter $\lambda$. \\ +\begin{description} +\item[Setup] The Challenger runs $KeyGen(i, n, N)$ to obtain the users' public key. These public keys and the public parameters are given to the adversary \adv{A}. +\item[Key Extraction Phase] The Challenger runs $KeyGen(i, n, N)$ to obtain the users' public key. These public keys and the public parameters are given to the adversary \adv{A}. +\item[Challenge] \adv{A} specifies some challenge set $S^* \subseteq [1,N]$ s.t. \adv{A} has corrupted none of the users $i$ within $S^*$. The challenger sets $(\text{Hdr}^*, k_0) \leftarrow \mathtt{AHBEnc}(S^*, (PK_i)_{S^*})$ and $k_1 \in_R \mathbb{K}$. The challenger sets $b \in_R \{0,1\}$. It gives $(\text{Hdr}^*, k_b)$ to the adversary \adv{A}. +\item[Guess] The adversary \adv{A} will output a bit $b' \in \{0,1\}$ as an attempt to guess the bit $b$. \adv{A} wins if $b' = b$. + + The advantage of \adv{A} is as expected; $Adv^{\texttt{AHBE}}_{\mathcal{A},n,N}(1^\lambda) = |Pr(b = b') - \frac{1}{2}|$. +\end{description} -\subsection{Modelling \AHBE Systems} -As an \texttt{AHBE} system eliminate the trusted dealer, the \emph{setup} and \emph{keygen} step morph together, as there is no global \emph{setup} step required, but merely something each user should locally run. As all other schemes defined in this paper, this too is defined to be a \emph{Key Encapsulation Method} (\texttt{KEM}). \vsp{4mm} -\hsp{5mm}\textbf{KeyGen$(i,n,N)$:}\quad Let $N$ be defined as the number of potential receivers of the scheme and let $n \leq N$ be defined as the maximum number of receivers of an ad-hoc broadcast recipient group. The \emph{KeyGen} (this) algorithm is run by each user $i \in [1,N]$ to create her own public/secret key pair. A user takes $n, N$ as well as her own index $i \in [1,N]$. It's not mentioned how the user receives this index in practice, without simply having a central authority giving them, but one could imagine the users being aware of how many recipients there are in total and simply increment this to get their own index, if one disregards the issues of people joining the peer-to-peer network at the same time. The \emph{KeyGen} algorithm outputs the users public/secret key pair $(pk_i,sk_i)$. We define a shorthand for several users key pairs; $\{(pk_i, sk_i) | i \in S \subseteq [1,N] $ as $(pk_i,sk_i)_{S}$ and likewise only for the public keys; $(pk_i)_{S}$. All of this depends on a security parameter $\lambda$, which is implicitly given to the algorithm. \vsp{3mm} -\hsp{5mm}\textbf{AHBEnc$(\mathbb{S}, (pk_i)_{S})$:}\quad This is run by any sender who may or may not be in $[1,N]$, as long as the sender knows the public keys of the receivers. It takes the recipient set $S \subseteq [1,N]$ and the public keys for $i \in S$; $(pk_i)_{S}$. Given that $|S| \leq n$, the algorithm returns a pair $(\text{Hdr}, K)$ where Hdr is the header, the encapsulated key, and $K$ is the message encryption key. \vsp{3mm} -\hsp{5mm}\textbf{AHBDec$(\mathbb{S}, j, sk_j,$}$ \text{Hdr}, (pk_i)_{S})$\textbf{:}\quad This allows each recipient $i \in S$ to decrypt the message encryption key which is hidden in the header. If $|S| \leq n, j \in S$, then the algorithm returns the message encryption key $k$. \subsection{Key Homomorphism} As mentioned, the authors present a transformation for any key homomorphic BE scheme. As such, we'll quickly define this. @@ -401,7 +442,7 @@ As mentioned, the authors present a transformation for any key homomorphic BE sc \begin{definition}[Key Homomorphism] \normalfont Let $\oplus : \Gamma \times \Gamma \rightarrow \Gamma$, $\odot : \Omega \times \Omega \rightarrow \Omega$ and $\ocircle : \mathbb{K} \times \mathbb{K} \rightarrow \mathbb{K}$ be efficient operations in the public key space $\Gamma$, the decryption key space $\Omega$ and the message encryption key space $\mathbb{K}$, respectively. A BE scheme is then said to be homomorpic if the following conditions hold for all $S \subseteq [1,N]$ for $|S| \leq n$ and all $i \in S$: \begin{enumerate} - \item If $(PK_1, SK_1) \leftarrow $\texttt{BSetup}$(n,N)$, where BSetup is the setup algorithm for the BE scheme, \vsp{2mm} + \item If $(PK_1, SK_1) \leftarrow $\texttt{BSetup}$(n,N)$, where BSetup is the setup algorithm for the BE scheme, $n$ is the size of the receiver set and it is allowed to be of size $N$, \vsp{2mm} $(PK_2, SK_2) \leftarrow $\texttt{BSetup}$(n,N)$, \vsp{2mm} $(d_1(i) \la $ \texttt{BKeyGen}$(i, SK_1)$, \vsp{2mm} $(d_2(i) \la $ \texttt{BKeyGen}$(i, SK_2)$, \vsp{2mm} @@ -435,16 +476,17 @@ Within Figure \ref{fig:KHBEMatrix}, the $PK_i$ is the public key of the BE insta % TODO: Be very consistent in what you call the public keys of the AHBE scheme! \subsubsection{Formal Conversion from KHBE to AHBE} -% TODO: Perhaps mention that anything with B infront of it, is something belonging to a broadcast scheme -As discussed, an AHBE scheme consist of three algorithms; \texttt{KeyGen, AHBEnc, AHBDec}. \vsp{4mm} -\hsp{5mm}\textbf{KeyGen:}\quad Let the potential receivers be a set $\{1,\dots,N\}$. Let $n \leq N$ be the maximum number of recipients within a single broadcast. For simplicity, we assume that $n = N$. Generate an instance $\pi$ of a KHBE scheme and let this be a system parameter. The KeyGen algorithm then does the following: +As discussed, an AHBE scheme consist of three algorithms; \texttt{KeyGen, AHBEnc, AHBDec}. + +\begin{description} +\item[KeyGen] Let the potential receivers be a set $\{1,\dots,N\}$. Let $n \leq N$ be the maximum number of recipients within a single broadcast. For simplicity, we assume that $n = N$. Generate an instance $\pi$ of a KHBE scheme and let this be a system parameter. The KeyGen algorithm then does the following: \begin{itemize} \item For receiver $i \in [1,n]$, invoke the setup algorithm of the BE Scheme used by the underlying KHBE scheme; \texttt{BSetup}, to generate a public/private key pair $(PK_i, SK_i)$ for the KHBE scheme. \item Receiver $i$ runs \texttt{BKeyGen} and obtains $d_i(j) \leftarrow \text{BKeyGen}(j,SK_i)$ for $j = 1,\dots,n$. The public key of the specific receiver $i$ in the AHBE scheme is then: $$PK_{AHBE} = \{d_i(j) | 1 \leq i \neq j \leq n\} \cup \{PK_i\}$$ Where $PK_i$ came from the BSetup call. \item The private key of receiver $i$ is then set to be the \emph{unpublished} $d_i(i)$. -\end{itemize} \vspace{3mm} -\hsp{5mm}\textbf{AHBEnc:}\quad Computes the header and key for a receiver set $S$ in the following way: + \end{itemize} + \item[AHBEnc] Computes the header and key for a receiver set $S$ in the following way: \begin{itemize} \item Pick receiver set $S \subseteq [1,n]$ \item Compute the public key of the broadcast: @@ -452,11 +494,13 @@ As discussed, an AHBE scheme consist of three algorithms; \texttt{KeyGen, AHBEnc \item Invoke the underlying KHBE encryption algorithm BEnc$(\cdot)$ in order to compute the header of the key: $$(Hdr, k) \la BEnc(S, PK_{\mathtt{AHBE}})$$ and send $(S, Hdr)$ to the receiver set. -\end{itemize} \vspace{3mm} -\hsp{5mm}\textbf{AHBDec:}\quad Due to the underlying KHBE scheme, the receiver $i \in S$ can compute a decryption key for the \texttt{AHBE} public key $PK_{AHBE}$ by computing: +\end{itemize} +\item[AHBDec] Due to the underlying KHBE scheme, the receiver $i \in S$ can compute a decryption key for the \texttt{AHBE} public key $PK_{AHBE}$ by computing: $$d(i) = d_i(i) \odot\{\odot_{j \in S}^{j \neq i} d_j(i)\} = \odot_{j \in S} d_j(i)$$ As only user $\U_i$ knows $d_i(i)$ only she can compute $d(i)$. Due to the homomorphism of the KHBE scheme, $d(i)$ is a valid decryption key for the public key $PK_{AHBE}$, as long as $i \in S$. To perform this decryption, each user $\U_i$ for $i \in S$, invokes the KHBE decryption algorithm BDec$(\cdot)$; $$k = BDec(S, i, d(i), Hdr, K) $$ +\end{description} + \subsection{Proof of Security} The security of the AHBE scheme is proven by a reduction to the underlying KHBE scheme. As such, if the underlying KHBE scheme is presumed to be secure, so should the AHBE scheme. Furthermore, the AHBE scheme has semi-static security, if the KHBE scheme has adaptive security. @@ -511,44 +555,53 @@ This transformation would have to be both randomised and OTP, as otherwise if we Something something game where the algorithm can use this adversary to transform the header and thus the key into something else which he can then use to distinguish if the original underlying key was random or was constructed properly regarding the rest of the receiver set. \subsection{An AHBE Implementation} -To end up with a Semi-statically secure AHBE scheme, we first need to produce an adaptively secure BE scheme which is key homomorphic. To this end, we use the scheme defined in \ref{sec:BE} coupled with the generic transformation from Semi-static to Adaptive by Gentry and Waters \cite{GentryWaters}. Note that $g, h_{i,s} \text{ for } i \in [1,n], s \in \{0,1\}$ be independent generators of a group $\mathbb{G}$ of prime order $p$, with a bilinear map $e : \Gm \times Gm \ra \Gm_{T}$. \vsp{5mm} -\-\hspace{5mm}\textbf{BSetup$(\lambda,n)$:}\quad Let $\alpha \in_R \mathbb{Z}_p$ and compute $g^\alpha, e(g,g)^\alpha$. The BE public key PK is then; $PK = e(g,g)^\alpha$ and the private key is $SK = g^\alpha$. \vspace{3mm} \\ -\-\hspace{5mm}\textbf{BKeyGen$(i, SK)$:}\quad Set $r_i \in_R \mathbb{Z}_p$, $s_i \in_R \{0,1\}$. Output decryption key for user $i$; $d_i = (d_{i,0},\dots,d_{i,n})$: -$$d_i \leftarrow (d_{i,0},\dots,d_{i,n}) \quad \text{ where } \quad d_{i,0} = g^{-r_i}, \quad d_{i,i} = g^\alpha h^{r_i}_{i,s_i}, \quad d_{i,j \text{ for } i\neq j} h^{r_i}_{j,s_i}$$ \vspace{3mm} \\ -\-\hspace{5mm}\textbf{BEnc$(S, PK)$:}\quad Set $t \in_R \Z_p$ and $$Hdr = (C_1,C_2, C_3), \quad \text{ where }\quad C_1 = g^t, \quad C_2 = (\prod_{i \in S}h_{i,0})^t,\quad C_3 = (\prod_{i \in S}h_{i,1})^t $$ Finally, set $K = e(g,g)^{t\cdot \alpha}$. Output $(\hdr, K)$. Send $(S, \hdr)$ to the receivers. \vspace{3mm} \\ -\-\hspace{5mm}\textbf{BDec}$(S,i,d_i,\text{Hdr}, PK)$\textbf{:}\quad Check if $i \in S$, if so; let $d_i = (d_{i,0},\dots,d_{i,n})$, Hdr$=(C_1,C_2,C_3)$, output $$k =e(d_{i,i} \cdot \prod_{j \in S \setminus \{i\}} d_{i,j}, C_1) \cdot e(d_{i,0}, C_2)$$ \vsp{3mm} -The correctness is the exact same as defined in Section \ref{sec:GentryWatersConst}. +To end up with a Semi-statically secure AHBE scheme, we first need to produce an adaptively secure BE scheme which is key homomorphic. To this end, we use the scheme defined in \ref{sec:BE} coupled with the generic transformation from Semi-static to Adaptive by Gentry and Waters \cite{GentryWaters}. Note that $g, h_{i,s} \text{ for } i \in [1,n], s \in \{0,1\}$ be independent generators of a group $\mathbb{G}$ of prime order $p$, with a bilinear map $e : \Gm \times Gm \ra \Gm_{T}$. -As we desire a key homomorphic scheme, we define the aggregations like so; $PK_1 \oplus PK_2 = PK_1PK_2$, $d_{1_i} \odot d_{2_i} = (d_{1_{i,0}}, d_{2_{i,0}}, \dots, d_{1_{i,n}}, d_{2_{i,n}})$ and $k_1 \ocircle k_2 = k_1k_2$. Finally we instantiate the AHBE scheme: \vsp{4mm} -\hsp{5mm}\textbf{KeyGen:}\quad Let the potential receivers be a set $\{1,\dots,N\}$. Let $n \leq N$ be the maximum number of recipients within a single broadcast. For simplicity, we assume that $n = N$. Generate an instance $\pi$ of a KHBE scheme and let this be a system parameter. The KeyGen algorithm then does the following: +We define all algoritms prefixed by $AB$ to be an \emph{adaptively secure} \texttt{BE} algorithm. +\begin{description} +\item[ABSetup$(n, \ell)$] Let $\alpha \in_R \mathbb{Z}_p$ and compute $g^\alpha, e(g,g)^\alpha$. The BE public key PK is then; $PK = e(g,g)^\alpha$ and the private key is $SK = g^\alpha$. +\item[ABKeyGen$(i, SK)$] Set $r_i \in_R \mathbb{Z}_p$, $s_i \in_R \{0,1\}$. Output decryption key for user $i$; $d_i = (d_{i,0},\dots,d_{i,n})$: + $$d_i \leftarrow (d_{i,0},\dots,d_{i,n}) \quad \text{ where } \quad d_{i,0} = g^{-r_i}, \quad d_{i,i} = g^\alpha h^{r_i}_{i,s_i}, \quad d_{i,j \text{ for } i\neq j} h^{r_i}_{j,s_i}$$ +\item[ABEnc$(S, PK)$] Set $t \in_R \Z_p$ and $$Hdr = (C_1,C_2, C_3), \quad \text{ where }\quad C_1 = g^t, \quad C_2 = (\prod_{i \in S}h_{i,0})^t,\quad C_3 = (\prod_{i \in S}h_{i,1})^t $$ Finally, set $K = e(g,g)^{t\cdot \alpha}$. Output $(\hdr, K)$. Send $(S, \hdr)$ to the receivers. +\item[ABDec$(S,i,d_i,\text{Hdr}, PK)$] Check if $i \in S$, if so; let $d_i = (d_{i,0},\dots,d_{i,n})$, Hdr$=(C_1,C_2,C_3)$, output $$k =e(d_{i,i} \cdot \prod_{j \in S \setminus \{i\}} d_{i,j}, C_1) \cdot e(d_{i,0}, C_2)$$ + + The correctness is the exact same as defined in Section \ref{sec:GentryWatersConst}. +\end{description} + +As we desire a key homomorphic scheme, we define the aggregations like so; $PK_1 \oplus PK_2 = PK_1PK_2$, $d_{1_i} \odot d_{2_i} = (d_{1_{i,0}}, d_{2_{i,0}}, \dots, d_{1_{i,n}}, d_{2_{i,n}})$ and $k_1 \ocircle k_2 = k_1k_2$. Finally we instantiate the AHBE scheme: +% TODO: Fix it so that we are consistent with key of AHBE and user and BE +\begin{description} +\item[KeyGen$(i, n, N )$] Let the potential receivers be a set $\{1,\dots,N\}$. Let $n \leq N$ be the maximum number of recipients within a single broadcast. For simplicity, we assume that $n = N$. Generate an instance $\pi$ of a KHBE scheme and let this be a system parameter. The KeyGen algorithm then does the following: \begin{itemize} -\item For receiver $i \in [1,n]$, invoke the \texttt{BSetup}, to generate a public/private key pair $(PK_i, SK_i) = e(g,g)^{\alpha_i}, g^{\alpha_i}$ for the KHBE scheme.. -\item Receiver $i$ runs \texttt{BKeyGen} and obtains $d_i(j) \leftarrow \text{BKeyGen}(j,SK_i)$ for $i,l,j = 1,\dots,n$ where $d_i(j) = (d_{i,0,j}, \dots, d_{i,n,j})$ such that: \\ +\item For receiver $i \in [1,n]$, invoke the \texttt{ABSetup}, to generate a public/private key pair $(PK_i, SK_i) = e(g,g)^{\alpha_i}, g^{\alpha_i}$ for the KHBE scheme.. +\item Receiver $i$ runs \texttt{ABKeyGen} and obtains $d_i(j) \leftarrow \mathtt{ABKeyGen}(j,SK_i)$ for $i,l,j = 1,\dots,n$ where $d_i(j) = (d_{i,0,j}, \dots, d_{i,n,j})$ such that: \\ $$d_{i,0,j} = g^{-r_{i,j}},\quad d_{i,j,j} = g^{\alpha_i}h^{r_{i,j}}_{j,s_i}, \quad d_{i,l,j} = h^{r_{i,j}}_{l,s_i},$$ \\ For $r_{i,j} \in_R \mathbb{Z}_p$, $s_i \in_R \{0,1\}$. Receiver $i$'s private key is then $d_i(i)$. \\ \item The public key of the specific receiver $i$ in the AHBE scheme is then: \\ $$PK_{AHBE_i} = \{d_i(j) | 1 \leq i \neq j \leq n\} \cup \{PK_i\}$$ Where $PK_i$ came from the BSetup call. -\end{itemize} \vspace{3mm} -\hsp{5mm}\textbf{AHBEnc:}\quad Computes the header and key for a receiver set $S$ in the following way: +\end{itemize} +\item[AHBEnc$(S, (PK_i)_S)$] Computes the header and key for a receiver set $S$ in the following way: \begin{itemize} \item Pick receiver set $S \subseteq [1,n]$ \item Compute the public key of the broadcast: $$PK_{AHBE} = \oplus_{i \in S} PK_i = \prod_{i \in S} PK_i = e(g,g)^{\sum_{i \in S} \alpha_i}$$ - Note that the $PK_i$'s used here are in fact the ones from the original \texttt{BSetup} call, so it is contained within $PK_{AHBE_i}$. -\item Invoke the underlying KHBE encryption algorithm BEnc$(\cdot)$ in order to compute the header of the key $\hdr = BEnc(S, PK_{AHBE}) = (C_1,C_2,C_3)$ for: + Note that the $PK_i$'s used here are in fact the ones from the original \texttt{ABSetup} call, so it is contained within $PK_{AHBE_i}$. +\item Invoke the underlying KHBE encryption algorithm BEnc$(\cdot)$ in order to compute the header of the key $\hdr = \mathtt{ABEnc}(S, PK_{AHBE}) = (C_1,C_2,C_3)$ for: $$C_1 = g^t, \quad C_2 = (\prod_{i \in S}h_{i,0})^t,\quad C_3 = (\prod_{i \in S}h_{i,1})^t$$ and for the secret key: - $$k = PK_{AHBE} = e(g,g)^{t \cdot \sum_{i \in S} \alpha_i}$$ + $$k = PK_{AHBE}^t = e(g,g)^{t \cdot \sum_{i \in S} \alpha_i}$$ for $t \in_R \mathbb{Z}_p$ and send $(S, \hdr)$ to the receiver set. -\end{itemize} \vspace{3mm} -\hsp{5mm}\textbf{AHBDec:}\quad Due to the underlying KHBE scheme, the receiver $i \in S$ can compute a decryption key for the \AHBE public key $PK_{AHBE}$ by computing: +\end{itemize} +\item[AHBDec$(S, j, sk_j, \hdr, (PK_i)_S)$] Due to the underlying KHBE scheme, the receiver $i \in S$ can compute a decryption key for the \AHBE public key $PK_{AHBE}$ by computing: \begin{align*} d(i) &= d_i(i) \odot\{\odot_{j \in S}^{j \neq i} d_j(i)\} = \odot_{j \in S} d_j(i) \\ &= (\prod_{j \in S} d_{j,0,i}, \dots, \prod_{j \in S} d_{j,n,i}) \end{align*} -As only user $\U_i$ knows $d_i(i)$ only she can compute $d(i)$. Due to the homomorphism of the KHBE scheme, $d(i)$ is a valid decryption key for the public key $PK_{AHBE}$, as long as $i \in S$. To perform this decryption, each user $\U_i$ for $i \in S$, invokes the KHBE decryption algorithm BDec$(\cdot)$; -$$k = BDec(S, i, d(i), Hdr, K) $$ +As only user $\U_i$ knows $d_i(i)$ only she can compute $d(i)$. Due to the homomorphism of the KHBE scheme, $d(i)$ is a valid decryption key for the public key $PK_{AHBE}$, as long as $i \in S$. To perform this decryption, each user $\U_i$ for $i \in S$, invokes the KHBE decryption algorithm \texttt{ABDec}$(\cdot)$; +$$k = \mathtt{ABDec}(S, i, d(i), Hdr, PK_{AHBE}) $$ +\end{description} + \subsection{Attempt at Reducing the \AHBE Instantion to BDHE-Problem} Seeing that the reduction had some non-salveable issues regarding the decryption keys of the target set $S^*$, we attempted to reduce their instantiation directly to the BDHE problem, which the original scheme due to Gentry and Waters was originally reduced to, to prove its Semi-static security. We recall why the original reduction worked: The values $h_1, \dots, h_n$ are originally picked completely at random from the target group of the bilinear map, $\Gm_T$, which allowed the original reduction to sample $y_1, \dots, y_n$ and lift the generator of the group $\Gm$, $g$, to specific values of $y_i$, whenever we needed to know the discrete log of $h_i$, specifically when $i \in \tilde{S}$, i.e. the set of potential receivers, $h_i = g^{y_i}$. Furthermore, for the rest of the users, $i \not\in \tilde{S}$, they generated the values of $h_i = g^{y_i + a^i}$ meaning that the adversary \adv{B} could in fact not compute the discrete log and would thus not have a chance of computing the header information, if the adversary \adv{A} decided to attack this user. Due to the semi-static nature however, this is not something they have to worry of, as \adv{A} has already commited to $\tilde{S}$. The definition of the $h_i$ for $i \not\in \tilde{S}$, means that \adv{B} can properly answer the extraction queries for these users, as \adv{B} defines the values $r_i$ in such a way, that the exponents cancels out in $d_{i,i} = g^{\alpha}h^{r_i}_i$ and we do not have to bother trying to compute the discrete log of $g^\alpha$, specically the $a^{n+1}$ part of $\alpha = y_0 \cdot a^{n+1}$. The issues then arise, as all the $h_i$ values are required for the \AHBE scheme, essentially meaning we can not fake some and define some in a very specific way, as they are \emph{all} used for the different keys, regardless of the user $i$ being in the attack set $i \in \tilde{S}$, as all the users are using the same underlying KHBE scheme. This results in the algorthim \adv{B} not being capable of answering extraction queries for any user i outside of the attack set, $i \not\in \tilde{S}$, as \adv{B} also has to generate all the $h$ values in such a way that he can compute the discrete log. @@ -563,11 +616,24 @@ As such, we conclude that, if there is a reduction to be found from the \AHBE in \nocite{*} \bibliography{refs} +\newpage % https://tex.stackexchange.com/questions/49643/making-appendix-for-thesis \begin{appendices} + + + + + \includepdf[pages=1,pagecommand={\section{\texttt{IBE} Security Proof} \label{app:IBE-Sec} },width=\textwidth]{papers/IBESecProof.pdf} + + \includepdf[pages=2-,pagecommand={},width=\textwidth]{papers/IBESecProof.pdf} + % TODO: Properly crop the construction - \chapter{\texttt{DTPKE}-scheme} - \includepdf[pages=-,pagecommand={},width=\textwidth]{papers/DTPKE-Const.pdf} + + +\includepdf[pages=1,pagecommand={\section{\texttt{DTPKE} Scheme} \label{app:DTPKE-Scheme}},width=\textwidth]{papers/DTPKE-Const.pdf} + + \includepdf[pages=2-,pagecommand={},width=\textwidth]{papers/DTPKE-Const.pdf} + \end{appendices} \end{document} \ No newline at end of file