aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/paper/postquantum_melt.tex306
1 files changed, 306 insertions, 0 deletions
diff --git a/doc/paper/postquantum_melt.tex b/doc/paper/postquantum_melt.tex
new file mode 100644
index 000000000..2dfefeeed
--- /dev/null
+++ b/doc/paper/postquantum_melt.tex
@@ -0,0 +1,306 @@
+\documentclass{llncs}
+%\usepackage[margin=1in,a4paper]{geometry}
+\usepackage[T1]{fontenc}
+\usepackage{palatino}
+\usepackage{xspace}
+\usepackage{microtype}
+\usepackage{tikz,eurosym}
+\usepackage{amsmath,amssymb}
+\usepackage{enumitem}
+\usetikzlibrary{shapes,arrows}
+\usetikzlibrary{positioning}
+\usetikzlibrary{calc}
+
+% Relate to:
+% http://fc14.ifca.ai/papers/fc14_submission_124.pdf
+
+% Terminology:
+% - SEPA-transfer -- avoid 'SEPA transaction' as we use
+% 'transaction' already when we talk about taxable
+% transfers of Taler coins and database 'transactions'.
+% - wallet = coins at customer
+% - reserve = currency entrusted to exchange waiting for withdrawal
+% - deposit = SEPA to exchange
+% - withdrawal = exchange to customer
+% - spending = customer to merchant
+% - redeeming = merchant to exchange (and then exchange SEPA to merchant)
+% - refreshing = customer-exchange-customer
+% - dirty coin = coin with exposed public key
+% - fresh coin = coin that was refreshed or is new
+% - coin signing key = exchange's online key used to (blindly) sign coin
+% - message signing key = exchange's online key to sign exchange messages
+% - exchange master key = exchange's key used to sign other exchange keys
+% - owner = entity that knows coin private key
+% - transaction = coin ownership transfer that should be taxed
+% - sharing = coin copying that should not be taxed
+
+
+\title{Post-quantum anonymity in Taler}
+
+\begin{document}
+\mainmatter
+
+\author{Jeffrey Burdges}
+\institute{Intria / GNUnet / Taler}
+
+
+\maketitle
+
+\begin{abstract}
+David Chaum's original RSA blind sgnatures provide information theoretic
+anonymity for customers' purchases. In practice, there are many schemes
+that weaken this to provide properties. We describe a refresh protocol
+for Taler that provides customers with post-quantum anonymity.
+It replaces an elliptic curve Diffe-Hellman operation with a unique
+hash-based encryption scheme for the proof-of-trust via key knoledge
+property that Taler requires to distinguish untaxable operations from
+taxable purchases.
+\end{abstract}
+
+
+\section{Introduction}
+
+David Chaum's RSA blind sgnatures \cite{} can provide financial
+security for the exchange, or traditionally mint,
+ assuming RSA-CTI \cite{,}.
+
+A typical exchange deployment must record all spent coins to prevent
+double spending. It would therefore rotate ``denomination'' signing
+keys every few weeks or months to keep this database from expanding
+indefinitely \cite{Taler??}. As a consequence, our exchange has
+ample time to respond to advances in cryptgraphy by increasing their
+key sizes, updating wallet software with new algorithms, or
+even shutting down.
+
+In particular, there is no chance that quantum computers will emerge
+and become inexpensive within the lifetime of a demonination key.
+Indeed, even a quantum computer that existed only in secret posses
+little threat because the risk of exposing that secret probably exceeds
+the exchange's value.
+
+\smallskip
+
+We cannot make the same bold pronouncement for the customers' anonymity
+however. We must additionally ask if customers' transactions can be
+deanonymized in the future by the nvention of quantum computes, or
+mathematical advances.
+
+David Chaum's original RSA blind sgnatures provide even information
+theoretic anonymity for customers, giving the desired negative answer.
+There are however many related schemes that add desirable properties
+at the expense of customers' anonymity. In particular, any scheme
+that supports offline merchants must add a deanonymization attack
+when coins are double spent \cite{B??}.
+
+Importantly, there are reasons why exchanges must replace coins that
+do not involve actual financial transactons, like to reissue a coin
+before the exchange rotates the denomination key that signed it, or
+protect users' anonymity after a merchant recieves a coin, but fails
+to process it or deliver good.
+
+In Taler, coins can be partially spent by signing with the coin's key
+for only a portion of the value determined by the coin's denomination
+key. This allows precise payments but taints the coin with a
+transaction, which frequently entail user data like a shipng address.
+To correct this, a customer does a second transaction with the exchange
+where they sign over the partially spent coin's risidual balance
+in exchange for new freshly anonymized coins.
+Taler employs this {\em refresh} or {\em melt protocol} for
+both for coins tainted through partial spending or merchant failures,
+as well as for coin replacement due to denomination key roration.
+
+If this protocol were simply a second transaction, then customers
+would retain information theoreticaly secure anonymity.
+In Taler however, we require that the exchange learns acurate income
+information for merchants. If we use a regular transaction, then
+a customer could conspire to help the merchant hide their income
+\cite[]{Taler??}.
+To prevent this, the refresh protocol requires that a customer prove
+that they could learn the private key of the resulting new coins.
+
+At this point, Taler employs an elliptic curve Diffie-Hellman key
+exchange between the coin's signing key and a new linking key
+\cite[??]{Taler??}. As the public linking key is exposed,
+an adversary with a quantum computer could trace any coins involved
+in either partial spending operations or aborted transactions.
+A refresh prompted by denomination key rotation incurs no anonymity
+risks regardless.
+
+\smallskip
+
+We could add an existing post-quantum key exchange, but these all
+incur significantly larger key sizes, requiring more badwidth and
+storage space for the exchange, and take longer to run.
+In addition, the established post-quantum key exchanges based on
+Ring-LWE, like New Hope \cite{}, require that both keys be
+ephemeral.
+Super-singular isogenies \cite{,} would work ``out of the box'',
+if it were already packeged in said box.
+
+Instead, we observe that
+
+
+
+
+
+
+
+In this paper, we describe a post-quantum
+
+It replaces an elliptic curve Diffe-Hellman operation with a unique
+hash-based encryption scheme for the proof-of-trust via key knoledge
+property that Taler requires to distinguish untaxable operations from
+taxable purchases.
+
+...
+
+\smallskip
+
+We observe that several elliptic curve blind signature schemes provide
+information theoreticly secure blinding as well, but
+ Schnorr sgnatures require an extra round trip \cite{??}, and
+ pairing based schemes offer no advnatages over RSA \cite{??}.
+
+There are several schemes like Anonize \cite{} in Brave \cite{},
+or Zcash \cite{} used in similar situations to blind signatures.
+% https://github.com/brave/ledger/blob/master/documentation/Ledger-Principles.md
+In these systems, anonymity is not post-quantum due to the zero-knowledge
+proofs they employ.
+
+
+
+
+\section{Background}
+
+
+\section{Refresh}
+
+
+Let $\kappa$ and $\theta$ denote
+ the exchange's security parameter and
+ the maximum number of coins returned by a refresh, respectively.
+
+We define a Merkle tree/sequence function
+ $\mlink(m,i,j) = H(m || "YeyCoins!" || i || j)$
+ Actual linking key for jth cut of ith target coin
+ $\mhide(m,i,j) = H( \mlink(m,i,j) )$
+ Linking key hidden for Merkle
+ $\mcoin(m,i) = H( \mhide(m,i,1) || \ldots || \mhide(m,i,\kappa) )$
+ Merkle root for refresh into the ith coin
+ $\mroot(m) = M( \m_coin(m,1), \ldots, \mcoin(m,\theta) )$
+ Merkle root for refresh of the entire coin
+ $mpath(m,i)$ is the nodes adjacent to Merkle path to $\mcoin(m,i)$
+If $\theta$ is small then $M(x[1],\ldots,x[\theta])$ could be simply be
+the concatenate and hash function $H( x[1] || ... || x[\theta] )$ like
+in $\mcoin$, giving $O(n)$ time. If $\theta$ is large, then $M$ should
+be a hash tree to give $O(\log n)$ time. We could use $M$ in $\mcoin$
+too if $\kappa$ were large, but concatenate and hash wins for $\kappa=3$.
+All these hash functions should have a purpose string.
+
+
+A coin now consists of
+ a Ed25519 public key $C = c G$,
+ a Merkle root $M = \mroot(m)$, and
+ an RSA signature $S = S_d(C || M)$ by a denomination key $d$.
+There was a blinding factor $b$ used in the creation of the coin's signature $S$.
+In addition, there was a value $s$ such that
+ $c = H(\textr{"Ed25519"} || s)$,
+ $m = H(\textr{"Merkle"} || s)$, and
+ $b = H(\textr{"Blind"} || s)$,
+but we try not to retain $s$ if possible.
+
+
+We have a tainted coin $(C,M,S)$ that we wish to
+ refresh into $n \le \theta$ untained coins.
+For simplicity, we allow $x'$ to stand for the component
+ normally denoted $x$ of the $i$th new coin being created.
+So $C' = c' G$, $M' = \mroot(m')$, and $b'$ must be derived from $s'$.
+For $j=1\cdots\kappa$,
+ we allow $x^j$ to denote the $j$th cut of the $i$th coin.
+So again
+ $C^j = c^j G$, $M^j = \mroot(m^j)$, and $b^j$ must be derived from $s^j$.
+
+Wallet phase 1.
+ For $j=1 \cdots \kappa$:
+ Create random $s^j$ and $l^j$.
+ Compute $c^j$, $m^j$, and $b^j$ from $s^j$ as above.
+ Compute $C^j = c^j G$ and $L^j = l^j G$ too.
+ Compute $B^j = B_{b^j}(C^j || \mroot(m^j))$.
+ Set $k = H(\mlink(m,i,j) || l^j C)$
+ Encrypt $E^j = E_k(s^j,l^j)$.
+ Send commitment $S' = S_C( (L^j,E^1,B^1), \ldots, (E^\kappa,B^\kappa) )$
+% Note : If $\mlink$ were a stream cypher then $E()$ could just be xor.
+
+Exchange phase 1.
+ Pick random $\gamma \in \{1 \cdots \kappa\}$.
+ Mark $C$ as spent by saving $(C,gamma,S')$.
+ Send gamma and $S(C,gamma,...)$
+
+Wallet phase 2.
+ Save ...
+ Set $\Beta_gamma = \mhide(m,i,gamma) = H( \mlink(m,i,gamma) )$ and
+ $\beta_i = \mlink(m,i,j)$ for $j=1\cdots\kappa$ not $\gamma$
+ Prepare a responce tuple $R^j$ consisting of
+ $Beta_gamma$, $(beta_j,l^j)$ for $j=1\cdots\kappa$ not $\gamma$,
+ and $\mpath(m,i)$, including $\mcoin(m,i)$,
+ Send $S_C(R^j)$.
+
+Exchange phase 2.
+ Set $Beta_j = H(beta_j)$ for $j=1\ldots\kappa$ except $\gamma$,
+ keep $Beta_gamma$ untouched.
+ Verify $M$ with $\mpath(m,i)$ including $\mcoin(m,i)$.
+ Verify $\mcoin(m,i) = H( Beta_1 || .. || Beta_kappa )$.
+ For $j=1 \cdots \kappa$ except $\gamma$:
+ Decrypt $s^j$ from $E^i$ using $k = H(beta_j || l^j C)$
+ Compute $c^j$, $m^j$, and $b^j$ from $s^j$.
+ Compute $C^j = c^j G$ too.
+ Verify $B^i = B_{b^j}(C^j || \mroot(m^j))$.
+ If verifications pass then send $S_{d_i}(B^\gamma)$.
+
+
+\section{Withdrawal}
+
+
+\bibliographystyle{alpha}
+\bibliography{taler,rfc}
+
+% \newpage
+% \appendix
+
+% \section{}
+
+
+
+\end{document}
+
+
+
+$l$ denotes Merkle tree levels
+yields $2^l$ leaves
+costs $2^{l+1}$ hashing operations
+
+$a$ denotes number of leaves used
+yields $2^{a l}$ outcomes
+
+
+
+
+
+
+commit H(h) and h l C and E_{l C)(..)
+reveal h and l
+
+
+
+x_n ... x_1 c G
+
+
+
+
+
+
+waiting period of 10 min
+
+
+
+