design.tex (30424B)
1 Frosix enables secure and trustworthy signing without relying on the security of a specific device. 2 This is accomplished through the use of a threshold signature scheme, 3 where the private key is split among several entities, known as \Glspl{provider}. 4 \custind Additionally, a distributed key generation ensures that the private key is never instantiated in a single place, 5 preventing the violation of confidentiality of the private key through the compromise of a single device. 6 7 To further enhance security, Frosix incorporates multifactor authentication 8 for each signing operation, allowing users to choose from various combinations of authentication factors. 9 \custind Considering the untrusted nature of the \Glspl{provider}, they are required to demonstrate 10 the integrity of the received \gls{authentication data} during the key generation. 11 12 To reduce the attack surface of a \Gls{provider}, the long-term stored data is either salted or encrypted, 13 and the specific nonce and secret key used remain unknown. 14 15 \section{Adversary Model} 16 Frosix is developed under the assumption of a strong and capable adversary with the ability to compromise 17 any user device and \Gls{provider}, but not more than $k-1$. 18 The adversary possesses full control over the network infrastructure, 19 including mobile networks, and can force companies, such as internet service providers, to cooperate. 20 Furthermore, the adversary is considered omnipresent throughout key generation and signing process. 21 22 Despite the adversary's outstanding capabilities, the adversary is not able to \gls{brute-force} a salted hash 23 or break state-of-the-art public key cryptography. 24 \custind Moreover, the assumption made at the beginning is further tightened. 25 It is assumed, that the adversary is not able to control the devices and \Glspl{provider} involved in more than $k-1$ authentication procedures. 26 27 Frosix relies on the presence of multiple authentication and tamper control devices, 28 and assumes that at least one device is not compromised. 29 30 \section{Adaptions of FROST} 31 Frosix introduces modifications to the key generation and signing scheme FROST. 32 The changes to the original are marked in red. 33 34 \subsubsection{Frosix Key Generation} \label{chap:frosix_key_generation} 35 The changes from Frosix key generation are: 36 \begin{itemize} 37 \item \textbf{Deterministic Commitments}: A \Gls{provider} uses the submitted \textit{nonce}, 38 the \textit{secret provider salt} and some more values (see chapter \ref{chap:rnd}) to derive the secret polynomial. 39 \item \textbf{Unicast Communication}: In contrast to the original FROST key generation, 40 all communication of a key generation process in Frosix goes through the Frosix client. 41 \newline This requires further adjustments: 42 \begin{itemize} 43 \item The Frosix key generation is a three round protocol. 44 \item The secret shares are provider-to-provider encrypted, which means that only the legitimate provider can perform the decryption. 45 \item The Elliptic curve Diffie-Hellmann Ephemeral (ECDHE) scheme is used for the key exchange. 46 \item To prevent a man-in-the-middle attack, the public key used in the ECDHE key exchange is included in the challenge of the zero knowledge proof. 47 \end{itemize} 48 \item \textbf{Authentication Data}: In order to be able to authenticate a signing request, the Frosix client computes an \gls{authentication hash} $auth\_hash$, 49 e.g. a salted hash over a phone number or an email address. A \Gls{provider} includes this hash to derive the commitment. 50 \item \textbf{Signed Group Public Key}: At the end, every \Gls{provider} stores the key data, together with the authentication hash in the database, 51 signs the resulting group public key and the received authentication data with its long-term public key. 52 \end{itemize} 53 54 \begin{center} 55 \textbf{Round 1} 56 \end{center} 57 58 {\large $Frosix\ Client$} \hfill {\large $\displaystyle P_{i,\ 0\ <\ i\ \leq \ n}$} 59 \par \textcolor{red}{\textbf{Step 1}: The \(Frosix\ client\) samples and sends a \textit{context\_string}, 60 together with the salted hash of the \textit{authentication data} $auth\_hash_i$ to each \(P_i\):} 61 62 {\small $\displaystyle \textcolor{red}{(context\_string_1, ..., context\_string_1) \xleftarrow{\$}}$} 63 64 \begin{center} 65 {\small $\displaystyle \textcolor{red}{(context\_string_i, auth\_hash_i) \longrightarrow} $} 66 \end{center} 67 68 \textbf{Step 2}: Every $P_i$ derives a \textcolor{red}{$seed$ from the $context\_string_i$ and $auth\_hash_i$, 69 and uses this $seed$ to} derive $t$ values $(a_{i0}, ..., a_{i(t-1)})$. 70 These values are then used as coefficients to define a degree $t-1$ polynomial ($f_i(x)$): 71 72 \begin{flushright} 73 {\small $\displaystyle (a_{i0}, ..., a_{i(t-1)}) \leftarrow \textcolor{red}{KDF(seed, secret\_salt_i)}$} \\ 74 {\small $\displaystyle f_i(x) \ =\ \sum _{j=0} ^{t-1} a_{ij}x^j$} 75 \end{flushright} 76 77 \textbf{Step 3}: Every \(P_i\) \textcolor{red}{samples an \textit{ephemeral key pair} $(esk_i, epk_i)$ and} computes a proof of knowledge to the secret \(a_{i0}\): 78 79 \begin{flushright} 80 {\small \textcolor{red}{$\displaystyle (esk_i, epk_i) \xleftarrow{\$}$}} \\ 81 {\small $\displaystyle k \xleftarrow{\$} \mathbb{Z}_q$} \\ 82 {\small $\displaystyle R_i \ =\ g^k$} \\ 83 {\small $\displaystyle c_i \ =\ H(i, "DKG-Challenge", g^{a_{i0}}, R_i, \textcolor{red}{epk_i})$} \\ 84 {\small $\displaystyle z_i \ =\ k + a_{i0} \cdot c_i$} \\ 85 {\small $\displaystyle \sigma_i \ =\ (R_i, z_i)$} 86 \end{flushright} 87 88 \textbf{Step 4}: Every participant \(P_i\) computes a public commitment \(\vec{C}\): 89 90 \begin{flushright} 91 {\small $\displaystyle \phi_{ij} \ =\ g^{ij}, 0 \leq j \leq t-1$} \\ 92 {\small $\displaystyle \vec{C_i} \ =\ \langle \phi_{i0}, ..., \phi_{i(t-1)} \rangle$} 93 \end{flushright} 94 95 \textbf{Step 5}: Every \(P_i\) sends \((\vec{C_i}, \sigma_i, \textcolor{red}{epk_i})\) to \textcolor{red}{\(Frosix\ client\)}: 96 97 \begin{center} 98 {\small $\displaystyle \longleftarrow (\vec{C_i}, \sigma_i, \textcolor{red}{epk_i})$} 99 \end{center} 100 101 \begin{center} 102 \textbf{Round 2} 103 \end{center} 104 105 {\large $Frosix\ Client$} \hfill {\large $\displaystyle P_{i,\ 0\ <\ i\ \leq \ n}$} 106 \par \textcolor{red}{\textbf{Step 1}: \(Frosix\ client\) sends \((\vec{C_l}, \sigma_l, \textcolor{red}{epk_i})\) to each \(P_i\):} 107 108 \begin{center} 109 {\small \textcolor{red}{$\displaystyle (\vec{C_l}, \sigma_l, \textcolor{red}{epk_i}) \longrightarrow $}} 110 \end{center} 111 112 \textbf{Step 2}: Upon receiving (\(\vec{C_l}, \sigma_l, \textcolor{red}{epk_i}\)) from \textcolor{red}{\(Frosix\ client\)}, each participant \(P_i\) verifies \(\sigma_l\): 113 114 \begin{flushright} 115 {\small $\displaystyle c_l \ =\ H(l, "DKG-Challenge", \phi_{l0}, R_l, \textcolor{red}{epk_l})$} \\ 116 {\small $\displaystyle R_l \overset{?}{=} g^{z_l} \ \cdot \phi_{l0}^{-c_l}$} 117 \end{flushright} 118 119 \par \textbf{Step 3}: Each $P_i$ \textcolor{red}{encrypts the secret shares ($l, f_i(l)$) for every other participant, 120 using the key $ek_{il}$ which is derived with the help of ECDHE, using another ephemeral key pair $(esk_{il}, epk_{il})$ for each other $P_i$}. 121 Each $P_i$ sends to \textcolor{red}{$Frosix\ client$ the encrypted secret shares $(es_{il})$ together with the ephemeral public keys $epk_{il}$}. 122 123 \begin{flushright} 124 {\small \textcolor{red}{$(esk_{il}, epk_{il}) \xleftarrow{\$}$ for $l \in \{1 \ldots n\} \setminus \{i\}$}} \\ 125 {\small \textcolor{red}{$ek_{il} := ECDHE_{esk_{il}}(epk_i)$ for $l \in \{1 \ldots n\} \setminus \{i\}$}} \\ 126 {\small \textcolor{red}{$es_{il} := E_{ek_{il}}(l,f_i(l))$ for $l \in \{1 \ldots n\} \setminus \{i\}$}} 127 \end{flushright} 128 129 \begin{center} 130 {\small $\displaystyle \longleftarrow (\textcolor{red}{es_{il}, epk_{il}})$} 131 \end{center} 132 133 \begin{center} 134 \textbf{Round 3} 135 \end{center} 136 137 {\large $Frosix\ Client$} \hfill {\large $\displaystyle P_{i,\ 0\ <\ i\ \leq \ n}$} 138 \par \textcolor{red}{\textbf{Step 1}: The \(Frosix\ client\) sends $(es_{li}, epk_{li})$ to each \(P_i\):} 139 140 \begin{center} 141 {\small \textcolor{red}{$\displaystyle (es_{li}, epk_{li}) \longrightarrow$}} 142 \end{center} 143 144 \textbf{Step 2}: Each \(P_i\) \textcolor{red}{decrypts the secret share, using their $esk_i$ in ECDHE to derive the key $ek_{il}$, and} verifies its received shares: 145 146 \begin{flushright} 147 {\small \textcolor{red}{$ek_{il} := ECDHE_{esk_i}(epk_{li})$ for $l \in \{1 \ldots n\} \setminus \{i\}$}} \\ 148 {\small \textcolor{red}{$(l, f_i(l)) := D_{ek_{il}}(es_{il})$ for $l \in \{1 \ldots n\} \setminus \{i\}$}} \\ 149 {\small $\displaystyle g^{f_l(i)} \ \overset{?}{=} \ \prod _{k=0} ^{t-1} \phi_{lk}^{i^k mod \ q}$} 150 \end{flushright} 151 152 \textbf{Step 3}: Each \(P_i\) calculates their long-lived private signing share \(s_i\): 153 154 \begin{flushright} 155 {\small $\displaystyle s_i \ =\ \sum _{l=1} ^n f_l(i)$} 156 \end{flushright} 157 158 \textbf{Step 4}: Each \(P_i\) calculates their public verification share \(Y_i\) and the group's public key \(Y\): 159 160 \begin{flushright} 161 {\small $\displaystyle Y_i \ =\ g^{s_i}$} \\ 162 {\small $\displaystyle Y \ =\ \prod _{j=1} ^n \phi_{j0}$} 163 \end{flushright} 164 165 \textbf{Step 5}: Each \(P_i\) returns the group's public key and a signature ($\phi_i$) over $(Y, auth\_hash_i)$, proving \(P_i\) was part of this key generation process 166 and the correct authentication data were received: 167 168 \begin{center} 169 {\small \textcolor{red}{$\displaystyle \longleftarrow (Y, \phi_i)$}} 170 \end{center} 171 172 \textcolor{red}{\textbf{Step 6}: \(Frosix\ client\) compares all received public keys \(Y\) and verifies the signature, 173 aborting if one of the public key differs from the others or if the signature verification fails.} 174 175 Note: The values $context\_string_i$ and $auth\_hash_i$ are also submitted in round 2 and 3 to each $P_i$, 176 to let them compute the values $(a_{i0}, ..., a_{i(t-1)})$, without the need to store the $seed$ in the database between the rounds. 177 178 \subsubsection{Frosix Sign} 179 In Frosix Sign, a challenge must be requested for every \Gls{provider}, 180 for which the user defined a \gls{challenge-code} based authentication. 181 There is therefore an additional round in Frosix Sign. 182 \newline Besides this, the only difference from the original FROST scheme occurs in round 2 (round 1 from FROST). 183 \custind The modification includes the hash of the message into the commitments. 184 By making this change, the message becomes linked to the \gls{commitment}, 185 preventing the commitment from being used for any other message. 186 187 \begin{center} 188 \textbf{Round 1} 189 \end{center} 190 191 {\large \(Frosix\ Client\)} \hfill {\large $\displaystyle P_{i\ \in \ S}$} 192 \par \textbf{Step 1}: The user chooses the set $S$, \(k\ of\ n\) parties and the $Frosix\ client$ hashes the input message: 193 194 {\small $\displaystyle S\ =\ \{P_1, ..., P_k\},\ 0 < P_i \leq n$} \\ 195 {\small \textcolor{red}{$\displaystyle h \ =\ H(\$message)$}} 196 197 \textbf{Step 2}: \textcolor{red}{$Frosix\ client$ sends to each $P_i$ a \textit{challenge request}, 198 containing the hash of the message ($h$), the hash of the encryption key ($enc\_key\_h_i$), 199 the \gls{authentication method} ($auth\_method_i$), the authentication data ($auth\_data_i$) and the authentication nonce ($auth\_nonce_i$). 200 But only if a challenge-code based authentication method was chosen for $P_i$ during the key generation.} 201 202 \begin{center} 203 {\small \textcolor{red}{$\displaystyle (h, enc\_key\_h_i, auth\_method_i, auth\_data_i, auth\_nonce_i) \longrightarrow$}} 204 \end{center} 205 206 \textbf{Step 3}: \textcolor{red}{Each $P_i$ verifies if the hash of over $auth\_data_i$ and $auth\_nonce_i$ match the stored $auth\_hash_i$ 207 and responds with the $challenge\_code_i$ over a different channel, depending on the $auth\_method_i$, to the submitted address in $auth\_data_i$.} 208 209 \begin{flushright} 210 {\small \textcolor{red}{$\displaystyle H(auth\_data_i, auth\_nonce_i, "FROSIX") \overset{?}{=} auth\_hash$}} 211 \end{flushright} 212 213 \begin{center} 214 {\small $\displaystyle challenge\_code_i \longrightarrow $} 215 \end{center} 216 217 \begin{center} 218 \textbf{Round 2} 219 \end{center} 220 221 {\large \(Frosix\ Client\)} \hfill {\large $\displaystyle P_{i\ \in \ S}$} 222 \par \textbf{Step 1}: \textcolor{red}{The $Frosix\ client$ sends to each $P_i$ the hash of the message ($h$) and the 223 challenge data ($challenge\_data_i$), which is either a hash of the received $challenge\_code_i$ or the signature over $h$ (using the secret answer to derive the signing key, see chapter~\ref{chap:rnd}), in case of a \textit{security question}.} 224 225 \begin{center} 226 {\small \textcolor{red}{$\displaystyle (h, challenge\_data_i) \longrightarrow$}} 227 \end{center} 228 229 \textbf{Step 2}: Each $P_i$ first verifies the $challenge\_data_i$ and then samples \textcolor{red}{a random $seed_i$. 230 Together with the hash of the message, each \(P_i\) derives} two random commitment values and send those back to the \(Frosix\ client\). 231 232 \begin{flushright} 233 {\small \textcolor{red}{$\displaystyle seed_i \xleftarrow{\$}$}} \\ 234 {\small $\displaystyle (d_i,e_i) \textcolor{red}{\leftarrow KDF(m, seed_i)}$} \\ 235 {\small $\displaystyle (D_i,E_i) \ = \ (g^{d_i},g^{e_i})$} 236 \end{flushright} 237 238 \begin{center} 239 {\small $\displaystyle \longleftarrow (D_i,E_i)$} 240 \end{center} 241 242 \begin{center} 243 \textbf{Round 3} 244 \end{center} 245 246 {\large \(Frosix\ Client\)} \hfill {\large $\displaystyle P_{i\ \in \ S}$} 247 248 \textbf{Step 1}: The $Frosix\ client$ fetches all commitments, builds the set $B \ = \ \langle i,D_i,E_i \rangle, i \in S$ and sends $B$ together with the hash of the message to all $P_i$ in $S$. 249 250 {\small $\displaystyle B \ =\ \langle ( i,D_{i} ,E_{i})\rangle _{i}{}_{\in }{}_{S}$} 251 252 \begin{center} 253 {\small $\displaystyle ( h,\ B) \longrightarrow $} 254 \end{center} 255 256 \textbf{Step 2}: After receiving $(h,\ B)$, each $P_i$ validates the message $h$, and then checks $D_l,E_l \in \mathbb{G}^*$ for each commitment in $B$, aborting if either check fails. 257 258 \textbf{Step 3}: Each $P_i$ then computes the set of binding values. 259 260 \begin{flushright} 261 {\small $\displaystyle p_l \ = \ H_1(l,h,B), l \in S$} 262 \end{flushright} 263 264 \textbf{Step 4}: Each $P_i$ then derives the group commitment $R$ and the challenge $c$. 265 266 \begin{flushright} 267 {\small $\displaystyle R \ =\ \prod _{l \in S} D_l \cdot (E_l)^{\rho_l}$} \\ 268 {\small $\displaystyle c \ =\ H_2(R,Y,h)$} 269 \end{flushright} 270 271 \textbf{Step 5}: Each $P_i$ computes their response $z_i$ using their long-lived secret share $s_i$ 272 \textcolor{red}{and the secret values ($d_i, e_i$) which each $P_i$ computes with the help of the temporary stored $seed_i$ from round 2}. 273 274 \begin{flushright} 275 {\small $\displaystyle z_i \ =\ d_i + (e_i \cdot \rho_i) + \lambda_i \cdot s_i \cdot c$} 276 \end{flushright} 277 278 \textbf{Step 6}: Each $P_i$ securely deletes the \textcolor{red}{$seed_i$} from their local storage, and then returns $z_i$ to $Frosix\ client$. 279 280 \begin{center} 281 {\small $\displaystyle \longleftarrow z_i$} 282 \end{center} 283 284 \textbf{Step 7}: The $Frosix\ client$ calculates the set of binding values \(p_l\), 285 the set of individual commitments \(R_l\), the group commitment \(R\) and the challenge \(c\). 286 With these values, the $Frosix\ client$ verifies the validity of each response \(z_i\). 287 288 {\small $\displaystyle p_l \ =\ H_1(l,h,B), l \in S$} \\ 289 {\small $\displaystyle R_l \ =\ D_l \cdot (E_l)^{\rho_l}, l \in S$} 290 291 {\small $\displaystyle R \ =\ \prod _{l \in S} R_l$} \\ 292 {\small $\displaystyle c \ =\ H_2(R,Y,h)$} 293 294 {\small $\displaystyle g^{z_i} \overset{?}{=} R_i \cdot Y_i^{c \cdot \lambda_i}$} 295 296 \textbf{Step 8}: The $Frosix\ client$ computes the resulting signature. 297 298 {\small $\displaystyle z = \sum z_i$} \\ 299 {\small $\displaystyle \sigma \ =\ (R, z)$} 300 301 \section{Authentication} 302 Frosix uses multifactor authentication to enhance the security and trustworthiness of its signing process. 303 Users are required to provide evidence of their identity, such as answering a security question or submitting a challenge-code. 304 \custind With this approach, Frosix pays tribute to pseudonymous communication on the Internet, 305 as a \Gls{provider} cannot distinguish a legitimate request from a malicious one. 306 For both requests, the sender is simply an IP address. 307 308 \subsubsection{Challenge-Code} 309 The majority of authentication methods employed in Frosix involve the requesting of challenge-codes over various communication channels 310 such as SMS, email or postal mail. 311 Those authentication methods are based on the codebase of GNU Anastasis \cite{anastasis}. 312 313 \subsubsection{Security Question}\label{chap:sec_question} 314 One of the objectives of Frosix is to establish trust in the public key, 315 generated at the end of a Frosix key generation process. 316 A \Gls{provider} is therefore required to proof the ability to recognize our secret answer. 317 However, secret answers are typically low in entropy and vulnerable to brute-force attacks. 318 To address this issue, Frosix introduces a small tweak, compared to the implementation of GNU Anastasis \cite{anastasis}. 319 \custind It is crucial to consider the potential points an adversary may have to gain knowledge of the secret answer. 320 If the adversary can observe the secret answer being entered, cryptographic protection becomes ineffective. 321 \custind Furthermore, it is important to ensure that knowledge of the hash alone cannot authenticate a signing request, 322 and transmitting the non-hashed value is not a viable option. 323 \custind Lastly, the authentication should be highly coupled with the hash of the message. 324 It should not be possible for a man-in-the-middle to change the message during transmission without being noticed. 325 326 To fulfill the first requirement, during the key generation process, 327 a \Gls{provider} receives a salted hash, which then is stored in the database. 328 The use of a high-entropy nonce used as \gls{salt} makes it difficult to brute-force. 329 \custind Because this salted hash is signed by the \Gls{provider} at the end of the key generation process, 330 the same value has to be stored in the Frosix signing document, together with the salt. 331 To make brute-forcing more challenging, Frosix utilizes a password-based key derivation function (PBKDF). 332 Users have the option to specify a difficulty level or allow the system to adapt the difficulty 333 based on the hardware the Frosix client is running on, during key generation. 334 \custind To address the other concerns, Frosix incorporates simple public key cryptography. 335 The Frosix client derives a private key from the secret answer, using a PBKDF, 336 computes the corresponding public key, and uses it to sign the message, along with the nonce. 337 When a \Gls{provider} receives the triple consisting of the message, the signature and the public key, 338 it verifies the signature against the message, hashes the public key, and compares it to the stored hash. 339 If the hashes match, the challenge is considered to be solved, and that request is authorized. 340 \custind Consequently, only the hash of the derived public key is submitted, signed, 341 and stored in the Frosix signing document during a key generation process. 342 343 \section{Derivation from Randomness} \label{chap:rnd} 344 Frosix relies on randomness in different places, but otherwise tries to derive as much as possible deterministically. 345 Many cryptographic systems rely on good randomness, however, using bad, or predictable, randomness can lead to disastrous results. 346 The Frosix approach therefore reduces potential attack surfaces. 347 \custind In the figures below, the development of the different derived and random values is shown. 348 349 Figure~\ref{fig:figure_legend} shows the legend of the following figures from this chapter. 350 351 \begin{figure}[H] 352 \centering 353 \includegraphics[scale=0.5]{frosix_entropy_figures_legend} 354 \caption{Legend for Figure~\ref{fig:client_entropy} to Figure~\ref{fig:provider_sig_entropy}} 355 \label{fig:figure_legend} 356 \end{figure} 357 358 359 \subsection{Frosix Key Generation} 360 From a \Gls{provider} 's perspective, all three rounds of Frosix key generation are implemented with full determinism, 361 ensuring that the outcomes of these rounds remain consistent. 362 As a result, the corresponding REST endpoints associated with each round exhibit idempotent behavior, 363 meaning that repeated requests to these endpoints will have the same effect as a single request, 364 without causing any unintended side effects. 365 366 \subsubsection{Frosix Client} 367 Figure~\ref{fig:client_entropy} shows the different derivations of the Frosix client during a key generation process. 368 \par First, the Frosix client gets high-entropy seeds from each \Gls{provider}. 369 Afterwards, it puts the \textit{provider entropy}, together with \textit{local entropy}, 370 in a key derivation function (KDF) and derives the \textit{client masterkey}, 371 as well as all \textit{context strings}. 372 Finally, with the masterkey, the Frosix client derives the \textit{authentication nonces} and the \textit{pre encryption keys}. 373 A \textit{pre encryption key} will later serve as nonce to derive an \textit{encryption key}. 374 375 \begin{figure}[H] 376 \centering 377 \includegraphics[scale=0.5]{frosix_client_entropy} 378 \caption{Frosix client: derivations during a key generation process} 379 \label{fig:client_entropy} 380 \end{figure} 381 382 The hashing of the authentication data depends on the selected authentication method. 383 \par If the selected authentication method involves the requesting and submitting of a challenge-code (Figure~\ref{fig:client_auth_hash}), 384 the \textit{authentication data}, such as a phone number or an email address, 385 is hashed together with an \textit{\gls{authentication nonce}}, resulting in the \textit{authentication hash}. 386 387 \begin{figure}[H] 388 \centering 389 \includegraphics[scale=0.5]{frosix_client_authentication_hash} 390 \caption{Hashing of authentication data of challenge-code based authentication methods} 391 \label{fig:client_auth_hash} 392 \end{figure} 393 394 In case of a security question (Figure~\ref{fig:client_auth_hash_question}), 395 the \textit{secret answer} and the \textit{authentication nonce} are thrown in a password-based key derivation function (PBKDF). 396 The \textit{amplifier value} adjusts the number of iterations the PBKDF will perform to derive a \textit{seed}. 397 A higher value means more iteration and therefore higher costs for a brute-force attack. 398 \custind From this seed, first a private signing key is created and afterwards the corresponding public key computed. 399 This public key is then hashed, which results in the \textit{authentication hash}. 400 401 \begin{figure}[H] 402 \centering 403 \includegraphics[scale=0.5]{frosix_client_authentication_hash_question} 404 \caption{Hashing of authentication data of a security question} 405 \label{fig:client_auth_hash_question} 406 \end{figure} 407 408 \subsubsection{Frosix Service Provider} 409 The derivation of entropy is exactly the same for a \textit{POST /dkg-commitment} and a \textit{POST /dkg-shares} request (Figure~\ref{fig:provider_dkg-commitment_entropy}). 410 Since the key generation process at a \Gls{provider} does not involve further randomness, 411 virtually every bit of a request is included to prevent different requests resulting in the same key. 412 413 First, the submitted \textit{public keys} of all participating \Glspl{provider}, 414 the \textit{threshold value} and the \Gls{provider} 's index are hashed. 415 A change in the main parameters during a key generation process, 416 such as changing the \textit{threshold value} or replacing a \Gls{provider}, 417 will result in a different hash and consequently in a different \textit{secret value} and different \textit{coefficients} 418 and the key generation will fail. 419 \custind This hash, the \textit{context string}, the \textit{authentication hash} and the \textit{secret provider salt} 420 (a value which is only known to one \Gls{provider} and which can be reused for many key generations), 421 serves as input in a key derivation function which outputs the \textit{provider masterkey}. 422 From this masterkey, the \Gls{provider} derives the \textit{secret value}, 423 the \textit{coefficients} of the degree t-1 polynomial and computes the \textit{commitment values}. 424 425 \begin{figure}[H] 426 \centering 427 \includegraphics[scale=0.5]{frosix_provider_dkg-commitment_entropy} 428 \caption{Derivations of a \textit{POST /dkg-commitment} or \textit{POST /dkg-shares} request} 429 \label{fig:provider_dkg-commitment_entropy} 430 \end{figure} 431 432 In the last round of a key generation process, the resulting key data, 433 consisting of a private and a public key, is encrypted and stored in the \Gls{provider} 's database. 434 Figure~\ref{fig:provider_dkg-key_entropy} shows how the \textit{encryption key} is derived from the 435 \textit{pre encryption key}, the \Gls{provider} \textit{index}, the \textit{public provider salt} 436 (a value which can be publicly received with a \textit{GET /config} request), 437 and the resulting public key. 438 The hash of the encryption key serves as identifier for the entry in the database. 439 440 \begin{figure}[H] 441 \centering 442 \includegraphics[scale=0.5]{frosix_provider_dkg-key_entropy} 443 \caption{Derivations of a \textit{POST /dkg-key} request} 444 \label{fig:provider_dkg-key_entropy} 445 \end{figure} 446 447 Not mentioned are the proof of knowledge of the \textit{secret value} and the ephemeral keys, 448 used in the ECDHE for securely transmitting the secret shares. 449 Both procedures use random values and are described in the Frosix key generation protocol (Chapter~\ref{chap:frosix_key_generation}). 450 451 \subsection{Frosix Sign} 452 Originally, it was planned to derive the nonce, used in the generation of signatures, deterministically from the message and the private key share, analogous to EdDSA. 453 However, research has shown that this procedure cannot be applied to threshold signatures and that it can result in a key disclosure \cite{10.5555/648120.747057}, 454 due to the possibility of nonce reuse if an adversary has control over at least one \Gls{provider} and the Frosix client. 455 456 Therefore, a \Gls{provider} uses the hash over a random \textit{commitment seed}, combined with the \textit{hash of the message} to derive the \textit{secret values} 457 and consequently the \textit{commitment}. 458 \custind Both \textit{commitment values} and the \textit{encryption key hash} are hashed together, 459 and the resulting value serves as identifier to store the \textit{commitment seed} in the database (Figure~\ref{fig:provider_sig_entropy}). 460 461 \begin{figure}[H] 462 \centering 463 \includegraphics[scale=0.5]{frosix_provider_sign_entropy} 464 \caption{Derivations of a \textit{POST /sig-commitment} request} 465 \label{fig:provider_sig_entropy} 466 \end{figure} 467 468 In the second round of Frosix sign, all \textit{commitments} are sent to each \Gls{provider}, 469 together with the \textit{message hash} and the individual \textit{encryption key}. 470 471 A \Gls{provider} now does the following to restore the \textit{secret values}: 472 \begin{itemize} 473 \item hashes the \textit{encryption key} and finds the key data in the database, including its index number 474 \item takes the matching commitment from the commitment list and together with \textit{encryption key hash} computes the database identifier of the \textit{commitment seed} 475 \item loads and immediately deletes the \textit{commitment seed} from the database (no reuse!) 476 \item restores the secret values with the help of the \textit{message hash} and the \textit{commitment seed} 477 \end{itemize} 478 479 \newpage 480 \section{Long-term Stored Data} 481 The storage of long-term data introduces potential attack vectors. 482 One of the key objectives of Frosix was to reduce and prevent such attack vectors. 483 484 \subsubsection{Frosix Signing Document} 485 With access to the Frosix signing document, an adversary learns how many and which \Glspl{provider} are involved, 486 the corresponding encryption keys, which authentication methods are used and the associated authentication data, 487 such as phone number, email address, security question (not the answer). 488 The Frosix signing document should therefore be stored carefully - like a signing key! 489 \custind In contrast to a signing key from a single-signer signature scheme, this knowledge is not enough to issue arbitrary signatures, 490 because of the enforced authentication of each signing request. 491 492 \subsubsection{Frosix Service Provider Database} 493 If the database of a \Gls{provider} is leaked, an adversary gains little knowledge: 494 \begin{itemize} 495 \item \textbf{Authentication Data}: The authentication data stored at a \Gls{provider} is a salted hash. 496 Without knowledge of the corresponding nonce, it is nearly infeasible for an adversary to brute-force it, 497 even if the set of all possible values is small (e.g. a phone number). 498 \item \textbf{Key Data}: The key data, consisting of the private key and public key, is stored encrypted. 499 Without knowledge of the encryption key used, it is infeasible for an adversary with limited computational power 500 to break the encryption. 501 \newline Even though the public key does not actually need to be protected, storing it in plaintext 502 would allow an adversary to correlate different encrypted key data from the same or from different \Glspl{provider}. 503 \item \textbf{Index}: With access to the \Glspl{provider} index in a signing group, 504 an adversary can conclude which entries do not belong to each other (if two entries have the same index number). 505 \end{itemize} 506 507 \section{Trusted Public Key} 508 Since the Frosix adversary model assumes that any device could be compromised, 509 an adversary could substitute the authentication data during key generation. 510 Therefore, after a key generation is complete, each \Gls{provider} signs 511 the resulting public key and the received authentication data with its own long-term private key. 512 This signature can then be verified by the user (on a non-compromised device). 513 \custind In addition, it can be proven to third persons which \Glspl{provider} are part of a signing group 514 represented by the public key. 515 This can establish further trust in the signatures, if the involved \Glspl{provider} are well-known. 516 517 \section{Delete Key Data} 518 In the design of Frosix, the deletion of data stored at a \Gls{provider} can be accomplished by providing only the hash of the encryption key. 519 As a result, it may be beneficial to back up URLs of the selected \Glspl{provider}, together with hashes of the encryption key, 520 in case the Frosix signing document is lost. 521 \custind Since access to a particular device, cell phone number or email address is not given forever, 522 the deletion does not need an authentication, which a user then might not be able to fulfill anymore. 523 524 Despite the inconvenience of the potential unavailability to create signatures, 525 this is far less significant compared to the risk of losing control over the private key shares. 526 And generating a new key is not a big effort with Frosix (perhaps the distribution of the public key is).