Much expanded. And now compiles.
This commit is contained in:
parent
7fe7f66ffa
commit
d1c83c5dda
@ -135,34 +135,18 @@ First, we describe attaching contemporary post-quantum key exchanges,
|
||||
based on either super-singular eliptic curve isogenies \cite{SIDH} or
|
||||
ring learning with errors (Ring-LWE) \cite{Peikert14,NewHope}.
|
||||
These provide strong post-quantum security so long as the underlying
|
||||
scheme retain their post-quantum security.
|
||||
|
||||
Second, we propose a hash based scheme that
|
||||
|
||||
Merkle tree based scheme that provides a
|
||||
query complexity bound suitable for current deployments, and
|
||||
depends only upon the strength of the hash function used.
|
||||
|
||||
|
||||
|
||||
|
||||
much smaller
|
||||
|
||||
|
||||
|
||||
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
|
||||
|
||||
scheme remains secure; however, these schemes youth leaves them
|
||||
relatively untested.
|
||||
|
||||
Second, we propose a hash based scheme whose anonymity garentee needs
|
||||
only the one-way assumption on our hash function. In this scheme,
|
||||
the vible security paramater is numerically far smaller than in the
|
||||
key exchange systems, but covers query complexity which we believe
|
||||
suffices.
|
||||
|
||||
We describe this hash based proof-of-encryption-to-self scheme in
|
||||
parallel with the
|
||||
As is the practice with hash based signature schemes
|
||||
|
||||
|
||||
|
||||
@ -192,20 +176,39 @@ proofs they employ.
|
||||
|
||||
\section{Taler's refresh protocol}
|
||||
|
||||
We first describe Taler's refresh protocol adding place holders
|
||||
$\eta$, $\lambda$, $\Lambda$, $\mu$, and $\Mu$ for key material
|
||||
involved in post-quantum operations. We view $\Lambda$ and $\Mu$
|
||||
as public keys with respective private keys $\lambda$ and $\mu$,
|
||||
and $\eta$ as the symetric key resulting from the key exchange
|
||||
between them.
|
||||
\def\Mu{M}
|
||||
\def\Eta{}
|
||||
\def\newmathrm#1{\expandafter\newcommand\csname #1\endcsname{\mathrm{#1}}}
|
||||
\newmathrm{CPK}
|
||||
\newmathrm{CSK}
|
||||
\newmathrm{LPK}
|
||||
\newmathrm{LSK}
|
||||
\newmathrm{KEX}
|
||||
|
||||
We require there be effeciently computable
|
||||
|
||||
We shall describe Taler's refresh protocol in this section.
|
||||
All notation defined here persists throughout the remainder of
|
||||
the article.
|
||||
|
||||
We let $\kappa$ denote the exchange's taxation security parameter,
|
||||
meaning the highest marginal tax rate is $1/\kappa$. Also, let
|
||||
$\theta$ denote the maximum number of coins returned by a refresh.
|
||||
|
||||
\smallskip
|
||||
|
||||
We label place holders $\eta$, $\lambda$, $\Lambda$, $\mu$, and $\Mu$
|
||||
for key material involved in post-quantum operations.
|
||||
We view $\Lambda$ and $\Mu$ as public keys with respective
|
||||
private keys $\lambda$ and $\mu$, and
|
||||
$\eta$ as the symetric key resulting from the key exchange between them.
|
||||
|
||||
We need effeciently computable functions
|
||||
$\CPK$, $\CSK$, $\LPK$, $\LSK$, $\KEX_2$ and $\KEX_3$ such that
|
||||
\begin{itemize}
|
||||
\item $\mu = \CSK(s)$ for a random bitstring $s$,
|
||||
$\Mu = \CPK(\mu)$,
|
||||
\item $\lambda = \LSK(t,\mu)$ and $\Lambda = \LPK(t,\mu)$
|
||||
for a random bitstring $t$, and
|
||||
\item $\lambda = \LSK(t,\mu)$ for a bitstring $t$,
|
||||
$\Lambda = \LPK(\lambda)$, and
|
||||
\item $\eta = \KEX_2(\lambda,\Mu) = \KEX_3(\Lambda,\mu)$.
|
||||
\end{itemize}
|
||||
In particular, if $\KEX_3(\Lambda,\mu)$ would fail
|
||||
@ -217,10 +220,6 @@ to Taler's existing refresh protocol.
|
||||
|
||||
\smallskip
|
||||
|
||||
We let $\kappa$ denote the exchange's taxation security parameter,
|
||||
meaning the highest marginal tax rate is $1/\kappa$. Also, let
|
||||
$\theta$ denote the maximum number of coins returned by a refresh.
|
||||
|
||||
A coin $(C,\Mu,S)$ consists of
|
||||
a Ed25519 public key $C = c G$,
|
||||
a post-quantum public key $\Mu$, and
|
||||
@ -235,16 +234,16 @@ There was of course a blinding factor $b$ used in the creation of
|
||||
the coin's signature $S$. In addition, there was a private seed $s$
|
||||
used to generate $c$, $b$, and $\mu$, but we need not retain $s$
|
||||
outside the refresh protocol.
|
||||
$$ c = H(\textr{"Ed25519"} || s)
|
||||
$$ c = H(\textrm{"Ed25519"} || s)
|
||||
\qquad \mu = \CSK(s)
|
||||
\qquad b = H(\textr{"Blind"} || s) $$
|
||||
\qquad b = H(\textrm{"Blind"} || s) $$
|
||||
|
||||
\smallskip
|
||||
|
||||
We begin refresh with a possibly tainted coin $(C,\Mu,S)$ that
|
||||
we wish to refresh into $n \le \theta$ untainted coins.
|
||||
|
||||
In the change sitaution, our coin $(C,M,S)$ was partially spent and
|
||||
In the change sitaution, our coin $(C,\Mu,S)$ was partially spent and
|
||||
retains only a part of the value determined by the denominaton $d$.
|
||||
There is usually no denomination that matchets this risidual value
|
||||
so we must refresh from one coin into $n \le \theta$.
|
||||
@ -255,8 +254,8 @@ we let $x_{j,i}$ denote the value normally denoted $x$ of
|
||||
% So $C_{j,i} = c_{j,i} G$, $\Mu_{j,i}$, $m_{j,i}$, and $b^{j,i}$
|
||||
% must be derived from $s^{j,i}$ as above.
|
||||
We need only consider one such new coin at a time usually,
|
||||
so let $x'$ denote $x^{j,i}$ when $i$ and $j$ are clear from context.
|
||||
So as above $c'$, $\mu'$, and $b_j$ are derived from $s_j$,
|
||||
so let $x'$ denote $x_{j,i}$ when $i$ and $j$ are clear from context.
|
||||
In other words, $c'$, $\mu'$, and $b_j$ are derived from $s_j$,
|
||||
and both $C' = c' G$ and $\Mu' = \CSK(s')$.
|
||||
|
||||
\paragraph{Wallet phase 1.}
|
||||
@ -265,10 +264,10 @@ So as above $c'$, $\mu'$, and $b_j$ are derived from $s_j$,
|
||||
\begin{itemize}
|
||||
\item Create random $\zeta_j$ and $l_j$.
|
||||
\item Also compute $L_j = l_j G$.
|
||||
\item Generate $\lambda_j$, $\Lambda_j$, and
|
||||
$\eta_j = \KEX_2(\lambda,\Mu)$ as appropriate
|
||||
using $\mu$. % or possibly $\Mu$.
|
||||
\item Set the linking commitment $\Gamma_{j,0} = (L_j,\Lambda_j)$.
|
||||
\item Generate $\lambda_j = \LSK((j,i),\mu)$,
|
||||
$\Lambda_j = \LPK(\lambda_j)$, and
|
||||
$\eta_j = \KEX_2(\lambda_j,\Mu)$.
|
||||
\item Set the linking commitment $\Gamma_{j,0} = (L_j,E_{l_j C}(\Lambda_j))$.
|
||||
\item Set $k_j = H(l_j C || \eta_j)$.
|
||||
\smallskip
|
||||
\item For $i=1 \cdots n$:
|
||||
@ -277,8 +276,8 @@ So as above $c'$, $\mu'$, and $b_j$ are derived from $s_j$,
|
||||
\item Derive $c'$, $m'$, and $b'$ from $s'$ as above.
|
||||
\item Compute $C' = c' G$ and $\Mu' = \CPK(m')$ too.
|
||||
\item Compute $B_{j,i} = B_{b'}(C' || \Mu')$.
|
||||
\item Encrypt $\Eta_{j,i} = E_{k_j}(s')$.
|
||||
\item Set the coin commitments $\Gamma_{j,i} = (\Eta_{j,i},B_{j,i})$
|
||||
\item Encrypt $\Gamma'_{j,i} = E_{k_j}(s')$.
|
||||
\item Set the coin commitments $\Gamma_{j,i} = (\Gamma'_{j,i},B_{j,i})$
|
||||
\end{itemize}
|
||||
\smallskip
|
||||
\end{itemize}
|
||||
@ -314,11 +313,11 @@ So as above $c'$, $\mu'$, and $b_j$ are derived from $s_j$,
|
||||
\item For $j = 1 \cdots \kappa$ except $\gamma$:
|
||||
\begin{itemize}
|
||||
\item Compute $\eta_j = \KEX_2(\lambda_j,\Mu)$.
|
||||
\item Verify that $\Lambda_j = \LPK(???)$
|
||||
\item Verify that $\Lambda_j = \LPK(\lambda_j)$
|
||||
\item Set $k_j = H(l_j C || \eta_j)$.
|
||||
\item For $i=1 \cdots n$:
|
||||
\begin{itemize}
|
||||
\item Decrypt $s' = D_{k_j}(\Eta_{j,i})$.
|
||||
\item Decrypt $s' = D_{k_j}(\Gamma'_{j,i})$.
|
||||
\item Compute $c'$, $m'$, and $b'$ from $s_j$.
|
||||
\item Compute $C' = c' G$ too.
|
||||
\item Verify $B' = B_{b'}(C' || \Mu')$.
|
||||
@ -333,13 +332,29 @@ replacing $\Gamma_*$ with both $\Gamma_{\gamma,0}$ and
|
||||
It's clear this requires the wallet send that signature in some phase,
|
||||
but also the wallet must accept a phase 2 responce to a phase 1 request.
|
||||
|
||||
\smallskip
|
||||
|
||||
There is good reason to fear tax evasion committed during the
|
||||
initial withdrawal of a coin as well. A merchant simply provides
|
||||
the customer with a blinded but unpurchased coin and asks them to
|
||||
pay to withdraw it.
|
||||
|
||||
\subsection{Withdrawal}\label{subsec:withdrawal}
|
||||
|
||||
In Taler, we may address tax fraud on initial withdrawal by turning
|
||||
withdrawal into a refresh from a pseudo-coin $(C,\Mu)$ consisting of
|
||||
the user's reserve key \cite[??]{Taler} and
|
||||
a post-quantum public key $\Mu$.
|
||||
We see below however that our public key algorithm has very different
|
||||
security requirements in this case, impacting our algorithm choices.
|
||||
|
||||
|
||||
\section{Post-quantum key exchanges}
|
||||
|
||||
In \cite{SIDH}, there is a Diffie-Helman like key exchange (SIDH)
|
||||
based on computing super-singular eliptic curve isogenies which
|
||||
functions as a drop in replacement, or more likely addition, for
|
||||
Taler's refresh protocol.
|
||||
In \cite{SIDH?,SIDH16}, there is a Diffie-Helman like key exchange
|
||||
(SIDH) based on computing super-singular eliptic curve isogenies
|
||||
which functions as a drop in replacement, or more likely addition,
|
||||
for Taler's refresh protocol.
|
||||
|
||||
In SIDH, private keys are the kernel of an isogeny in the 2-torsion
|
||||
or the 3-torsion of the base curve. Isogenies based on 2-torsion can
|
||||
@ -348,11 +363,22 @@ This rigidity makes constructing signature schemes with SIDH hard
|
||||
\cite{}, but does not impact our use case.
|
||||
|
||||
We let $\mu$ and $\Mu$ be the SIDH 2-torsion private and public keys,
|
||||
repectively. We simlarly let $\lambda_j$ and $\Lambda_j$ be the
|
||||
repectively. We simlarly let $\lambda$ and $\Lambda$ be the
|
||||
SIDH 3-torsion private and public keys.
|
||||
% DO IT :
|
||||
We define $\CPK$, $\CSK$, $\LPK$, $\LSK$, $\KEX_2$ and $\KEX_3$
|
||||
as appropriate from \cite{SIDH} too.
|
||||
|
||||
We envision the 2-torsion secret key generation function $\CSK(s)$
|
||||
for $\mu$ being deterministic with seed $s$, but the 3-torsion secret
|
||||
key generation function $\LSK()$ ignores the arguments given above
|
||||
Our 2-torsion and 3-torsion public key derivation functions
|
||||
$\CPK(\mu)$ and $\LPK(\lambda)$ along with our two key derivation
|
||||
functions $\KEX_2$ and $\KEX_3$, all work as described in
|
||||
\cite[\S6]{SIDH16}.
|
||||
|
||||
% We refer to \cite[\S6]{SIDH16}, \cite[??]{SIDH?15?}, and
|
||||
% \cite[]{SIDH?11?} for further discussion of the implementation.
|
||||
|
||||
There is no relationship between $\mu$ and $\lambda$ in SIDH, so
|
||||
$\Lambda$ cannot itself leak any information about $C$.
|
||||
|
||||
\smallskip
|
||||
|
||||
@ -360,21 +386,34 @@ Ring-LWE based key exchanges like \cite{Peikert14,NewHope} require
|
||||
that both Alice and Bob's keys be ephemeral because the success or
|
||||
failure of the key exchange leaks one bit about both keys\cite{}.
|
||||
As a result, authentication with Ring-LWE based schemes remains
|
||||
problematic\cite{}.
|
||||
harder than with discrete log schemes\cite{}.
|
||||
|
||||
We observe however that the Taler wallet controls both sides during
|
||||
the refresh protocol, so the wallet can ensure that the key exchange
|
||||
always succeeds. In fact, the Ring-LWE paramaters could be tunned to
|
||||
make the probability of failure arbitrarily high, saving the exchange
|
||||
bandwidth, storage, and verification time.
|
||||
|
||||
leave the probability of failure rather high, saving the exchange
|
||||
bandwidth, storage, and verification time.
|
||||
|
||||
We let $\mu$ and $\Mu$ be Alice (initator) side the private and public
|
||||
keys, repectively. We simlarly let $\lambda_j$ and $\Lambda_j$ be the
|
||||
Bob (respondent) private and public keys.
|
||||
% DO IT :
|
||||
Again now, $\CPK$, $\CSK$, $\LPK$, $\LSK$, $\KEX_2$ and $\KEX_3$
|
||||
can be defined from \cite{Peikert14,NewHope}. % DO IT
|
||||
can be defined from \cite{Peikert14,NewHope}.
|
||||
|
||||
\smallskip
|
||||
|
||||
At present, the SIDH implemention in \cite{SIDH16} requires about
|
||||
one third the key material and 100?? times as much CPU time as the
|
||||
Ring-LWE implemention in \cite{NewHope}.
|
||||
As noted above, Ring-LWE admits significant optimizations for the
|
||||
Taler refresh situation.
|
||||
|
||||
We observe however that the Ring-LWE public key $\Lambda$ has a risk
|
||||
of leaking information about $\Mu$. In particular, if polynomial $a$
|
||||
depends upon $\Mu$, like in \cite{NewHope}, then anonymity explicity
|
||||
depends upon the Ring-LWE problem\cite{}.
|
||||
...
|
||||
|
||||
|
||||
\section{Hashed-based one-sided public keys}
|
||||
@ -383,50 +422,76 @@ We now define our hash-based encryption scheme.
|
||||
Let $\delta$ denote our query security paramater and
|
||||
let $\mu$ be a bit string.
|
||||
For $j \le \kappa$, we define a Merkle tree $T_j$ of height $\delta$
|
||||
with leaves $\eta_{j,t} = H(\mu || "YeyCoins!" || t || j)$
|
||||
for $t \le 2^\delta$.
|
||||
Let $\Lambda_j$ denote the root of $T_j$, making
|
||||
$\LPK(j,\mu)$ the Merkle tree root function.
|
||||
Set $\Mu = H(\Lambda_1 || \cdots || \Lambda_\kappa)$,
|
||||
with leaves $\eta_j = H(\mu || "YeyCoins!" || t || j)$
|
||||
for some leaf index $t \le 2^\delta$.
|
||||
Let $t_j$ denote the root of $T_j$.
|
||||
Set $\Mu = H(t_1 || \cdots || t_\kappa)$,
|
||||
which defines $\CPK(\mu)$.
|
||||
|
||||
Now let $\lambda_{j,t}$ consist of $(j,t,\eta_{j,t})$ along with
|
||||
both the Merkle tree path that proves $\eta_{j,i}$ is a leaf of $T_j$,
|
||||
and $(\Lambda_1,\ldots,\Lambda_\kappa)$,
|
||||
making $\LSK(t,\mu)$ an embelished Merkle tree path function.
|
||||
Now let $\lambda_j = \LSK((t,j),\mu)$ consist of
|
||||
$(t,j,\eta_j)$ along with both
|
||||
the Merkle tree path that proves $\eta_j$ is a leaf of $T_j$,
|
||||
and $(t_1,\ldots,t_\kappa)$,
|
||||
making $\LSK$ an embelished Merkle tree path function.
|
||||
Also let $\Lambda_j = \LPK(\lambda_j)$ be $(t,j)$
|
||||
|
||||
We define $\KEX_2(\lambda_{j,t},\Mu) = \eta_{j,t}$
|
||||
if $\lambda_{j,t}$ proves that $\eta_{j,t}$ is a leaf for $\Mu$,
|
||||
We define $\KEX_2(\lambda_j,\Mu)$ to be $\eta_j$
|
||||
if $\lambda_j$ proves that $\eta_j$ is the $t$ leaf for $\Mu$,
|
||||
or empty otherwise.
|
||||
$\KEX_3(\Lambda_j,\mu)$ simply recomputes $\eta_j$ as above.
|
||||
If $\KEX_2$ works then so does $\KEX_3$.
|
||||
|
||||
As $\Lambda_j = (t,j)$, it matters that $\lambda_j$ actually
|
||||
demonstrates the position $t$ in the Merkle tree.
|
||||
|
||||
... proofs ...
|
||||
|
||||
\smallskip
|
||||
|
||||
We observe that $\CPK$ has running time $O(2^\delta)$, severely
|
||||
limiting $\delta$. We lack the time-space trade offs resolve
|
||||
this issue for hash-based signature (see \cite{SPHINCS}).
|
||||
|
||||
Imagine that $\delta = 0$ so that $T_j = H(\eta_j)$.
|
||||
In this scenario, a hostile exchange could request two different
|
||||
$\gamma$ to learn all $\eta_j$, if the wallet reruns its second
|
||||
phase. In principle, the wallet saves the exchange's signed
|
||||
choice of $\gamma$ before revealing $\eta_j$ for $j \neq \gamma$.
|
||||
It follows that even $\delta = 0$ does technically provides
|
||||
post-quantum anonymity,
|
||||
|
||||
We must worry about attacks that rewind the wallet from phase 2 to
|
||||
phase 1, or even parallelism bugs where the wallet answer concurrent
|
||||
requests. We cannot remove the curve25519 exchange $l_j C$ from the
|
||||
refresh protocol becausenn such attacks would represent serious risks
|
||||
without it. With our $l_j C$ component, there is little reason for
|
||||
an attacker to pursue $\eta_j$ alone unless they expect to break
|
||||
curve25519 in the future, either through mathematical advances or
|
||||
by building a quantum computer.
|
||||
|
||||
We therefore view $\delta$ as a query complexity paramater whose
|
||||
optimial setting depends upo nthe strength of the overall protocoll.
|
||||
|
||||
\smallskip
|
||||
|
||||
We can magnify the effective $\delta$ by using multiple $\eta_j$.
|
||||
|
||||
... analysis ...
|
||||
% multiple withdrawals
|
||||
|
||||
We believe this provides sufficent post-quantum security for
|
||||
refreshing change.
|
||||
|
||||
|
||||
$\Mu = H(\Lambda_1 || \cdots || \Lambda_\kappa)$
|
||||
\section{Hash and Ring-LWE hybrid}
|
||||
|
||||
$\KEX_3(\Lambda,\mu)$
|
||||
We noted above in \S\ref{subsec:withdrawal} that exchange might
|
||||
require a refresh-like operation when coins are initially withdrawn.
|
||||
|
||||
...
|
||||
% Use birthday about on Alice vs Bob keys
|
||||
|
||||
|
||||
$H(\eta_{j,i})$ along with a path
|
||||
|
||||
$\eta$, $\lambda$, $\Lambda$, $\mu$, and $\Mu$ for key material
|
||||
|
||||
|
||||
We require there be effeciently computable
|
||||
$\CPK$, $\CSK$, $\LPK$, $\LSK$, $\KEX_2$ and $\KEX_3$ such that
|
||||
\begin{itemize}
|
||||
\item $\mu = \CSK(s)$ for a random bitstring $s$,
|
||||
$\Mu = \CPK(\mu)$,
|
||||
\item $\lambda = \LSK(t,\mu)$ and $\Lambda = \LPK(t,\mu)$
|
||||
for a random bitstring $t$, and
|
||||
\item $\eta = \KEX_2(\lambda,\Mu) = \KEX_3(\Lambda,\mu)$.
|
||||
\end{itemize}
|
||||
In particular, if $\KEX_3(\Lambda,\mu)$ would fail
|
||||
then $\KEX_2(\lambda,\Mu)$ must fail too.
|
||||
|
||||
\begin{itemize}
|
||||
\item
|
||||
\item
|
||||
\end{itemize}
|
||||
\section{Conclusions}
|
||||
|
||||
|
||||
\bibliographystyle{alpha}
|
||||
@ -441,99 +506,22 @@ In particular, if $\KEX_3(\Lambda,\mu)$ would fail
|
||||
|
||||
\end{document}
|
||||
|
||||
\begin{itemize}
|
||||
\item
|
||||
\item
|
||||
\end{itemize}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
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}
|
||||
|
||||
Crazy pants ideas :
|
||||
|
||||
Use a larger Mrkle tree with start points seeded throughout
|
||||
|
||||
Use a Merkle tree of SWIFFT hash functions becuase
|
||||
their additive homomorphic property lets you keep the form of a polynomial
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user