From 895e24872de95acf255e0746b42f0661697e7f9a Mon Sep 17 00:00:00 2001
From: Christian Grothoff <christian@grothoff.org>
Date: Sun, 12 Jul 2020 18:19:17 +0200
Subject: initial import of thesis-dold

---
 doc/system/taler/design.tex | 1286 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 1286 insertions(+)
 create mode 100644 doc/system/taler/design.tex

(limited to 'doc/system/taler/design.tex')

diff --git a/doc/system/taler/design.tex b/doc/system/taler/design.tex
new file mode 100644
index 000000000..8ee3ff3c9
--- /dev/null
+++ b/doc/system/taler/design.tex
@@ -0,0 +1,1286 @@
+
+% FIXME:  maybe move things around a bit, structure it better into
+% sections and subsections?
+
+% FIXME:  talk about amounts and anonymity
+
+
+\chapter{GNU Taler, an Income-Transparent Anonymous E-Cash System}\label{chapter:design}
+
+This chapter gives a high-level overview of the design of GNU Taler, based on
+the requirements discussed in Chapter~\ref{chapter:introduction}.  The
+cryptographic protocols and security properties are described and analyzed in detail in
+Chapter~\ref{chapter:security}.  A complete implementation with focus on of Web
+payments is discussed in Chapter~\ref{chapter:implementation}.
+
+
+\section{Design of GNU Taler}
+
+GNU Taler is based on the idea of Chaumian e-cash \cite{chaum1983blind}, with
+some differences and additions explained in the following sections.  Other
+variants and extensions of anonymous e-cash and blind signatures are discussed in
+Section~\ref{sec:related-work:e-cash}.
+
+
+\subsection{Entities and Trust Model}
+GNU Taler consists of the following entities (see \ref{fig:taler-arch}):
+\begin{itemize}
+  \item The \emph{exchanges} serve as payment service provider for a
+    financial transaction between a customer and a merchant. They hold bank money
+    in escrow in exchange for anonymous digital \emph{coins}.
+  \item The \emph{customers} keep e-cash in their electronic \emph{wallets}.
+  \item The \emph{merchants} accept digital coins in exchange for digital or physical
+    goods and services.  The digital coins can be deposited with the exchange,
+    in exchange for bank money.
+  \item The \emph{banks} receive wire transfer instructions from customers
+    and exchanges.  A customer, merchant and exchange involved in one
+    GNU Taler payment do not need to have accounts with the same bank,
+    as long as wire transfers can be made between the respective banks.
+  \item The \emph{auditors}, typically run by trusted financial regulators,
+    monitor the behavior of exchanges to assure customers and merchants that
+    exchanges operate correctly.
+\end{itemize}
+
+\begin{figure}
+  \begin{center}
+  \begin{tikzpicture}
+   \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em];
+   \node (origin) at (0,0) {};
+   \node (exchange) [def,above=of origin,draw]{Exchange};
+   \node (customer) [def, draw, below left=of origin] {Customer};
+   \node (merchant) [def, draw, below right=of origin] {Merchant};
+   \node (auditor) [def, draw, above right=of origin]{Auditor};
+
+   \tikzstyle{C} = [color=black, line width=1pt]
+
+   \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins};
+   \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins};
+   \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins};
+   \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify};
+
+  \end{tikzpicture}
+  \end{center}
+  \caption[High-level overview of GNU Taler components.]{High-level overview of the different components of GNU Taler, banks are omitted.}
+  \label{fig:taler-arch}
+\end{figure}
+
+In GNU Taler, the exchanges can be separate entities from the banks.  This fosters
+competition between exchanges, and allows Taler to be deployed in an
+environment with legacy banks that do not support Taler directly.
+
+If a customer wants to pay a merchant, the customer needs to hold coins at an
+exchange that the merchant trusts.  To make the selection of trusted exchanges
+simpler, merchants and customers can choose to automatically trust all
+exchanges audited by a certain auditor.
+
+The exchange is trusted to hold funds of its customers in escrow and to make
+payments to merchants when digital coins are deposited.  Customer and merchant
+can have assurances about the exchange's liquidity and operation though the
+auditor, which would typically be run by financial regulators or other trusted
+third parties.
+
+\subsection{System Assumptions}
+
+We assume that an anonymous, bi-directional communication channel\footnote{%
+An anonymization layer like Tor \cite{dingledine2004tor} can provide a
+practical approximation of such a communication channel, but does not provide
+perfect anonymity \cite{johnson2013users}.
+} is used for
+all communication between the customer and the merchant, as well as for
+obtaining unlinkable change for partially spent coins from the exchange and for
+retrieving the exchange's public keys used in verifying and blindly signing
+coins.  The withdrawal protocol, on the other hand, does not require an
+anonymous channel to preserve the anonymity of electronic coins.
+
+During withdrawal, the exchange knows the identity of the withdrawing customer,
+as there are laws, or bank policies, that limit the amount of cash that an
+individual customer can withdraw in a given time
+period~\cite{france2015cash,greece2015cash}.  GNU Taler is thus only anonymous with
+respect to \emph{payments}.  While the exchange does know their customer (KYC),
+it is unable to link the known identity of the customer that withdrew anonymous
+digital coins to the \emph{purchase} performed later at the merchant.
+
+While customers can make untraceable digital cash payments, the exchange will
+always learn the merchants' identity, which is necessary to credit their
+accounts.  This information can also be used for taxation, and GNU Taler
+deliberately exposes these events as anchors for tax audits on merchants'
+income.  Note that while GNU Taler \emph{enables} taxation, it does not
+\emph{implement} any automatic taxation.
+
+GNU Taler assumes that each participant has full control over their
+system%
+\footnote{%
+  Full control goes both ways:  it gives the customer the freedom to run their own software,
+  but also means that the behavior of fraudulent customers cannot be restricted by
+  simpler technical means such as keeping balances on tamper-proof smart cards,
+  and thus can lead to an overall more complex system.
+}.  We assume the contact information of the exchange is known to
+both customer and merchant from the start, and the customer
+can authenticate the merchant, for example, by using X.509
+certificates~\cite{rfc6818}.  A GNU Taler merchant is expected to deliver
+the service or goods to the customer upon receiving payment.  The
+customer can seek legal relief to achieve this, as the customer
+receives cryptographic evidence of the contract and the associated
+payment.
+
+% FIXME:  who needs to be trusted for anonymity?
+
+
+\subsection{Reserves}
+A \emph{reserve} refers to a customer's non-anonymous funds at an exchange,
+identified by a reserve public key.  Suppose a customer wants to convert money
+into anonymized digital coins.  To do that, the customer first creates a
+reserve private/public key pair, and then transfers money via their bank to the
+exchange.  The wire transfer instruction to the bank must include the reserve
+public key.  To withdraw coins from a reserve, the customer authenticates
+themselves using the corresponding reserve private key.
+
+Typically, each wire transfer is made with a fresh reserve public key and thus
+creates a new reserve, but making another wire transfer with the same reserve
+public key simply adds funds to the existing reserve.  Even after all funds
+have been withdrawn from a reserve, customers should keep the reserve key pair
+until all coins from the corresponding reserve have been spent, as in the event
+of a denomination key revocation (see Section \ref{sec:revocation-payback}) the
+customer needs this key to recover coins of revoked denominations.
+
+The exchange automatically transfers back to the customer's bank account any
+funds that have been left in a reserve for an extended amount of time, allowing
+customers that lost their reserve private key to eventually recover their
+funds.  If a wire transfer to the exchange does not include a valid reserve public key,
+the exchange transfers the money back to the sender.
+
+% FIXME:  this really needs a diagram
+
+Instead of requiring the customer to manually generate reserve key pairs and
+copy them onto a wire transfer form, banks can offer tight integration with the
+GNU Taler wallet software.  In this scenario, the bank's website or banking app
+provides a ``withdraw to GNU Taler wallet'' action.  After selecting this
+action, the user is asked to choose the amount to withdraw from their bank
+account into the wallet.  The bank then instructs the GNU Taler wallet software
+to create record of the corresponding reserve; this request contains the anticipated amount, the
+reserve key pair and the URL of the exchange to be used.  When invoked by the
+bank, the wallet asks the customer to select an exchange and to confirm the
+reserve creation.  The exchange chosen by the customer must support the wire
+transfer method used by the bank, which will be automatically checked by the
+wallet.  Typically, an exchange is already selected by default, as banks can
+suggest a default exchange provider to the wallet, and additionally wallets
+have a pre-defined list of trusted exchange providers.  Subsequently, the wallet
+hands the reserve public key and the bank account information of the selected
+exchange back to the bank.  The bank---typically after asking for a second authentication
+factor from the customer---will then trigger a wire transfer to the exchange with
+the information obtained from the wallet.
+
+When the customer's bank does not offer tight integration with GNU Taler, the
+customer can still manually instruct their wallet to create a reserve.  The public
+key must then be included in a bank transaction to the exchange.  When the
+customer's banking app supports pre-filling wire transfer details from a URL or
+a QR code, the wallet can generate such a URL or QR code that includes the
+pre-filled bank account details of the exchange as well as the reserve public
+key.  The customer clicks on this link or scans the QR code to invoke their
+banking app with pre-filled transaction details.  Since there currently is no
+standardized format for pre-filled wire transfer details, we are proposing the
+\texttt{payto://} URI format explained in
+Section~\ref{implementation:wire-method-identifiers}, currently under review
+for acceptance as an IETF Internet Standard.
+
+
+% FIXME: withdrawal strategy, coin selection
+
+\subsection{Coins and Denominations}
+Unlike plain Chaumian e-cash, where a coin just contains a serial number, a
+\emph{coin} in Taler is a public/private key pair where the private key is only
+known to the owner of the coin.
+
+A coin derives its financial value from a blind signature on the coin's
+public key. The exchange has multiple \emph{denomination key} pairs available
+for blind-signing coins of different financial values.  Other approaches for representing
+different denominations are discussed in Section~\ref{design:related-different-denominations}.
+
+Denomination keys have an expiration date, before which any coins signed with
+it must be spent or exchanged into newer coins using the refresh protocol
+explained in Section \ref{sec:design-refresh}.  This allows the exchange to
+eventually discard records of old transactions, thus limiting the records that
+the exchange must retain and search to detect double-spending attempts.  If a
+denomination's private key were to be compromised, the exchange can detect this
+once more coins are redeemed than the total that was signed into existence
+using that denomination key.  Should such an incident occur, the exchange can allow authentic
+customers to redeem their unspent coins that were signed with the compromised
+private key, while refusing further deposits involving coins signed by the
+compromised denomination key (see Section~\ref{sec:revocation-payback}).  As a result, the
+financial damage of losing a private signing key is limited to at most the
+amount originally signed with that key, and denomination key rotation can be
+used to bound that risk.
+
+To prevent the exchange from deanonymizing users by signing each coin with a
+fresh denomination key, exchanges publicly announce their denomination keys
+in advance with validity periods that imply sufficiently strong anonymity sets.
+These announcements are expected to be signed with an offline long-term
+private \emph{master signing key} of the exchange and the auditor.
+Customers should obtain these announcements using an anonymous
+communication channel.
+
+After a coin is issued, the customer is the only entity that knows the
+private key of the coin, making them the \emph{owner} of the coin.  Due
+to the use of blind signatures, the exchange does not learn the
+public key during the withdrawal process.  If the private key is
+shared with others, they become co-owners of the coin.  Knowledge of
+the private key of the coin and the signature over the coin's public
+key by an exchange's denomination key enables spending the
+coin.
+
+\subsection{Partial Spending and Unlinkable Change}
+
+Customers are not required to have exact change ready when making a payment.
+In fact, it should be encouraged to withdraw a larger amount of e-cash
+beforehand, as this blurs the correlation between the non-anonymous withdrawal
+event and the anonymous spending event, increasing the anonymity set.
+
+A customer spends a coin at a merchant by cryptographically signing a
+\emph{deposit permission} with the coin's private key.  A deposit permission
+contains the hash of the \emph{contract terms}, i.e., the details of the
+purchase agreement between the customer and merchant. Coins can be
+\emph{partially} spent, and a deposit permission specifies the fraction of the
+coin's value to be paid to the merchant. As digital coins are trivial to copy,
+the merchant must immediately deposit them with the exchange, in order to get a
+deposit confirmation or an error that indicates double spending.
+
+When a coin is used in a completed or attempted/aborted payment, the coin's
+public key is revealed to the merchant/exchange, and further payments with the
+remaining amount would be linkable to the first spending event.  To obtain
+unlinkable change for a partially spent (or otherwise revealed coin), GNU Taler
+introduces a \emph{refresh protocol}.  The refresh protocol allows the customer
+to obtain new coins for the remaining amount on a coin.  The old coin is marked
+as spent after it has been refreshed into new coins.  Using blind signatures to
+withdraw the refreshed coins makes them unlinkable from the old coin.
+
+% FIXME: talk about logarithmic time, simulation
+
+\subsection{Refreshing and Taxability}\label{sec:design-refresh}
+% FIXME:  maybe put section on how to avoid withdraw loophole here!
+One goal of GNU Taler is to make merchants' income transparent to state auditors,
+so that income can be taxed appropriately.  Naively implemented, however, a simple
+refresh protocol could be used to evade taxes:  the payee of an untaxed
+transaction would generate the private keys for the coins that result from
+refreshing a (partially spent) old coin, and send the corresponding public keys
+to the payer.  The payer would execute the refresh protocol, provide the
+payee's coin public keys for blind signing, and provide the signatures to the
+payee, who would now have exclusive control over the coins.
+
+To remedy this, the refresh protocol introduces a \emph{link threat}: coins are
+refreshed in such a way that the owner of the old coin can always obtain the
+private key and exchange's signature on the new coins resulting from refreshes,
+using a separate \emph{linking protocol}.  This introduces a threat to
+merchants that try to obtain untaxed income.  Until the coins are finally
+deposited at the exchange, the customer can always re-gain ownership of them
+and could deposit them before the merchant gets a chance to do so.  This
+disincentivizes the circulation of unreported income among untrusted parties in
+the system.
+
+In our implementation of the refresh and linking protocols, there is a
+non-negligible success chance ($\frac{1}{\kappa}$, depending on system parameter
+$\kappa$, typically $\ge 3$) for attempts to cheat during the refresh protocol,
+resulting in refreshed coins that cannot be recovered from the old coin via the
+linking protocol.  Cheating during refresh, however, is still not
+\emph{profitable}, as an unsuccessful attempt results in completely losing the
+amount that was intended to be refreshed.
+
+% FIXME:  mention that we don't want to use DRM/HSMs for this
+
+For purposes of anti-money-laundering and taxation, a more detailed audit of
+the merchant's transactions can be desirable.  A government tax authority can
+request the merchant to reveal the business agreement details that match the
+contract terms hash recorded with the exchange.  If a merchant is not able to
+provide theses values, they can be subjected to financial penalties by the
+state in relation to the amount transferred by the traditional currency
+transfer.
+
+\subsection{Transactions vs. Sharing}
+
+Sharing---in contrast to a transaction---happens when mutually trusted parties
+simultaneously have access to the private keys and signatures on coins.
+Sharing is not considered a transaction, as subsequently both parties have equal control
+over the funds.  A useful application for sharing are peer-to-peer payments
+between mutually trusting parties, such as families and friends.
+
+\subsection{Aggregation}
+For each payment, the merchant can specify a deadline before which the exchange
+must issue a wire transfer to the merchant's bank account.  Before this
+deadline occurs, multiple payments from deposited coins to the same merchant
+can be \emph{aggregated} into one bigger payment.  This reduces transaction
+costs from underlying banking systems, which often charge a fixed fee per
+transaction.  To incentivize merchants to choose a longer wire transfer
+deadline, the exchange can charge the merchant a fee per aggregated wire
+transfer.
+
+
+\subsection{Refunds}
+The aggregation period also opens the opportunity for cheap \emph{refunds}.  If
+a customer is not happy with their product, the merchant can instruct the
+exchange to give the customer a refund before the wire transfer deadline has
+occurred.  This effectively ``undoes'' the deposit of the coin, and restores the
+available amount left on it.  The refresh protocol is then used by the customer
+on the coins involved in a refund, so that payments remain unlinkable.
+
+
+% FIXME: mention EU customer laws / 14 weeks?
+
+\subsection{Fees}
+In order to subsidize the operation of the exchange and enable a sustainable
+business model, the exchange can charge fees for most operations.  For
+withdrawal, refreshing, deposit and refunds, the fee is dependent on the denomination,
+as different denominations might have different key sizes, security and storage
+requirements.
+
+Most payment systems hide fees from the customer by putting them to the merchant.
+This is also possible with Taler.  As different exchanges (and denominations)
+can charge different fees, the merchant can specify a maximum amount of fees it
+is willing to cover.  Fees exceeding this amount must be explicitly paid by the
+customer.
+
+Another consideration for fees is the prevention of denial-of-service attacks.
+To make ``useless'' operations, such as repeated refreshing on coins
+(causing the exchange to use relatively expensive storage), unattractive to an
+adversary, these operations must charge a fee.  Again, for every refresh
+following a payment, the merchant can cover the costs up to a limit set by the
+merchant, effectively hiding the fees from the customer.
+
+Yet another type of fee are the \emph{wire transfer fees}, which are charged
+by the exchange for every wire transfer to a merchant in order to compensate for
+the cost of making a transaction in the underlying bank system.  The wire
+transfer fees encourage merchants to choose longer aggregation periods, as the
+fee is charged per transaction and independant of the amount.
+
+Merchants can also specify the maximum wire fee they are willing to cover for
+customers, along with an \emph{amortization rate} for the wire fees.  In case
+the wire fees for a payment exceed the merchant's chosen maximum, the customer
+must additionally pay the excess fee divided by the amortization rate.  The
+merchant should set amortization rate to the expected number of transactions
+per wire transfer aggregation window.  This allows the merchant to adjust
+the total expected amount that it needs to pay for wire fees.
+
+
+\subsection{The Withdraw Loophole and Tipping}\label{taler:design:tipping}
+The withdraw protocol can be (ab)used to illicitly transfer money, when the
+receiver generates the coin's secret key, and gives the public key to the party
+executing the withdraw protocol.  We call this the ``withdraw loophole''.  This
+is only possible for one ``hop'', as money can still not circulate among
+mutually distrusted parties, due to the properties of the refresh protocol.
+
+A ``benevolent'' use of the withdraw loophole is \emph{tipping}, where merchants give
+small rewards to customers (for example, for filling out a survey or installing
+an application), without any contractual obligations or digitally signed
+agreement.
+
+% FIXME:  argue that this can't be done on scale for money laundering
+
+\subsubsection{Fixing the Withdraw Loophole}\label{taler:design:fixing-withdraw-loophole}
+
+In order to discourage the usage of the withdraw loophole for untaxed payments,
+the following approach would be possible:  Normal withdraw operations and
+unregistered reserves are disabled, except for special tip reserves that are
+registered by the merchant as part of a tipping campaign.  Customers are
+required to pre-register at the exchange and obtain a special withdraw key pair
+against a small safety deposit.  Customer obtain new coins via a refresh
+operation from the withdraw key to a new coin.  If customers want to abuse
+Taler for untaxed payments, they either need to risk losing money by lying
+during the execution of the refresh protocol, or share their reserve private
+key with the payee.  In order to discourage the latter, the exchanges gives the
+safety deposit to the first participant who reports the corresponding private
+key as being used in an illicit transaction, and requires a new safety deposit
+before the customer is allowed to withdraw again.
+
+However since the withdraw loophole allows only one additional ``payment'' (without any
+cryptographic evidence that can be used in disputes) before the coin must be deposited,
+these additional mitigations might not even be justified considering their additional cost.
+
+
+\section{Auditing}
+The auditor is a component of GNU Taler which would typically be deployed by a
+financial regulator, fulfilling the following functionality:
+\begin{itemize}
+  \item It regularly examines the exchange's database and
+    bank transaction history to detect discrepancies.
+  \item It accepts samples of certain protocol responses that merchants
+    received from an audited exchange, to verify that what the exchange signed
+    corresponds to what it stored in its database.
+  \item It certifies exchanges that fulfill the operational and financial requirements
+    demanded by regulators.
+  \item It regularly runs anonymous checks to ensure that the required protocol
+    endpoints of the exchange are available.
+  \item In some deployment scenarios, merchants need to pre-register with exchanges to fulfill know-your-customer (KYC) requirements.
+    The auditor provides a list of certified exchanges to merchants,
+    to which the merchant then can automatically KYC-register.
+  \item It provides customers with an interface to submit cryptographic proof that an exchange
+    misbehaved.  If a customer claims that the exchange denies service, it can execute a request on
+    behalf of the customer.
+\end{itemize}
+
+%An exchange operator would typically run their own instance of the auditor software,
+%to ensure correct operation.
+
+% FIXME: live auditing
+
+% FIXME: discuss indian merchant scenario
+
+\subsection{Exchange Compromise Modes}
+The exchange is an attractive target for hackers and insider threats.  We now
+discuss different ways that the exchange can be compromised, how to reduce the
+likelihood of such a compromise, and how to detect and react to such an event
+if it happens.
+
+\subsubsection{Compromise of Denomination Keys and Revocation}\label{sec:revocation-payback}
+When a denomination key pair is compromised, an attacker can ``print money'' by
+using it to sign coins of that denomination.  An exchange (or its auditor) can
+detect this when the number of deposits for a certain denomination exceed the
+number of withdrawals for that same denomination.
+
+We allow the exchange to revoke denomination keys, and wallets periodically
+check for such revocations.  We call a coin of a revoked denomination a revoked
+coin.  If a denomination key has been revoked, the wallets use the
+\emph{payback} protocol to recover funds from coins of revoked denominations.
+Once a denomination is revoked, new coins of this denomination can't be
+withdrawn or used as the target denomination for a refresh operation. A revoked
+coin cannot be spent, and can only be refreshed if its public key was recorded
+in the exchange's database (as spending/refresh operations) before it was
+revoked.
+
+The following cases are possible for payback:
+\begin{enumerate}
+  \item The revoked coin has never been seen by the exchange before, but the
+    customer can prove via a withdraw protocol transcript and blinding factor
+    that the coin resulted from a legitimate withdrawal from a reserve.  In
+    this case, the exchange credits the reserve that was used to withdraw the
+    coin with the value of the revoked coin.
+  \item The coin has been partially spent.  In this case, the exchange allows
+    the remaining amount on the coin to be refreshed into fresh coins of
+    non-revoked denominations.
+  \item The revoked coin $C_R$ has never been seen by the exchange before, was
+    obtained via the refresh protocol, and the exchange has an existing record
+    of either a deposit or refresh for the ancestor coin $C_A$ that was
+    refreshed into the revoked coin $C_R$. If the customer can prove this by
+    showing a corresponding refresh protocol transcript and blinding factors, the exchange credits
+    the remaining value of $C_R$ on $C_A$.  It is explicitly permitted for $C_A$
+    to be revoked as well.  The customer can then obtain back their funds by
+    refreshing $C_A$.
+\end{enumerate}
+
+These rules limit the maximum financial damage that the exchange can incur from
+a compromised denomination key $D$ to $2nv$, with $n$ being the
+maximum number of $D$-coins simultaneously in circulation and $v$ the financial
+value of a single $D$-coin.  Say denomination $D$ was withdrawn by
+legitimate users $n$ times.  As soon as the exchange sees more
+than $n$ pairwise different $D$-coins, it must immediately
+revoke $D$.  An attacker can thus at most gain $nv$ by either
+refreshing into other non-revoked denominations or spending the forged $D$-coins.
+The legitimate users can then request a payback for their coins, resulting in
+a total financial damage of at most $2nv$.
+
+With one rare exception, the payback protocol does not negatively impact the
+anonymity of customers.  We show this by looking at the three different cases
+for payback on a revoked coin.  Specifically, in case (1), the coin obtained
+from the credited reserve is blindly signed, in case (2) the refresh protocol
+guarantees unlinkability of the non-revoked change, and in case (3) the revoked
+coin $C_R$ is assumed to be fresh.  If $C_R$ from case (3) has been seen by a
+merchant before in an aborted/unfinished transaction, this transaction would be
+linkable to transactions on $C_A$.  Thus, anonymity is not preserved when an
+aborted transaction coincides with revoked denomination, which should be rare
+in practice.
+
+Unlike most other operations, the
+payback protocol does not incur any transaction fees. The primary use of the
+protocol is to limit the financial loss in cases where an audit reveals that
+the exchange's private keys were compromised, and to automatically pay back
+balances held in a customers' wallet if an exchange ever goes out of business.
+
+To limit the damage of a compromise, the exchange can employ a hardware
+security module that contains the denomination secret keys, and is
+pre-programmed with a limit on the number of signatures it can produce.  This
+might be mandated by certain auditors, who will also audit the operational
+security of an exchange as part of the certification process.
+
+\subsubsection{Compromise of Signing Keys}
+When a signing key is compromised, the attacker can pretend to be a
+merchant and forge deposit confirmations.  To forge a deposit
+confirmation, the attacker also needs to get a customer to sign a
+contract from the adversary (which should include the adversary's
+banking details) with a valid coin.  The attack here is that the
+customer is allowed to have spent the coin already. Thus, a deposit of
+the resulting deposit permission would result in a rejection from the
+exchange due to double spending.  By forging the deposit confirmation
+using the compromised signing key, the attacker can thus claim in
+court that they properly deposited the coin first and demand payment
+from the exchange.
+
+We note that indeed an evil exchange could simply fail to record
+deposit permissions in its database and then fail to execute them.
+Thus, given a merchant presenting a deposit confirmation, we need
+a way to establish whether this is a case of an evil exchange that
+should be compelled to pay, or a case of a compromised signing key
+and where payouts (and thus financial damage to the exchange)
+can legitimately be limited.
+
+To limit the financial damage of a compromised signing key, merchants
+must be required to work with auditors to perform a
+\emph{probabilistic deposit auditing} of the exchange.  Here, the goal
+is to help detect the compromise of a signing key by making sure that
+the exchange does indeed properly record deposit confirmations.
+However, double-checking with the auditor if every deposit
+confirmation is recorded in the exchange's database would be too
+expensive and time-consuming.  Fortunately, a probabilistic method
+where merchants only send a small fraction of their deposit
+confirmations to the auditor suffices.  Then, if the auditor sees a
+deposit confirmation that is not recorded in the exchange's database
+(possibly after performing the next synchronization with the
+exchange's database), it signals the exchange that the signing key has
+been compromised.
+
+At this point, the signing key must be revoked and the exchange will
+be required to investigate the security of its systems and address the
+issue before resuming normal operations.
+%
+%If the exchange had separate short-term signing keys just for signing deposit
+%confirmations, it could also employ hardware security modules with a counter,
+%and check if the value of the counter matches matches the deposit confirmations
+%recorded in the database.
+
+Still, at this point various actors (including the attacker) could still
+step forward with deposit confirmations signed by the revoked key and
+claim that the exchange owes them for their deposits.  Simply revoking
+a signing key cannot lift the exchange's payment obligations, and the
+attacker could have signed an unlimited number of such deposit confirmations
+with the compromised key.  However, in contrast to honest merchants, the
+attacker will not have participated {\em proportionally} in the auditor's
+probabilistic deposit auditing scheme for those deposit confirmations:
+in that case, the key compromise would have been detected and the key
+revoked.
+
+The exchange must still pay all deposit permissions it signed for
+coins that were not double-spent.  However, for all coins where
+multiple merchants claim that they have a deposit confirmation, the
+exchange will pay the merchants proportionate to the fraction of the
+coins that they reported to the auditor as part of probabilistic
+deposit auditing.  For example, if 1\% of deposits must be reported to
+the auditor according to the protocol, a merchant might be paid at
+most say 100+X times the number of reported deposits where $X>0$
+serves to ensure proper payout despite the probabilistic nature of the
+reporting.  As a result, honest merchants have an {\em incentive} to
+correctly report the deposit confirmations to the auditor.
+
+Given this scheme, the attacker can only report a small number of
+deposit confirmations to the auditor before triggering the signing key
+compromise detection.  Suppose again that 1\% of deposit confirmations
+are reported by honest merchants, then the attacker can only expect to
+submit 100 deposit permissions created by the compromised signing key
+before being detected.  The attacker's expected financial benefit from
+the key compromise would then be the value of $(100+X) \cdot 100$
+deposit permissions.
+
+Thus, the financial benefit to the attacker can be limited by
+probabilistic deposit auditing, and honest merchants have proper
+incentives to participate in the process.
+
+\subsubsection{Compromise of the Database}
+If an adversary would be able to modify the exchange, this would be detected
+rather quickly by the auditor, provided that the database has appropriate
+integrity mechanisms.  An attacker could also prevent database updates to block
+the recording of spend operations, and then double spend.  This is effectively
+equivalent to the compromise of signing keys, and can be detected with the same
+strategies.
+
+\subsubsection{Compromise of the Master Key}
+If the master key was compromised, an attacker could de-anonymize customers by
+announcing different sets of denomination keys to each of them.  If the
+exchange was audited, this would be detected quickly, as these denominations
+will not be signed by auditors.
+
+\subsection{Cryptographic Proof}
+
+We use the term ``proof'' in many places as the protocol provides cryptographic
+proofs of which parties behave correctly or incorrectly. However,
+as~\cite{fc2014murdoch} point out, in practice financial systems need to
+provide evidence that holds up in courts.  Taler's implementation is designed
+to export evidence and upholds the core principles described
+in~\cite{fc2014murdoch}.  In particular, in providing the cryptographic proofs
+as evidence none of the participants have to disclose their core secrets.
+
+\subsection{Perfect Crime Scenarios}\label{sec:design:blackmailing}
+GNU Taler can be slightly modified to thwart blackmailing or kidnapping
+attempts by criminals who intend to use the anonymity properties of the system
+and demand to be paid ransom in anonymous e-cash.
+
+Our modification incurs a slight penalty on the latency for customers during normal use and
+requires slightly more data to be stored in the exchange's database, and thus
+should only be used in deployments where resistance against perfect crime
+scenarios is necessary.  A payment system for a school cafeteria likely does
+not need these extra measures.
+
+The following modifications are made:
+\begin{enumerate}
+  \item Coins can now only be used in either a transaction or in a refresh operations, not a mix of both.
+    Effectively, the customer's wallet then needs to use the refresh protocol to prepare exact change
+    before a transaction is made, and that transaction is made with exact change.
+
+    This change is necessary to preserve anonymity in face of the second modification, but increases
+    storage requirements and latency.
+  \item The payback protocol is changed so that a coin obtained
+    via refreshing must be recovered differently when revoked: to recover a revoked coin
+    obtained via refreshing, the customer needs to show the transcripts for the
+    chain of all refresh operations and the initial withdrawal operation
+    (including the blinding factor).  Refreshes on revoked coins are not
+    allowed anymore.
+\end{enumerate}
+
+After an attacker has been paid ransom, the exchange simply revokes all currently offered denominations
+and registers a new set of denomination with the auditor.
+Reserves used to pay the attacker are marked as blocked in the exchange's
+database.  Normal users can use the payback protocol to obtain back the money
+they've previously had in revoked denominations.  The attacker can try to
+recover funds via the (now modified) payback protocol, but this attempt will
+not be successful, as the initial reserve is blocked.  The criminal could also
+try to spend the e-cash anonymously before it is revoked, but this is likely
+difficult for large amounts, and furthermore due to income transparency all
+transactions made between the payment of the ransom and the revocation can be
+traced back to merchants that might be complicit in laundering the ransom
+payment.
+
+Honest customers can always use the payback protocol to transfer the funds to
+the initial reserve.  Due to modification (1), unlinkability of transactions is
+not affected, as only coins that were purely used for refreshing can now be
+correlated.
+
+We believe that our approach is more practical than the approaches based on
+tracing, since in a scheme with tracing, the attacker can always ask for a
+plain blind signature.  With our approach, the attacker will always lose funds
+that they cannot immediately spend.  Unfortunately our approach is limited to a
+kidnapping scenario, and not applicable in those blackmail scenarios where the
+attacker can do damage after they find out that their funds have been erased.
+
+\section{Related Work}
+% FIXME: Stuff to review/include:
+% Blindly Signed Contracts: Anonymous On-Blockchain and Off-Blockchain Bitcoin Transactions
+% zcash taxability stuff
+
+\subsection{Anonymous E-Cash}\label{sec:related-work:e-cash}
+
+Chaum's seminal paper \cite{chaum1983blind} introduced blind signatures and
+demonstrated how to use them for online e-cash.  Later work
+\cite{chaum1989efficient,chaum1990untraceable} introduced offline spending, where additional
+information is encoded into coins in such a way that double spending reveals
+the culprit's identity.
+
+Okamoto \cite{okamoto1995efficient} introduced the first efficient offline
+e-cash scheme with divisibility, a feature that allows a single coin to be
+spent in parts.  With Okamoto's protocol, different spending operations that
+used parts of the same coin were linkable.  An unlinkable version of
+divisible e-cash was first presented by Canard~\cite{canard2007divisible}.
+
+Camenisch's compact e-cash \cite{camenisch2005compact} allows wallets with $2^\ell$ coins to be stored
+and withdrawn with storage, computation and computational costs in $\mathcal{O}(\ell)$.
+Each coin in the wallet, however, still needs to be spent separately.
+
+The protocol that can currently be considered the state-of-the-art for efficient
+offline e-cash was introduced by Pointcheval et al. \cite{pointcheval2017cut}.
+It allows constant-time withdrawal of a divisible coin, and constant-time
+spending of a continuous ``chunk'' of a coin.  While the pre-determined number
+of divisions of a coin is independent from the storage, bandwidth and
+computational complexity of the wallet, the exchange needs to check for
+double-spending at the finest granularity.  Thus, highly divisible coins incur
+large storage and computational costs for the exchange.
+
+An e-cash system with multiple denominations with different financial values
+was proposed by Canard and Gouget~\cite{canard2006handy} in the context of a divisible
+coupon system.
+
+One of the earliest mentions of an explicit change protocol can be found in
+\cite{brickell1995trustee}.  Ian Goldberg's HINDE system is another design that
+allows the merchant to provide change, but the mechanism could be abused to
+hide income from taxation.\footnote{Description based on personal
+communication. HINDE was never published, but supposedly publicly discussed at
+Financial Crypto '98.}  Another online e-cash protocol with change was proposed
+by Tracz \cite{tracz2001fair}.  The use of an anonymous change protocol (called
+a ``refund'' in their context) for fractional payments has also been suggested
+for a public transit fees payment system \cite{rupp2013p4r}.  Change protocols
+for offline e-cash were recently proposed \cite{batten2018offline}.  To the
+best of our knowledge, no change protocol with protections against tax evasion
+has been proposed so far, and all change protocols suggested so far can be
+(ab)used to make a payment into another wallet.
+
+Transferable e-cash allows the transfer of funds between customers without
+using the exchange as in intermediary \cite{fuchsbauer2009transferable}.
+
+Chaum also proposed wallets with observers \cite{chaum1992wallet} as a
+mechanism against double spending.  The observer is a tamper-proof hardware
+security module that prevents double-spending, while at the same time being
+unable to de-anonymize the user.
+
+Various works propose mechanisms to selectively de-anonymize customers or
+transactions that are suspected of criminal activities
+\cite{stadler1995fair,davida1997anonymity}.  Another approach suspends
+customers that were involved in a particular transaction, while keeping the
+customer anonymous \cite{au2011electronic}.
+
+One of the first formal treatments of the provable security of e-cash was given
+in \cite{damgaard2007proof}.  The first complete security definition for blind
+signatures was given by Pointcheval \cite{pointcheval1996provably} and applied
+to RSA signatures later \cite{pointcheval2000security}.  While the security
+proof of RSA signatures requires the random oracle model, many blind signature
+schemes are provably secure in the standard model
+\cite{izabachene2013divisible,pointcheval2017cut}.  While most literature
+provides only ``human-verified'' security arguments, the security of a simple
+e-cash scheme has been successfully modeled in
+ProVerif~\cite{dreier2015formal}, albeit only in the symbolic model.
+
+\subsubsection{Implementations}
+DigiCash was the first commercial implementation of Chaum's e-cash.  It
+ultimately failed to be widely adopted, and the company filed for bankruptcy in
+1998.  Some details of the implementation are available
+\cite{schoenmakers1997security}.  In addition to Chaum's infamously paranoid
+management style \cite{next1999digicash}, reasons for DigiCash's failure could
+have been the following:
+
+\begin{itemize}
+ \item DigiCash did not allow account-less operations.  To use DigiCash,
+   customers had to sign up with a bank that natively supports DigiCash.
+ \item DigiCash did not support change or partial spending, negating a lot of
+   the convenience and security of e-cash by requiring frequent withdrawals
+    from the customer's bank account.
+ \item The technology used by DigiCash was protected by patents,
+   which stifled innovation from competitors.
+ \item Chaum's published design does not clearly limit the financial damage an
+   exchange might suffer from the disclosure of its private online signing key.
+\end{itemize}
+
+To our knowledge, the only publicly available effort to implement anonymous
+e-cash is Opencoin~\cite{dent2008extensions}.  However, Opencoin is neither
+actively developed nor used, and it is not clear to what degree the
+implementation is even complete.  Only a partial description of the Opencoin
+protocol is available to date.
+
+
+\subsubsection{Representing Denominations}\label{design:related-different-denominations}
+
+For GNU Taler, we chose to represent denominations of different values by a
+different public key for every denomination, together with a mapping from
+public key to financial value and auxiliary information about fees and
+expiration dates.  This approach has the advantage that coins of higher denominations
+can be signed by denominations with a larger key size.
+
+Schoenmakers~\cite{schoenmakers1997security} proposes an optimized
+implementation of multiple denomination that specifically works with RSA keys,
+which encodes the denomination in the public exponent $e$ of the RSA public
+key, while the modulus $N$ stays the same for all denominations.  An advantage
+of this scheme is the reduced size of the public keys for a set of
+denominations.  As this encoding is specific to RSA, it would be difficult for
+future versions of this protocol to switch to different blind signature
+primitives.  More importantly, factoring $N$ would lead to a compromise of all
+denominations instead of just one.
+
+Partially blind signatures can be used to represent multiple denominations
+by blindly signing the coin's serial number and including the financial value of the coin
+in the common information seen by both the signer and signee \cite{abe2000provably}.
+
+The compact e-cash scheme of Märtens~\cite{maertens2015practical} allows
+constant-time withdrawal of wallets with an arbitrary number of coins, as long
+as the number of coins is smaller than some system parameter.  This approach
+effectively dispenses with the need to have different denominations.
+
+
+\subsubsection{Comparison}
+
+\newcommand\YES{\ding{51}} % {\checkmark}
+\newcommand\NO{\ding{55}}
+
+\newcommand*\rot{\multicolumn{1}{R{45}{1em}}}% no optional argument here, please!
+%\newcommand*\rot{}% no optional argument here, please!
+
+
+\newcolumntype{H}{>{\setbox0=\hbox\bgroup}c<{\egroup}@{}}
+
+\newcolumntype{R}[2]{%
+    >{\adjustbox{angle=#1,lap=\width-(#2)}\bgroup}%
+    l%
+    <{\egroup}%
+}
+
+{\footnotesize
+\begin{tabular}{r|ccccccccccc}
+&
+\rot{Year} &
+\rot{Implementation} &
+%
+\rot{Offline spending} &
+\rot{Safe aborts/backups} &
+\rot{Key expiration} &
+%
+\rot{Income transparency} &
+%
+% \rot{Withdrawal cost} & \rot{Deposit cost} &
+\rot{No trusted setup} &
+\rot{Storage for wallet} &
+\rot{Storage for exchange} &
+%
+\rot{Change/Divisibility} &
+\rot{Receipts \& Refunds}
+\\ \hline
+Chaum \cite{chaum1983blind}
+& 1983 & P
+&  \NO & \NO & ?
+& ?
+% &  $\log n$ & $\log n$
+&  \YES & $\log n$ & $\log n$
+&  \NO & \NO
+\\
+DigiCash \cite{schoenmakers1997security}
+& 1990 & P
+&  \NO & \YES & \YES
+& \NO
+&  \YES & $\log n$ & $\log n$
+&  \NO & \NO
+\\
+Offline Chaum \cite{chaum1990untraceable}
+& 1990 & ?
+&  \YES & \NO & ?
+& ?
+&  \YES & $\log n$ & $\log n$
+&  \NO & \NO
+\\
+Tracz \cite{tracz2001fair} % HINDE
+& 2001 & E
+&  \NO & \YES & ?
+& \NO
+&  \YES & $\log n$ & $\log n$
+&  Onl. & \NO
+\\
+Compact \cite{camenisch2005compact}
+& 2005 & \NO
+&  \YES & \NO & ?
+&  ?
+&  \YES & $\log n$ & $n$ % We're guessing trustless anonymity because not trusted setup
+& Off. & \NO
+% \\
+% Martens \cite{maertens2015}
+% & 2015 & \NO
+% &  \NO & \NO & %?
+% &  \NO &  S & \NO
+% % &  $\log n$ & $\log n$
+% &  \YES & \NO & W % We're guessing trustless anonymity because not trusted setup
+% & OFF & \NO
+\\
+Divisible \cite{pointcheval2017cut}
+& 2017 & \NO
+&  \YES & \NO & ?
+& ?
+&  \NO & $1$ & $n$
+& Off. & \NO
+\\
+GNU Taler
+& 2017 & FS
+&  \NO & \YES & \YES
+&  \YES
+% &  $\log n$ & $\log n$
+&  \YES & $\log n$ & $\log n$
+&  Onl. & \YES
+\\ \hline
+\end{tabular}
+}
+
+
+\begin{itemize}
+  \item \textbf{Implementation.}
+    Is there an implementation?  Is it proprietary (P), experimental (E), or free software (FS).
+  \item \textbf{Offline Spending}
+    Can spending happen offline with delayed detection of double spenders, or
+    is double spending detected immediately during spending?
+  \item \textbf{Safe abort/backup.}
+    Is anonymity preserved in the presence of interrupted operations
+    or restoration from backups?  Inherently conflicts with offline double
+    spending detection in all approaches that we are aware of.
+    We specify ``\YES'' also for schemes that do not explicitly treat aborts/backup,
+    but would allow a safe implementation when aborts/backups happen.
+  \item \textbf{Key expiration.}
+    We specify ``?'' for schemes that do not explicitly discuss key expiration,
+    but do not fundamentally conflict with the concept.
+  \item \textbf{Income transparency.}
+    We specify ``\YES'' if income transparency is supported, ``\NO'' if some feature of
+    the scheme conflicts with income transparency and ``?'' if it might be possible
+    to add income transparency.
+  \item \textbf{No trusted setup.}
+    In a trusted setup, some parameters and cryptographic keys are generated
+    by a trusted third party.  A compromise of the trusted setup phase can mean loss
+    of anonymity.
+  \item \textbf{Storage for wallet/exchange.}
+    The expected storage for coins adding up to arbitrary value $n$ is specified,
+    with some reasonable upper bound for $n$.
+  \item \textbf{Change/Divisibility.}
+    Can customers pay without possessing exact change?  If so, is it handled
+    by giving change online (Onl.) or by divisible coins that support offline
+    operation (Off.)?
+  \item \textbf{Receipts \& Refunds.}
+    The customer either can prove that they payed for
+    a contract, or they can get their (unlinkable) money back.
+    Also merchants can issue refunds for completed transactions.
+    These operations must not introduce linkability or otherwise
+    compromise the customer's anonymity.
+\end{itemize}
+
+
+\subsection{Blockchains}
+The term ``blockchain'' refers to a wide variety of protocols and systems concerned with
+maintaining a ledger---typically involving financial transactions---in a
+distributed and decentralized manner.\footnote{Even though there is a centralization tendency
+from various sources in practice \cite{walch2019deconstructing}.}
+
+The first and most prominent system that would be categorized as a
+``blockchain'' today\footnote{The paper that introduces Bitcoin does not
+mention the term ``blockchain''} is Bitcoin \cite{nakamoto2008bitcoin},
+published by an individual or group under the alias ``Satoshi Nakamoto''.  The
+document timestamping service described in \cite{haber1990time} could be seen
+as an even earlier blockchain that predates Bitcoin by about 13
+years and is still in use today.
+
+As the name implies, blockchains are made up of a chain of blocks, each block
+containing updates to the ledger and the hash code of its predecessor block. The
+chain terminates in a ``genesis block'' that determines the initial state of
+the ledger.
+
+Some of the most important decisions for the design of blockchains are the following:
+\begin{itemize}
+  \item The \emph{consensus mechanism}, which determines how the participants
+    agree on the current state of the ledger.
+
+    In the simplest possible blockchain, a trusted authority would validate
+    transactions and publish new blocks as the head of the chain.  In order to
+    increase fault tolerance, multiple trusted authorities can use Byzantine
+    consensus to agree on transactions.  With classical Byzantine consensus
+    protocols, this makes the system robust with a malicious minority of up to
+    $1/3$ of nodes.  While fast and appropriate for some applications,
+    classical Byzantine consensus only works with a known set of participants
+    and does not scale well to many nodes.
+
+    Bitcoin instead uses Proof-of-Work (PoW) consensus, where the head of the
+    chain that determines the current ledger state is chosen as the block that
+    provably took the most ``work'' to construct, including the accumulated
+    work of ancestor blocks.  The work consists of finding a hash preimage $n
+    \Vert c$, where $c$ are the contents of the block and $n$ is a nonce, such
+    that the hash $H(n \Vert c)$ ends with a certain number of zeroes (as
+    determined by the difficulty derived from previous blocks).  Under the
+    random oracle, the only way to find such a nonce is by trial-and-error.
+    This nonce proves to a verifier that the creator of the block spent
+    computational resources to construct it, and the correctness is easily
+    verified by computing $H(n \Vert c)$.  The creator of a block is rewarded
+    with a mining reward and transaction fees for transactions within the
+    block.
+
+    PoW consensus is not final:  an adversary with enough computational power
+    can create an alternate chain branching off an earlier block.  Once this
+    alternative, longer chain is published, the state represented by the
+    earlier branch is discarded.  This creates a potential for financial fraud,
+    where an earlier transaction is reversed by publishing an alternate history
+    that does not contain it.  While it was originally believed that PoW
+    consensus process is resistant against attackers that have less than a
+    $51\%$ majority of computational power, closer analysis has shown that a
+    $21\%$ majority sufficies \cite{eyal2018majority}.
+
+    A major advantage of PoW consensus is that the participants need not be
+    known beforehand, and that Sybil attacks are impossible since consensus
+    decisions are only dependent on the available computational power, and not
+    on the number of participants.
+
+    In practice, PoW consensus is rather slow:  Bitcoin can currently support
+    3-7 transactions per second on a global scale.  Some efforts have been made
+    to improve Bitcoin's efficiency \cite{eyal2016bitcoin,vukolic2015quest},
+    but overall PoW consensus needs to balance speed against security.
+
+    Proof-of-Stake (PoS) is a different type of consensus protocol for
+    blockchains, which intends to securely reach consensus without depleting
+    scarce resources such as energy for computation
+    \cite{bentov2016cryptocurrencies,kwon2014tendermint}.  Blocks are created
+    by randomly selected validators, which obtain a reward for serving as a
+    validator.  To avoid Sybil attacks and create economic incentives for good
+    behavior, the probability to get selected as a validator is proportional to
+    one's wealth on the respective blockchain.  Realizing PoS has some
+    practical challenges with respect to economic incentives: As blocks do not
+    take work to create, validators can potentially benefit from creating
+    forks, instead of validating on just one chain.
+
+    Algorand \cite{gilad2017algorand} avoids some of the problems with PoW
+    consensus by combining some of the ideas of PoW with classical Byzantine
+    consensus protocols.  Their proposed system does not have any incentives
+    for validators.
+
+    Avalance \cite{rocket2018snowflake} has been proposed as a scalable
+    Byzantine Consensus algorithm for use with blockchains.  It is based on a
+    gossip protocol and is only shown to work in the synchronous model.
+
+  \item Membership and visibility.  Blockchains such as Bitcoin or Ethereum with
+    public membership and public visibility are called \emph{permissionless blockchains}.
+    Opposed to that, \emph{permissioned} blockchains have been proposed for usage in
+    banking, health and asset tracking applications \cite{androulaki2018hyperledger}.
+
+  \item Monetary policy and wealth accumulation.
+    Blockchains that are used as cryptocurrencies come with their own monetary
+    policy.  In the case of Bitcoin, the currency supply is limited, and due to
+    difficulty increase in mining the currency is deflationary.  Other
+    cryptocurrencies such as duniter\footnote{See
+    \url{https://duniter.org/}.} have been proposed with built-in rules for
+    inflation, and a basic income mechanism for participants.
+
+  \item Expressivity of transactions.  Transactions in Bitcoin are small programs
+    in a stack-based programming language that are guaranteed to terminate.
+    Ethereum \cite{wood2014ethereum} takes this idea further and allows smart contracts with
+    Turing-complete computation and access to external oracles.
+
+  \item Governance.  Blockchain governance \cite{reijers2016governance,levy2017book} is a
+    topic that received relatively little attention so far.  As blockchains
+    interact with existing legal and social systems across national borders,
+    different sources of ``truth'' must be reconciled.
+
+    Furthermore, consensus is not just internal to the operation of
+    blockchains, but also external in the development of the technology.
+    Currently small groups of developers create the rules for the operation of
+    blockchains, and likewise have the power to change them.  There is
+    currently very little research on social and technological processes to
+    find a ``meta-consensus'' on the rules that govern such systems, and how
+    these rules can be adapted and changed in a consensus process.
+
+  \item Anonymity and Zero-Knowledge Proofs.  Bitcoin transactions are only
+    pseudoymous, the full transaction history is publicly available and leads
+    to reduced anonymity in practice \cite{reid2013analysis}.  Tumblers
+    \cite{bonneau2014mixcoin,heilman2017tumblebit} are an approach to increase
+    the anonymity in Bitcoin-style cryptocurrencies by creating additional
+    transactions to cover up the real owner and sources of funds.  While newer tumblers
+    such as TumbleBit \cite{heilman2017tumblebit} provide rather strong security guarantees,
+    mixing incurs transaction costs.
+
+    Some cryptocurrencies have direct support for anonymous transactions
+    \cite{sun2017ringct}.  ZeroCash \cite{bensasson2014zerocash} uses
+    zero-knowledge proofs to hide the sender, receiver and amount of a
+    transaction.  While ZeroCash currently relies on a trusted setup for
+    unforgeability of its currency, more recent proposals dispense with that
+    requirement \cite{ben2018scalable,wahby2018doubly}.  As the anonymity
+    provided by ZeroCash facilitates tax evasion and use in other crimes, an
+    additional, optional layer for privacy-preserving policy for taxation,
+    spending limits and identity escrow has been proposed
+    \cite{garman2016accountable}.
+\end{itemize}
+
+Practical guidance on what kind of blockchain is appropriate for an
+application, and if a blockchain is required in the first place, can be found
+in \cite{wust2017you}.
+
+
+\subsection{Approaches to Micropayments}
+Micropayments refer to payments of very small value. Microtransactions would
+not be feasible in traditional payment systems due to high transaction costs,
+which might even exceed that value that is to be transferred.
+
+\subsubsection{Peppercoin}
+
+Peppercoin~\cite{rivest2004peppercoin} is a microdonation protocol.
+The main idea of the protocol is to reduce transaction costs by
+minimizing the number of transactions that are processed directly by
+the exchange.  Instead of always paying, the customer ``gambles'' with the
+merchant for each microdonation.  Only if the merchant wins, the
+microdonation is upgraded to a macropayment to be deposited at the
+exchange.  Peppercoin does not provide customer-anonymity.  The proposed
+statistical method by which exchanges detect fraudulent cooperation between
+customers and merchants at the expense of the exchange not only creates
+legal risks for the exchange, but would also require that the exchange learns
+about microdonations where the merchant did not get upgraded to a
+macropayment.  It is therefore unclear how Peppercoin would actually
+reduce the computational burden on the exchange.
+
+\subsubsection{Tick Payments}
+% FIXME:  also works off-line
+Tick payments were proposed by Pedersen \cite{pedersen1996electronic} as a
+general technique to amortize the cost for small, recurring payments to the
+same payee.  The payer first makes an up-front deposit as one larger payment
+that involves the payment processor.  To make a micropayment, the payer sends a
+message to the payee that authorizes the payee to claim a fraction of this
+deposit.  Each further micropayment simply increases the fraction of the
+deposit that can be claimed, and only requires communication between payer and
+payee.  The payee only needs to show the last message received from the payer
+to the payment processor in order to receive the accumulated amounts received
+through tick payments.
+
+\subsubsection{Payment Channels and Lightning Network}
+The Lightning Network \cite{poon2016bitcoin} is a proposed payment system that
+is meant to run on top of Bitcoin and enable faster, cheaper
+(micro-)transactions.  It is based on establishing \emph{payment channels}
+between Bitcoin nodes.  A payment channel is essentially a tick payment where
+the deposit and settlement happens on a blockchain.  The goal of the
+Lightning network is to route a payment between two arbitrary nodes by finding a
+path that connects the two routes through payment channels.  The protocol is
+designed in such a way that a node on the path between the initial sender and
+final receiver can only receive a payment on a payment channel if it correctly
+forwards it to the next node.
+
+Experimental deployments of the Lightning network recently suffered heavily
+from denial-of-service attacks. % FIXME: citation needed!
+
+BOLT \cite{green2016bolt} is an anonymous payment channel for ZeroCash, and is
+intended to be used as a building block for a second-layer payment protocol
+like the Lightning Network.
+
+\subsubsection{Side-chains}
+% FIXME:  what about polkadot?
+Side-chains are an alternative approach to improve the scalability of
+blockchains, intended to be useful in conjunction with arbitrary smart
+contracts.  The approach currently developed by the Ethereum project is
+described in the Plasma white paper \cite{poon2017plasma}.  Side-chains are
+separate blockchains, possibly with different rules and even consensus
+protocols than the main chain.  Side-chains operate in parallel to the main
+Ethereum chain, and regularly publish ``pointers'' to the current head of the
+sidechain on the main chain.  Funds can be moved from the main chain to the
+side-chain, and subsequently be moved off the side-chain by performing an
+``exit'', during which the main chain verifies claims to funds on the
+side-chain according to the side-chain's rules.
+
+At the time of writing, Plasma is not yet implemented.  Potential problems with
+Plasma include the high costs of exits, lack of access to data needed to verify
+exit claims, and associated potential for denial-of-service attacks.
+
+
+%\subsection{Other Payment Systems}
+
+%\subsubsection{Credit Card Payments}
+
+\subsection{Walled Garden Payment Systems}
+
+Walled garden payment systems offer ease of use by processing payments using a
+trusted payment service provider. Here, the customer authenticates to the
+trusted service, and instructs the payment provider to execute a transaction on
+their behalf.  In these payment systems, the provider basically acts like a
+bank with accounts carrying balances for the various users.  In contrast to
+traditional banking systems, both customers and merchants are forced to have an
+account with the same provider.  Each user must take the effort to establish
+his identity with a service provider to create an account.  Merchants and
+customers obtain the best interoperability in return for their account creation
+efforts if they start with the biggest providers.  As a result, there are a few
+dominating walled garden providers, with AliPay, ApplePay, GooglePay,
+SamsungPay and PayPal being the current oligopoly.
+%In this paper, we
+%will use PayPal as a representative example for our discussion of these payment
+%systems.
+
+As with card payment systems, these oligopolies are politically
+dangerous~\cite{crinkey2011rundle}, and the lack of competition
+can result in excessive profit taking that may require political
+solutions~\cite{guardian2015cap} to the resulting market
+  failure.  The use of non-standard proprietary interfaces to
+the payment processing service of these providers serves to reinforce
+the customer lock-in.
+
+%TODO: discuss popularity/abundance of digital wallets in other countries (India!)
+%and different requirements (connectivity)
+
+%\subsubsection{Ripple}
+
+\subsection{Web Integration}
+
+Finally, we will discuss software solutions to web payments.  We
+consider other types of payments, including general payments and in
+particular hardware solutions as out of scope for this thesis.
+
+\subsubsection{Web Payments API}
+The Web Payments API\footnote{See \url{https://www.w3.org/TR/payment-request/}}
+is a JavaScript API offered by browsers, and currently still under development.
+It allows merchant to offer a uniform checkout experience across different
+payment systems.  Unlike GNU Taler, the Web Payments API is only concerned with
+aspects of the checkout process, such as display of a payment request,
+selection of a shipping address and selection of a payment method.
+
+Currently only basic-card is supported across popular browsers.
+
+The Payment Handler API\footnote{See
+\url{https://www.w3.org/TR/payment-handler/}} supports the registration of
+user-defined payment method handlers.  Unfortunately the only way to add
+payment method handlers is via an HTTPS URL.  This leaks all information to the
+payment service provider and precludes the implementation of privacy-preserving
+payment system handlers.
+
+In order to integrate Taler as a payment method, browsers would need to either
+offer Taler as a native, built-in payment method or allow an extension to
+register web payment handlers.
+
+
+The Web Payments Working Group discontinued work on a HTTP-based API for
+machine-to-machine payments.\footnote{See
+\url{https://www.w3.org/TR/webpayments-http-api/}.}
+
+\subsubsection{Payment Pointers}
+Payment pointers are a proposed standard syntax for accounts that are able to
+receive payments.  Unlike \texttt{payto://} URIs ( discussed in
+Section~\ref{implementation:wire-method-identifiers}), payment pointers do not
+follow the generic URI syntax and only specify a \emph{pointer} to the
+receiver's bank account in form of a HTTPS URI.  Payment pointers do not
+specify any mechanism for the payment, but instead direct the user's browser to
+a website to carry out the payment.
+
+\subsubsection{3-D Secure}
+3-D Secure is a complex and widely deployed protocol that is intended to add an
+additional security layer on top of credit and debit card transactions.
+
+The 3-D Secure protocol requires the use of inline frames on the HTML page of
+the merchant for extended verification/authentication of the user.  This makes
+it hard or sometimes -- such as when using a mobile browser -- even impossible
+to tell whether the inline frame is legitimate or an attempt to steal
+information from the user.
+
+Traditionally, merchants bear most of the financial risk, and a key
+``feature'' of the 3DS process compared to traditional card payments
+is to shift dispute {\em liability} to the issuer of the card---who
+may then try to shift it to the customer \cite[\S2.4]{3DSsucks}.
+%
+% online vs offline vs swipe vs chip vs NFC ???
+% extended verification
+%
+Even in cases where the issuer or the merchant remain legally first in
+line for liabilities, there are still risks customers incur from the
+card dispute procedures, such as neither them nor the payment
+processor noticing fraudulent transactions, or them noticing
+fraudulent transactions past the {\em deadline} until which their bank
+would reimburse them.  The customer also typically only has a
+merchant-generated comment and the amount paid in their credit card
+statement as a proof for the transaction.  Thus, the use of credit
+cards online does not generate any cryptographically {\em verifiable}
+electronic receipts for the customer, which theoretically enables
+malicious merchants to later change the terms of the contract.
+
+Beyond these primary issues, customers face secondary risks of
+identity theft from the personal details exposed by the authentication
+procedures. In this case, even if the financial damages are ultimately
+covered by the bank, the customer always has to deal with the procedure
+of {\em notifying} the bank in the first place.  As a result,
+customers must remain wary about using their cards, which limits their
+online shopping~\cite[p. 50]{ibi2014}.
+
+\subsubsection{Other Proprietary Payment APIs}
+The Electronic Payment Standard URI scheme \texttt{epspayment:} is a
+proprietary/unregistered URI scheme used by predominantly Austrian banks and
+merchants to trigger payments from within websites on mobile devices.
+Merchants can register an invoice with a central server.  The user's banking
+app is associated with the \texttt{epspayment} URI scheme and will open to
+settle the invoice.  It lies conceptually between \texttt{payto://} and
+\texttt{taler:pay} (see Section~\ref{sec:loose-browser-integration}).  A
+technical problem of \texttt{epspayment} is that when a user has multiple bank
+accounts at different banks that support \texttt{epspayment}, some platforms
+decide non-deterministically and without asking the user which application to
+launch.  Thus, a user with two banking applications on their phone can often not
+chose which bank account is used for the payment.  If \texttt{payto} were
+widely supported, the problem of registering/choosing bank accounts for payment
+methods could be centrally addressed by the browser / operating system.
+
+PayPal is a very popular, completely proprietary payment system provider.  Its offer-based
+API is similar in the level of abstraction to Taler's reference merchant backend API.
+
+LaterPay is a proprietary payment system for online content as well as
+donations.  It offers similar functionality to session-bound payments in Taler.
+LaterPay does not provide any anonymity.
+
+
+% FIXME: mention these
+% Stripe
+% paydirekt
+% mention this somewhere: https://www.focus.de/finanzen/banken/paydirekt-so-reagieren-kunden-auf-die-sparkassen-plaene_id_7511393.html
+% but not in this section.  good argument for anonymity
-- 
cgit v1.2.3

