frosix

Multiparty signature service (experimental)
Log | Files | Refs | README | LICENSE

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).