frosix

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

related_work.tex (24261B)


      1 
      2 \section{Cryptographic Principles}
      3 In this chapter, all relevant cryptographic principles used in Frosix are explained and described.
      4 
      5 \subsection{Randomness}
      6 "Any one who considers arithmetical methods of producing random digits is, of course, in
      7 a state of sin." \cite{neumann:1951}
      8 
      9 In the field of cryptography, good randomness is crucial \cite[page 3]{vadhan:2012},
     10 but it is difficult for computers to behave unpredictably.
     11 We therefore need some mechanisms which come close to and are indistinguishable from true random:
     12 computational indistinguishability. \cite[chapter 7.1.1]{vadhan:2012}
     13 
     14 \subsubsection{Pseudo Random Generator}
     15 A pseudo random number generator (PRG or PRNG) algorithm produces a long sequence of
     16 bytes, for which there exist no efficient algorithm to distinguish it from a
     17 true random sequence. Since an algorithm can not produce true random, a PRG
     18 needs to be seeded with a short and perfectly random input. \cite[page 5]{vadhan:2012}
     19 
     20 \textbf{Pseudo Random Function}
     21 \newline To build a pseudo random function (PRF), a PRG can be used. A PRF is a
     22 deterministic function whose output is indistinguishable from true random
     23 and there is no efficient way to gain any information about the input seed,
     24 unless this seed is already known. \cite[page 223]{vadhan:2012}
     25 
     26 \subsubsection{Entropy}
     27 Entropy is the measurement of how much randomness is in a random variable.
     28 The notion is always a log to the base 2. For example, an entropy value of $128$
     29 means that there are $2^{128}$ possibilities, all of which are equally likely.
     30 This is also called uniform distribution. \cite[chapter 6.1.2]{vadhan:2012}
     31 
     32 \subsection{Hash}
     33 A hash function is technically speaking a compression function and is defined as a
     34 function that takes an input with arbitrary length and returns a fix-sized
     35 output. \cite[chapter 2]{sobti:2012}.
     36 \custind To become useful for cryptography, a hash function must fulfill
     37 following additional properties and is then known as cryptographic hash function \cite[chapter 5]{sobti:2012}:
     38 
     39 \begin{itemize}
     40   \item \textbf{Avalanche Criterion}: A good hash function generates for two different input two completely different outputs,
     41   regardless how small the difference in the inputs are.
     42   This results in the avalanche criterion, where changing one bit in the input,
     43   changes every bit in the output with a probability of 0.5. \cite[chapter 5.2]{sobti:2012}
     44   \item \textbf{Pre-Image Resistance}: A hash function is said to be pre-image resistant if it is difficult to find the input,
     45   if only the output is given.
     46   \newline "Given $H$ and $H(x)$, it is computationally infeasible to find $x$." \cite[chapter 2.1]{sobti:2012}
     47   Such a hash function is also known as One Way Hash Function.
     48   \item \textbf{Second Pre-Image Resistance}: To be second pre-image resistant, it must be difficult to find a second input
     49   for a given input which leads to the same output.
     50   \newline "it is computationally infeasible to find any second input which has
     51   the same output as any specified input, i.e., given $x$, to find a 2nd-preimage $x' = x$ such that
     52   $h(x) = h(x')$." \cite[chapter 3.3]{cryptoeprint:2004/035}
     53   \item \textbf{Collision Resistance}: The strongest property of a cryptographic hash function is its collision resistance.
     54   With a collision resistance hash function, it is hard to find two different inputs which lead to the
     55   same output.
     56   \newline "it is computationally infeasible to find any two distinct inputs $x$, $x'$ which has the same output, i.e.,
     57   such that $h(x) = h(x')$." \cite[chapter 9.2.2]{appliedcryptography}
     58 \end{itemize}
     59 
     60 \subsubsection{HMAC}
     61 In network communication, the message authentication code (MAC) is used to verify the integrity and authenticity
     62 of received information. A MAC is a "cryptographic checksum", based on a shared key \cite[chapter 1.1]{bellare:1996}.
     63 \custind The hash-based message authentication code (HMAC) scheme is based on the principle of a MAC and utilizes a cryptographic hash function ($H$), with a key ($k$) and a message ($x$) as input:
     64 
     65 \begin{center}
     66   $HMAC_k(x) = H(\overline{k} \oplus opad, H(\overline{k} \oplus ipad, x))$ \cite[chapter 5.1]{bellare:1996}
     67 \end{center}
     68 
     69 \subsubsection{HKDF}
     70 Goal of a key derivation function (KDF) is to derive "one or more cryptographically strong secret keys" \cite[chapter 1]{cryptoeprint:2010/264} from a probably not
     71 uniformly distributed key. Thus, a KDF contains two phases. In the extraction phase, a pseudorandom key is extracted and in the second phase expanded to
     72 the desired output length, with the help of a pseudo random function (PRF).
     73 \custind In a hashed key derivation function (HKDF), the HMAC scheme is utilized in the extraction phase to get the pseudorandom key as well as
     74 in the expansion phase as PRF. \cite[chapter 4.2]{cryptoeprint:2010/264}.
     75 \custind Frosix makes intensive use of HKDF functions to deterministically expand high entropy inputs (see chapter \ref{chap:rnd}).
     76 
     77 \subsubsection{PBKDF}
     78 A password-based key derivation function (PBKDF) derives a pseudorandom key from a low-entropy password. Unlike a HKDF, a PBKDF scheme uses
     79 an adaptable number of iterations to derive the resulting key, thus making it hard to brute-force the password. \cite[chapter 3]{RFC8018}
     80 
     81 \textbf{Argon2}
     82 \newline Argon2 is a PBKDF which aims to "maximize the cost of password cracking on ASICs" \cite[page 2]{argon2}.
     83 Therefore, Argon2 is designed to not only use many iterations
     84 in order to derive a pseudorandom key from a low-entropy password, but at the same time uses a lot of memory, making it "memory-hard" \cite[page 9]{argon2}.
     85 \custind Frosix uses Argon2 (Argon2id) to derive a seed from the secret answer to make brute forcing as inefficient as possible.
     86 
     87 \subsection{Public Key Cryptography}
     88 "In a public-key cryptographic scheme, a key pair is selected so that the problem of deriving the
     89 private key from the corresponding public key is equivalent to solving a computational problem
     90 that is believed to be intractable." \cite[chapter 1.2]{Hankerson2004GuideTE}
     91 \custind Public key cryptography relies either on the hardness of the factorization problem (RSA), the discrete logarithm problem (DL),
     92 or the elliptic curve discrete logarithm problem (EC). \cite[chapter 1.2]{Hankerson2004GuideTE}
     93 
     94 \subsubsection{Elliptic Curves}
     95 In cryptography, an elliptic curve is built on the finite field $\mathbb{F}_p$,
     96 and is defined by an equation of the form
     97 
     98 \begin{center}
     99   $y^2 = x^3 + ax + b$, where a, b $\in \mathbb{F}_p$ and $4a^3 + 27b^2 \not\equiv 0$ (mod p) \cite[page 13]{Hankerson2004GuideTE}.
    100 \end{center}
    101 
    102 Every pair \((x, y) \in \mathbb{F}_p^2\) is a point on the curve if above equation is satisfied. \cite[page 13]{Hankerson2004GuideTE}
    103 Advantages of elliptic curves are their smaller key size, compared to RSA or DSA, to achieve the same security level. \cite[page 19]{Hankerson2004GuideTE}
    104 
    105 A finite field is the set $\mathbb{F}$, together with the two operations addition and multiplication, and fulfills
    106 specific properties \cite[chapter 2.1]{Hankerson2004GuideTE}:
    107 
    108 \begin{itemize}
    109   \item \((\mathbb{F}, +)\) is an abelian group with (additive) identity denoted by 0.
    110   \item \((\mathbb{F} \setminus \{0\}, \cdot)\) is an abelian group with (multiplicative) identity denoted by 1.
    111   \item The distributive law holds: \((a + b) \cdot c = a \cdot c + b \cdot c\) for all \(a,b,c \in \mathbb{F}\).
    112   \item If the set \(\mathbb{F}\) is finite, then the field is said to be finite.
    113 \end{itemize}
    114 
    115 \textbf{Ristretto255 Group}
    116 \newline The ristretto255 group is an adaption of the Curve25519, "a state-of-the-art elliptic-curve-Diffie-Hellman function
    117 suitable for a wide variety of cryptographic applications" \cite[chapter 1]{10.1007/11745853_14}.
    118 Ristretto is based on a technique called Decaf \cite{cryptoeprint:2015/673} and allows the construction
    119 of prime-order groups from non-prime-order elliptic curves with cofactor 8, such as Curve25519. \cite[chapter 1]{irtf-cfrg-ristretto255-decaf448-07}
    120 \custind As recommended by the authors of FROST, Frosix uses ristretto255 as the underlying prime-order group. \cite[chapter 6]{irtf-cfrg-frost-13}
    121 
    122 \subsubsection{ECDHE}
    123 Elliptic Curve Diffie-Hellman Ephemeral (ECDHE) is a key agreement protocol, which allows a shared key to be established over an
    124 untrusted channel. \cite[chapter 6.1]{secg:sec1-v2}
    125 \custind Frosix uses ECDHE to transmit the secret shares in round 2 and 3 of the key generation protocol.
    126 
    127 \subsubsection{Digital Signature}
    128 A digital signature is a construct "which associates a message (in digital
    129 form) with some originating entity" \cite[chapter 11.2]{appliedcryptography}.
    130 \custind There exists a lot of different signature schemes, but all of them
    131 consist of three basic algorithms: \cite[chapter 11.2.2]{appliedcryptography}
    132 \begin{itemize}
    133   \item \textbf{Key Generation}: In a key generation a key pair has to be created. A key pair consists out of a private key
    134   \(sk\) and a public key \(pk\). The private key is chosen secretly and at random,  or at least derived from high entropy.
    135   Afterwards, the public key can be derived from the private key.
    136   \item \textbf{Signature Generation}: With the private key from the previously generated key pair, arbitrary messages can be signed.
    137   \item \textbf{Signature Verification}: Anybody in possession of the public key and the verification function can now
    138   verify, whether a signature matches a message.
    139 \end{itemize}
    140 
    141 \subsubsection{Schnorr Signature Scheme}
    142 The Schnorr signature scheme is an efficient signature scheme, based on discrete logarithms: \cite{crypto-1989-1727}
    143 
    144 \begin{itemize}
    145   \item primes $p$ and $q$ such that $q$ | $p-1$
    146   \item $\alpha \in \mathbb{Z}_p$ with order $q$, $\alpha^q = 1$ (mod $p$), $\alpha \neq 1$
    147   \item \textbf{Key Generation}:
    148   \begin{enumerate}
    149     \item Chose private key \(s \in \{1, 2, ..., q\}\).
    150     \item The corresponding public key \(v\) is the number $v = \alpha^{-s}$ (mod $p$).
    151   \end{enumerate}
    152   \item \textbf{Signature Generation}: The key pair $s, v$ and the message $m$ are provided.
    153   \begin{enumerate}
    154     \item Pick a random number \(r \in {1, ..., q}\) and compute \(x := \alpha^r\) (mod $p$).
    155     \item Compute \(e := h(x,m) \in \{0, ..., 2^t-1\}\).
    156     \item Compute \(y := r + se\) (mod q) and output the signature \((e,y)\).
    157   \end{enumerate}
    158   \item \textbf{Signature Verification}: The signature ($e$, $y$) for message $m$ and the public key $v$ are provided.
    159   \begin{enumerate}
    160     \item Compute \(\overline{x} = \alpha^y v^e\) (mod p).
    161     \item Check that \(e = h(\overline{x},m)\).
    162   \end{enumerate}
    163 \end{itemize}
    164 
    165 Due to a patent, which expired in 2008, Schnorr signature schemes were not common for a long time.
    166 
    167 \textbf{EdDSA}
    168 \newline Nowadays, the Edwards-curve Digital Signature Algorithm (EdDSA) \cite{rfc8032},
    169 a deterministic variant of the Schnorr Signature Scheme
    170 on elliptic Edwards-curve, is standardized and widely used.
    171 \custind Frosix uses EdDSA signatures to let each involved provider sign the resulting public key in the key generation process.
    172 
    173 \subsubsection{Secret Sharing}
    174 \textbf{Shamir's Secret Sharing}
    175 \newline Shamir's secret sharing is a method to divide some data D into n parts, based on polynomial interpolation
    176 and has the following two properties \cite{10.7551/mitpress/12274.003.0048}:
    177 
    178 \begin{enumerate}
    179   \item knowledge of any \(k\) or more \(D_i\) pieces makes \(D\) easily computable
    180   \item knowledge of any \(k - 1\) or fewer \(D_i\) pieces leaves \(D\) completely undetermined (in the sense that all its possible
    181   values are equally likely)
    182 \end{enumerate}
    183 
    184 \textbf{Feldman's Verifiable Secret Sharing}
    185 \newline In Shamir's secret sharing a party can not verify if the received piece is valid.
    186 In Feldman's verifiable secret sharing \cite{10.1109/SFCS.1987.4},
    187 the \gls{trusted dealer} first publishes a commitment of the secret, with which each receiving party can test,
    188 whether the afterwards sent piece is a valid part of that secret. \cite[chapter 3.2]{10.1109/SFCS.1987.4}
    189 
    190 \subsubsection{Threshold Signature Scheme}
    191 In a threshold signature scheme, the private key is distributed among $n$ parties, such that \(k \leq n\) parties can collaborate to generate
    192 a valid signature.
    193 To achieve a signature system, wherein the signing key is not combined in any single place at any time, it is mandatory to
    194 also generate the key pair with a multiparty algorithm in a distributed key generation process. \cite[chapter 1]{cryptoeprint:2020/1390}
    195 
    196 \subsubsection{Distributed Key Generation}
    197 \textbf{Pedersen's Distributed Key Generation}
    198 \newline In order to perform a key generation among a group, Torben Pedersen introduced a distributed key generation protocol (DKG) \cite{10.1007/3-540-46416-6_47},
    199 based on verifiable secret sharing.
    200 \custind In Pedersen's distributed key generation, each party performs a verifiable secret sharing, thus acts as a \gls{trusted dealer}.
    201 After publishing all commitments, each party sends to every other party a secret share, like in Shamir's secret sharing.
    202 The final share of the private key is the combinations of a self-generated secret share, combined with the secret shares received from all other parties.
    203 \custind Therefore, two main properties can be concluded \cite[chapter 5]{10.1007/3-540-46416-6_47}:
    204 
    205 \begin{enumerate}
    206   \item A trusted party for selecting and distributing the secret is no longer needed.
    207   \item Each member of the group can verify that his share of the secret key corresponds to the public key.
    208 \end{enumerate}
    209 
    210 \section{FROST Signature Scheme}
    211 FROST is a Flexible Round-Optimized Schnorr Threshold Signature scheme.
    212 It is optimized to be as efficient as possible, without restrictions to the security properties.
    213 Although it can be instantiated as a single-round protocol, with a pre-processing stage,
    214 in Frosix, FROST is instantiated as the two-round protocol variant.
    215 \custind Signatures produced by FROST signing operations are verifiable using the standard Schnorr verification operation
    216 and use a signature format similar to EdDSA. \cite{cryptoeprint:2020/852}
    217 
    218 \subsubsection{FROST Key Generation}
    219 Like many other threshold signature protocols, FROST builds upon Pedersen's DKG for key generation,
    220 but adds a \gls{zero knowledge proof} to protect against rogue key attacks.
    221 The zero knowledge proof is a Schnorr signature on its own, using the secret value from the verifiable secret sharing as private key.
    222 \custind Whereas this key generation protocol is originally designed to be a two-round protocol,
    223 in Frosix, the distributed key generation is a three-round protocol,
    224 due to the tunneling of all communication through the Frosix client.
    225 
    226 Below is the original \textit{FROST KeyGen} \cite[page 12]{cryptoeprint:2020/852}:
    227 
    228 \begin{center}
    229   \textbf{Round 1}
    230 \end{center}
    231 
    232 {\large \(P_i\)}
    233 \par \textbf{Step 1}: Every participant \(P_i\) samples \(t\) random values and uses these values as coefficients to define a degree \(t-1\) polynomial.
    234 
    235 {\small $\displaystyle (a_{i0}, ..., a_{i(t-1)}) \xleftarrow{\$} \mathbb{Z}_q$} \\
    236 {\small $\displaystyle f_i(x) \ =\ \sum _{j=0} ^{t-1} a_{ij}x^j$}
    237 
    238 \textbf{Step 2}: Every \(P_i\) computes a proof of knowledge to the corresponding secret \(a_{i0}\).
    239 
    240 {\small $\displaystyle k \xleftarrow{\$} \mathbb{Z}_q$} \\
    241 {\small $\displaystyle R_i \ =\ g^k$} \\
    242 {\small $\displaystyle c_i \ =\ H(i, \$context\_string, g^{a_{i0}}, R_i)$} \\
    243 {\small $\displaystyle z_i \ =\ k + a_{i0} \cdot c_i$} \\
    244 {\small $\displaystyle \sigma_i \ =\ (R_i, z_i)$}
    245 
    246 \textbf{Step 3}: Every participant \(P_i\) computes a public commitment \(C\).
    247 
    248 {\small $\displaystyle \phi_{ij} \ =\ g^{ij}, 0 \leq j \leq t-1$} \\
    249 {\small $\displaystyle \vec{C_i} \ =\ \langle \phi_{i0}, ..., \phi_{i(t-1)} \rangle$}
    250 
    251 \textbf{Step 4}: Every \(P_i\) broadcasts \(C_i, \sigma_i\) to all other participants.
    252 
    253 \begin{center}
    254   {\small $\displaystyle (C_i, \sigma_i) \longrightarrow $}
    255 \end{center}
    256 
    257 \textbf{Step 5}: Upon receiving \(C_l, \sigma_l\) from participants \(1 \leq l \leq n, l \neq i\), each participant \(P_i\) verifies \(\sigma_l\).
    258 
    259 {\small $\displaystyle c_l \ =\ H(l, \$context\_string, \phi_{l0}, R_l)$} \\
    260 {\small $\displaystyle R_l \overset{?}{=} g^{z_l} \ \cdot \phi_{l0}^{-c_l}$}
    261 
    262 \begin{center}
    263   \textbf{Round 2}
    264 \end{center}
    265 
    266 {\large \(P_i\)}
    267 \par \textbf{Step 1}: Each \(P_i\) securely sends a secret share ($l, f_i(l)$) to each other participant $P_l$.
    268 
    269 \begin{center}
    270   {\small $\displaystyle (l, f_i(l)) \longrightarrow$}
    271 \end{center}
    272 
    273 \textbf{Step 2}: Each \(P_i\) verifies their received shares.
    274 
    275 {\small $\displaystyle g^{f_l(i)} \ \overset{?}{=} \ \prod _{k=0} ^{t-1} \phi_{lk}^{i^k mod \ q}$}
    276 
    277 \textbf{Step 3}: Each \(P_i\) calculates their long-lived private signing share \(s_i\).
    278 
    279 {\small $\displaystyle s_i \ =\ \sum _{l=1} ^n f_l(i)$}
    280 
    281 \textbf{Step 4}: Each \(P_i\) calculates their public verification share \(Y_i\) and the group's public key \(Y\).
    282 
    283 {\small $\displaystyle Y_i \ =\ g^{s_i}$} \\
    284 {\small $\displaystyle Y \ =\ \prod _{j=1} ^n \phi_{j0}$}
    285 
    286 \subsubsection{FROST Sign}
    287 Since Frosix uses the two-round variant of FROST Sign,
    288 round 1 represents a single preprocess operation.
    289 Otherwise, the protocol below is as unmodified as possible. \cite[page 12, 15]{cryptoeprint:2020/852}
    290 
    291 \begin{center}
    292   \textbf{Round 1}
    293 \end{center}
    294 
    295 {\large $SA$} \hfill {\large $\displaystyle P_{i}{}_{\in}{}_{S}$}
    296 \par \textbf{Step 1}: In the first round of FROST Sign, the signature aggregator (SA) chooses the set $S$, $k$ of $n$ parties.
    297 
    298 {\small $\displaystyle S = \{P_1,...,P_k\}, 0 < P_i \leq n$}
    299 
    300 \textbf{Step 2}: Each party (\(P_i\)) samples two random commitment values and sends those to the SA.
    301 
    302 \begin{flushright}
    303   {\small $\displaystyle (d_i,e_i) \xleftarrow{\$} \mathbb{Z}^*_q \times \mathbb{Z}^*_q$} \\
    304   {\small $\displaystyle (D_i,E_i) \ = \ (g^{d_i},g^{e_i})$}
    305 \end{flushright}
    306 
    307 \begin{center}
    308   {\small $\displaystyle \longleftarrow (D_i,E_i)$}
    309 \end{center}
    310 
    311 \begin{center}
    312   \textbf{Round 2}
    313 \end{center}
    314 
    315 {\large $SA$} \hfill {\large $\displaystyle P_{i}{}_{\in}{}_{S}$}
    316 
    317 \textbf{Step 1}: The SA fetches all commitments, builds the set $B \ = \ \langle i,D_i,E_i \rangle, i \in S$ and sends $B$ together with the message $m$ to all parties in $S$.
    318 
    319 {\small $\displaystyle B \ =\ \langle ( i,D_{i} ,E_{i})\rangle _{i}{}_{\in }{}_{S}$}
    320 
    321 \begin{center}
    322   {\small $\displaystyle ( m,\ B) \longrightarrow $}
    323 \end{center}
    324 
    325 \textbf{Step 2}: After receiving $(m,\ B)$, each $P_i$ validates the message $m$, and then checks $D_l,E_l \in \mathbb{G}^*$ for each commitment in $B$, aborting if either check fails.
    326 
    327 \textbf{Step 3}: Each $P_i$ then computes the set of binding values.
    328 
    329 \begin{flushright}
    330   {\small $\displaystyle p_l \ = \ H_1(l,m,B), l \in S$}
    331 \end{flushright}
    332 
    333 \textbf{Step 4}: Each $P_i$ then derives the group commitment $R$ and the challenge $c$.
    334 
    335 \begin{flushright}
    336   {\small $\displaystyle R \ =\ \prod _{l \in S} D_l \cdot (E_l)^{\rho_l}$} \\
    337   {\small $\displaystyle c \ =\ H_2(R,Y,m)$}
    338 \end{flushright}
    339 
    340 \textbf{Step 5}: Each $P_i$ computes their response $z_i$ using their long-lived secret share $s_i$.
    341 
    342 \begin{flushright}
    343   {\small $\displaystyle z_i \ =\ d_i + (e_i \cdot \rho_i) + \lambda_i \cdot s_i \cdot c$}
    344 \end{flushright}
    345 
    346 \textbf{Step 6}: Each $P_i$ securely deletes $(d_i,e_i)$ from their local storage, and then returns $z_i$ to SA.
    347 
    348 \begin{center}
    349   {\small $\displaystyle \longleftarrow z_i$}
    350 \end{center}
    351 
    352 \textbf{Step 7}: The signature aggregator SA calculates the set of binding values \(p_l\),
    353 the set of individual commitments \(R_l\), the group commitment \(R\) and the challenge \(c\).
    354 With these values, the SA verifies the validity of each response \(z_i\).
    355 
    356 {\small $\displaystyle p_l \ =\ H_1(l,m,B), l \in S$} \\
    357 {\small $\displaystyle R_l \ =\ D_l \cdot (E_l)^{\rho_l}, l \in S$}
    358 
    359 {\small $\displaystyle R \ =\ \prod _{l \in S} R_l$} \\
    360 {\small $\displaystyle c \ =\ H_2(R,Y,m)$}
    361 
    362 {\small $\displaystyle g^{z_i} \overset{?}{=} R_i \cdot Y_i^{c \cdot \lambda_i}$}
    363 
    364 \textbf{Step 8}: The signature aggregator SA computes the resulting signature.
    365 
    366 {\small $\displaystyle z = \sum z_i$} \\
    367 {\small $\displaystyle \sigma \ =\ (R, z)$}
    368 
    369 \newpage
    370 \section{Authentication}
    371 Authentication makes up a big part of Frosix.
    372 Fortunately, Frosix can build upon the know-how and implementation of GNU Anastasis.
    373 At the moment, GNU Anastasis supports the following authentication methods: \cite{anastasis}
    374 
    375 \begin{itemize}
    376   \item Security Question
    377   \item SMS
    378   \item Email
    379   \item Post
    380   \item Bank Transfer
    381   \item TOTP (Time-based one-time password)
    382 \end{itemize}
    383 
    384 \section{Other Implementations}
    385 Frosix is not the first to implement the FROST signature scheme.
    386 But Frosix is one of the first FROST based application implementing a REST API,
    387 and probably unique, considering the integration of additional authentication.
    388 
    389 Besides the reference implementation \cite{ckomlo:frost}, which provides a simple Rust based library, there are some further libraries available on GitHub.
    390 Most of them are written in Rust or Go and therefore unsuitable to be used in Frosix.
    391 \newline The following list is not exhaustive.
    392 
    393 \begin{itemize}
    394   \item \textbf{Zcash Foundation} \cite{zcash:frost}: Rust based library which provides a high level API to work with various ciphers
    395   \item \textbf{Coinbase} \cite{coinbase:frost}: Go based library, which has been archived and is no longer supported from the authors
    396   \item \textbf{Taurus} \cite{taurusgroup:frost}: Go based library with focus on compatibility on Ed25519 (EdDSA), is not under active development for two years
    397   \item \textbf{Isis Agora Lovecruft} \cite{lovecruft:frost}: Rust based library which is not under development for two years
    398   \item \textbf{Cloudflare} \cite{cloudflare:frost}: a feature request for the Cloudflare Interoperable Reusable Cryptographic Library (CIRCL), written in GO
    399   \item \textbf{Trust-Machines} \cite{trust-machines:frost}: a library which provides an implementation of the original FROST as well as an implementation of Weighted Threshold FROST (see chapter~\ref{chap:future_dev}) in Rust
    400 \end{itemize}
    401 
    402 \section{Future Development}\label{chap:future_dev}
    403 There is ongoing research, and standardization efforts on FROST and threshold signature schemes in general.
    404 
    405 \textbf{FROST as an Internet Draft}
    406 \newline At the moment, FROST is an "Active Internet Draft" at the Internet Engineering Task Force (IETF). \cite{irtf-cfrg-frost-13}
    407 This helped a lot during the implementation of FROST,
    408 because it provides pseudocode for all necessary functions.
    409 
    410 \textbf{NIST First Call for Multi-Party Threshold Schemes}
    411 \newline Also NIST is highly interested in standardizing threshold crypto system, among others for signing. \cite{Peralta_Brandão_2023}
    412 
    413 \textbf{Weighted Threshold FROST: WTF}
    414 \newline The idea of weighted threshold FROST is to optimize the required bandwidth when FROST parties control multiple
    415 keys. \cite{weighted-frost}
    416 
    417 \textbf{Threshold Schnorr with Stateless Deterministic Signing}
    418 \newline In contrast to some single-signer signature schemes, like for example EdDSA, it is not trivial to implement
    419 deterministic signatures in a threshold environment.
    420 This is due to the danger of nonce reuse. \cite{10.5555/648120.747057}
    421 Although there are already first approaches \cite{cryptoeprint:2021/1055}, the implementation of a stateless
    422 deterministic threshold signing should be carefully considered.
    423 
    424 \textbf{FROST2}
    425 \newline There is already an optimized version of FROST, FROST2. \cite{cryptoeprint:2021/1375}
    426 With FROST2, the number of exponentiation required for signing and verification are reduced from linear to constant in the number of signers.
    427 
    428 \textbf{FROST3}
    429 \newline Another paper proposes FROST3, RObust Asynchronous Threshold signatures (ROAST). 
    430 ROAST is a wrapper protocol and can be instantiated with FROST.
    431 The authors claim to "obtain the first (nontrivial) asynchronous Schnorr threshold signature protocol"
    432 and that ROAST is also the "first robust protocol that can be setup to guarantee unforgeability against a
    433 dishonest majority ($t-1 \geq n/2$)" \cite{10.1145/3548606.3560583}.
    434 \custind What this means exactly and whether Frosix could benefit from ROAST was not further investigated.
    435 
    436 The further development of FROST and its variants remains exciting!