1642 lines
74 KiB
TeX
1642 lines
74 KiB
TeX
\documentclass{llncs}
|
|
|
|
%\documentclass[twoside,letterpaper]{IEEEtran}
|
|
\usepackage[margin=1in]{geometry}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{url}
|
|
\usepackage{tikz}
|
|
\usepackage{eurosym}
|
|
\usepackage{listings}
|
|
\usepackage{graphicx}
|
|
%\usepackage{wrapfig}
|
|
\usepackage[caption=false,font=normalsize,labelfont=sf,textfont=sf]{subfig}
|
|
\usepackage{wrapfig}
|
|
\usepackage{url}
|
|
%\usepackage{stfloats}
|
|
|
|
\usetikzlibrary{shapes,arrows}
|
|
\usetikzlibrary{positioning}
|
|
\usetikzlibrary{calc}
|
|
|
|
% CSS
|
|
\lstdefinelanguage{CSS}{
|
|
keywords={color,background-image:,margin,padding,font,weight,display,position,top,left,right,bottom,list,style,border,size,white,space,min,width, transition:, transform:, transition-property, transition-duration, transition-timing-function},
|
|
sensitive=true,
|
|
morecomment=[l]{//},
|
|
morecomment=[s]{/*}{*/},
|
|
morestring=[b]',
|
|
morestring=[b]",
|
|
alsoletter={:},
|
|
alsodigit={-}
|
|
}
|
|
|
|
% JavaScript
|
|
\lstdefinelanguage{JavaScript}{
|
|
morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
|
|
morecomment=[s]{/*}{*/},
|
|
morecomment=[l]//,
|
|
morestring=[b]",
|
|
morestring=[b]'
|
|
}
|
|
|
|
\lstdefinelanguage{HTML5}{
|
|
language=html,
|
|
sensitive=true,
|
|
alsoletter={<>=-},
|
|
morecomment=[s]{<!-}{-->},
|
|
tag=[s],
|
|
otherkeywords={
|
|
% General
|
|
>,
|
|
% Standard tags
|
|
<!DOCTYPE,
|
|
</html, <html, <head, <title, </title, <style, </style, <link, </head, <meta, />,
|
|
% body
|
|
</body, <body,
|
|
% Divs
|
|
</div, <div, </div>,
|
|
% Paragraphs
|
|
</p, <p, </p>,
|
|
% scripts
|
|
</script, <script,
|
|
% More tags...
|
|
<canvas, /canvas>, <svg, <rect, <animateTransform, </rect>, </svg>, <video, <source, <iframe, </iframe>, </video>, <image, </image>
|
|
},
|
|
ndkeywords={
|
|
% General
|
|
=,
|
|
% HTML attributes
|
|
charset=, src=, id=, width=, height=, style=, type=, rel=, href=,
|
|
% SVG attributes
|
|
fill=, attributeName=, begin=, dur=, from=, to=, poster=, controls=, x=, y=, repeatCount=, xlink:href=,
|
|
% CSS properties
|
|
margin:, padding:, background-image:, border:, top:, left:, position:, width:, height:,
|
|
% CSS3 properties
|
|
transform:, -moz-transform:, -webkit-transform:,
|
|
animation:, -webkit-animation:,
|
|
transition:, transition-duration:, transition-property:, transition-timing-function:,
|
|
}
|
|
}
|
|
|
|
\date{}
|
|
\begin{document}
|
|
\title{Enabling Secure Web Payments with GNU Taler}
|
|
|
|
|
|
% Not sure how to do authors with the
|
|
% IEEEtran template correctly ...
|
|
\author{Jeffrey Burdges \and
|
|
Florian Dold \and
|
|
Christian Grothoff \and
|
|
Marcello Stanisci}
|
|
\institute{Inria Rennes - Bretagne Atlantique \\
|
|
\email{FIRSTNAME.LASTNAME@inria.fr}
|
|
}
|
|
|
|
\maketitle
|
|
|
|
|
|
|
|
|
|
\begin{abstract}
|
|
GNU Taler is a new electronic online payment system which provides
|
|
privacy for customers and accountability for merchants. It uses an
|
|
exchange service to issue digital coins using blind signatures,
|
|
and is thus not subject to the performance issues that plague
|
|
Byzantine fault-tolerant consensus-based solutions.
|
|
|
|
The focus of this paper is addressing the challenges payment systems
|
|
face in the context of the Web. We discuss how to address
|
|
Web-specific challenges, such as handling bookmarks and sharing of
|
|
links, as well as supporting users that have disabled JavaScript. Web
|
|
payment systems must also navigate various constraints imposed by
|
|
modern Web browser security architecture, such as same-origin policies
|
|
and the separation between browser extensions and Web pages. While
|
|
our analysis focuses on how Taler operates within the security
|
|
infrastructure provided by the modern Web, the results partially
|
|
generalize to other payment systems.
|
|
|
|
We also include the perspective of merchants, as existing systems have
|
|
often struggled with securing payment information at the merchant's
|
|
side. Here, challenges include avoiding database transactions for
|
|
customers that do not actually go through with the purchase, as well
|
|
as cleanly separating security-critical functions of the payment
|
|
system from the rest of the Web service.
|
|
\end{abstract}
|
|
|
|
\section{Introduction}
|
|
|
|
The Internet needs a secure, usable and privacy-preserving
|
|
micropayment system, which is not backed by a ``crypto currency''.
|
|
Payment systems involving state-issued currencies have been used for
|
|
centuries to facilitate transactions, and the involvement of the state
|
|
has been critical as state institutions can dampen fluctuations in the
|
|
value of the currency~\cite{dominguez1993}. Controlling money supply
|
|
is critical to ensure stable prices that facilitate
|
|
trade~\cite{quantitytheory1997volckart} instead of speculation~\cite{lewis_btc_is_junk}.
|
|
|
|
Internet transactions, such as sending an e-mail or reading a Web
|
|
site, tend to be of smaller commercial value than traditional
|
|
transactions involving the exchange of physical goods. Consequently,
|
|
if we want to associate payments with these types of transactions, we
|
|
face the challenge of reducing the mental and technical overheads of
|
|
existing payment systems. For example, executing a 3-D Secure~\cite{3DSsucks} payment
|
|
process (Figure~\ref{fig:cc3ds}) takes too long, is way too complex,
|
|
and way too expensive to be used for payment for typical Web articles.
|
|
|
|
Addressing this problem is urgent: ad-blocking technology is eroding
|
|
advertising as a substitute for micropayments~\cite{adblockblocks},
|
|
and the Big Data business model in which citizens pay with their
|
|
private information~\cite{ehrenberg2014data} in combination with the
|
|
deep state hastens our society's regression towards
|
|
post-democracy~\cite{rms2013democracy}.
|
|
|
|
|
|
The focus of this paper is GNU Taler, a new free software payment
|
|
system designed to meet certain key ethical considerations from a
|
|
social liberalism perspective. In Taler, the paying customer remains
|
|
anonymous while the merchant is easily identified and thus taxable.
|
|
Here, {\em anonymous} simply means that the payment process does not require
|
|
any personal information from the customer, and that different
|
|
transactions by the same customer are unlinkable. Naturally, the
|
|
specifics of the transaction---such as delivery of goods to a shipping
|
|
address, or the use of non-anonymous IP-based communication---may
|
|
still leak information about the customer's identity. {\em Taxable}
|
|
means that for any transaction the state can easily obtain the
|
|
necessary information about the identity of the merchant and the
|
|
respective contract in order to levy income, sales, or value-added
|
|
taxes. Taler uses blind signatures~\cite{chaum1983blind} to create
|
|
digital coins and a new {\em refresh} protocol~\cite{talercrypto} to
|
|
allow giving change and refunds while maintaining unlinkability.
|
|
|
|
This paper will not consider the details of Taler's cryptographic
|
|
protocols.\footnote{Details of the protocol are documented at
|
|
\url{https://api.taler.net/}} The basic cryptography behind
|
|
blind-signature based payment systems has been known for over 25
|
|
years~\cite{chaum1990untraceable}. However, it was not until 2015 that the W3C
|
|
started the payments working group~\cite{w3cpig} to explore requirements
|
|
for deploying payment systems that are more secure and easy to use for
|
|
the Web. Our work describes how a modern payment system using blind
|
|
signatures could practically be integrated with the modern Web to
|
|
improve usability, security, and privacy. This includes the challenge
|
|
of hiding the cryptography from the users, integrating with modern
|
|
browsers, integrating with Web shops, providing proper cryptographic
|
|
proofs for all operations, and handling network failures. We explain
|
|
our design using terms from existing {\em mental models} that users have
|
|
from widespread payment systems.
|
|
|
|
%\newpage
|
|
Key contributions of this paper are:
|
|
\begin{itemize}
|
|
\item A description of different payment systems using
|
|
common terminology, which allows us to analytically compare
|
|
these systems.
|
|
\item An introduction to the Taler payment system from the
|
|
perspective of users and merchants, with a focus on how
|
|
to achieve secure payments in a way that is intuitive and
|
|
has adequate fail-safes.
|
|
\item Detailed considerations for how to adapt Taler to
|
|
Web payments and the intricacies of securing payments
|
|
within the constraints of modern browsers.
|
|
\item A publicly available free software
|
|
reference implementation of the presented architecture.
|
|
\end{itemize}
|
|
|
|
|
|
\section{Existing payment workflows}
|
|
|
|
Before we look at the payment workflow for Taler, we sketch the
|
|
workflow of existing payment systems. This establishes a common
|
|
terminology which we will use to compare different payment processes.
|
|
We include interaction diagrams for some of the payment systems
|
|
based on resources from the W3C payment interest group.
|
|
|
|
\subsection{Cash}
|
|
|
|
Cash has traditionally circulated by being passed directly from buyers
|
|
to sellers with each seller then becoming a buyer. Thus, cash is
|
|
inherently a {\em peer-to-peer} payment system, as participants all
|
|
appear in both buyer and seller roles, just at different times.
|
|
However, this view is both simplified and
|
|
somewhat dated.
|
|
|
|
In today's practice, cash is frequently first {\em withdrawn} from
|
|
ATMs by customers who then {\em spend} it with merchants, who, in turn,
|
|
{\em deposit} the cash with their respective {\em bank}. In this
|
|
flow, security is achieved as the customer {\em authenticates} to the
|
|
ATM using {\em credentials} provided by the customer's bank, and the
|
|
merchant specifies his {\em account} details when depositing the cash.
|
|
The customer does not authenticate when spending the cash, but the
|
|
merchant {\em validates} the authenticity of the {\em coins} or bills.
|
|
Coins and bills are {\em minted} by state-licensed institutions, such
|
|
as the US Mint. These institutions also provide detailed instructions
|
|
for how to validate the authenticity of the coins or
|
|
bills~\cite{ezb2016ourmoney}, and are typically the final trusted
|
|
authority on the authenticity of coins and bills.
|
|
|
|
As customers need not authenticate, purchases remain {\em
|
|
anonymous}, modulo the limited tracking enabled in theory
|
|
by serial numbers printed on bills~\cite{pets2004kuegler},
|
|
which make each bill {\em unique}.
|
|
% NOTE : Internet claims this does not happen, but no references.
|
|
% https://rocketatm.com/notice-_recorded_serial_numbers_atm_decal
|
|
|
|
Spending cash does not provide any inherent {\em proof of purchase}
|
|
for the customer. Instead, the merchant provides paper
|
|
{\em receipts}, which are generated independently and do not receive
|
|
the same anti-forgery protections that are in place for cash.
|
|
|
|
Against most attacks, customers and merchants {\em limit} their risk
|
|
to the amount of cash that they carry or accept at a given
|
|
time~\cite{Bankrate}. Additionally, customers are advised to choose
|
|
the ATMs they use carefully, as malicious ATMs may attempt to
|
|
{\em steal} their customer's credentials~\cite{ECB:TRoCF2014}. Authentication with an
|
|
ATM can involve a special ATM card, or the use of credit or
|
|
debit cards. In all these cases, these physical security tokens are
|
|
issued by the customer's bank.
|
|
|
|
|
|
% \smallskip
|
|
\subsection{Credit and debit cards}
|
|
|
|
\begin{figure*}[h!]
|
|
\begin{center}
|
|
\includegraphics[width=0.95\textwidth]{figs/cc3ds.pdf}
|
|
\end{center}
|
|
\caption{Card payment processing with 3-D Secure (3DS). (From: W3C Web Payments WG \cite{w3cpig})}
|
|
\label{fig:cc3ds}
|
|
\end{figure*}
|
|
%KG: I hope they can print this larger, because this is WAY too small to be of any use.
|
|
|
|
Credit and debit card payments operate by the customer providing their
|
|
credentials to the merchant. Many different authentication and
|
|
authorization schemes are in use in various combinations. Secure
|
|
systems typically combine multiple forms of authentication including
|
|
secret information, such as personal identification numbers (PINs),
|
|
transaction numbers (TANs)~\cite{kobil2016tan} or credit card
|
|
verification (CCV) codes, and physical security devices such cards
|
|
with an EMV chip~\cite{emv}, TAN generators, or the customer's mobile
|
|
phone~\cite{mtan}. A typical modern Web payment process involves:
|
|
{(1.)} the merchant offering a secure communication channel using TLS
|
|
based on the X.509 public key infrastructure;\footnote{Given numerous
|
|
TLS protocol and implementation flaws as well as X.509 key
|
|
management incidents in recent years~\cite{holz2014}, one cannot
|
|
generally assume that the security provided by TLS is adequate under
|
|
all circumstances.} {(2.)} selecting a {\em payment method}; {(3.)}
|
|
entering the credit card details like the owner's name, card number,
|
|
expiration time, CCV code, and billing address; and {(4.)}
|
|
(optionally) authorizing the transaction via mobile TAN, or by
|
|
authenticating against the customer's bank. Due to the complexity
|
|
of this, the data entry is often performed on a Web site that
|
|
is operated by a third-party payment processor and {\em not} the merchant or
|
|
the customer's bank. Figure~\ref{fig:cc3ds} shows a typical card-based payment
|
|
process on the Web using the UML style of the W3C payment interest
|
|
group~\cite{w3cpig}. Most of the details are not relevant to this
|
|
paper, but the diagram nicely illustrates the complexity of the common
|
|
3-D secure process.
|
|
%KG: Define 3DS the FIRST time you use it.
|
|
|
|
Given this process, there is an inherent risk of information leakage
|
|
of customers' credentials. {\em Fraud detection} systems attempt to detect
|
|
misuse of stolen credentials, and payment system providers handle
|
|
disputes between customers and merchants. As a result, Web payment
|
|
processes may finish with {(5.)} the payment being rejected for a
|
|
variety of reasons, such as false positives in fraud detection or
|
|
the merchant not accepting the particular card issuer.
|
|
|
|
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 his 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}.
|
|
% There is nevertheless a trend towards customers preferring cards
|
|
% over cash even in face-to-face purchases \cite{} in part because
|
|
% cash theft can be violent even if the amounts as stake are smaller
|
|
% than with electronic theft.
|
|
%
|
|
%Merchants are exposed to these same risks because either laws and/or
|
|
%contracts with the payment system providers require them to take care
|
|
%in handling customer information.
|
|
% 40 million stolen at target. fine?
|
|
|
|
%In cash payments, these risks do not exist because customers have
|
|
%complete control over the authentication procedure with their bank
|
|
%and the merchant is not involved.
|
|
|
|
% pressure to shop with big merchants
|
|
% merchants keep payment credentials on file
|
|
% Just a few merchants like Apple demand credentials up front
|
|
% "this reversal of authentication vs shopping slows shopping"
|
|
|
|
% \smallskip
|
|
\subsection{Bitcoin}
|
|
|
|
\begin{figure*}[b!]
|
|
\includegraphics[width=\textwidth]{figs/bitcoin.pdf}
|
|
\caption{Bitcoin payment processing. (From: W3C Web Payments WG \cite{w3cpig})}
|
|
\label{fig:bitcoin}
|
|
\end{figure*}
|
|
|
|
Bitcoin operates by recording all transactions in a pseu\-do\-ny\-mous
|
|
public {\em ledger}. A Bitcoin account is identified by its public
|
|
key, and the owner must know the corresponding private key to
|
|
authorize the transfer of Bitcoins from the account to other accounts.
|
|
The information in the global public ledger allows everybody to
|
|
compute the balances in all accounts and to see all transactions.
|
|
Transactions are denominated in a new currency labeled BTC, whose
|
|
valuation depends upon {\em speculation}, as there is no authority
|
|
that could act to stabilize exchange rates or force anyone to
|
|
accept BTC as {\em legal tender} to settle obligations. Adding transactions to
|
|
the global public ledger involves broadcasting the transaction data,
|
|
peers verifying and appending it to the public ledger, and some peer
|
|
in the network solving a moderately hard computational proof-of-work
|
|
puzzle, which is called {\em mining}.
|
|
|
|
The mining process is incentivised by a combination of transaction
|
|
fees and mining rewards~\cite{nakamoto2008bitcoin}. The latter
|
|
process also provides primitive accumulation~\cite{primitiveacc} for BTC.
|
|
Conversion to BTC from other currencies and vice versa incurs
|
|
substantial fees~\cite{BTCfees}. There is now an extreme diversity of
|
|
Bitcoin-related payment technologies, but usability improvements are
|
|
usually achieved by adding a trusted third party, and there have been
|
|
many incidents where such parties then embezzled funds from their
|
|
customers~\cite{BTC:demise}.
|
|
|
|
The classical Bitcoin payment workflow consisted of entering payment
|
|
details into a peer-to-peer application. The user would access their
|
|
Bitcoin {\em wallet} and instruct it to transfer a particular amount
|
|
from one of his accounts to the account of the merchant. He could
|
|
possibly include additional metadata to be associated with the
|
|
transfer to be embedded into the global public ledger. The wallet
|
|
application would then transmit the request to the Bitcoin
|
|
peer-to-peer overlay network. The use of an external payment
|
|
application makes payments significantly less
|
|
browser-friendly than ordinary card payments, as illustrated in
|
|
Figure~\ref{fig:bitcoin}. This has led to the development of
|
|
browser-based
|
|
wallets.\footnote{\url{https://github.com/frozeman/bitcoin-browser-wallet}}
|
|
|
|
Bitcoin payments are only confirmed when they appear in the public
|
|
ledger, which is updated at an average frequency of once every 10
|
|
minutes. Even then, it is possible that a fork in the so-called block
|
|
chain may void durability of the transaction; as a result, it is
|
|
recommended to wait for 6 blocks (on average one hour) before
|
|
considering a transaction committed~\cite{nakamoto2008bitcoin}. In
|
|
cases where merchants are unable to accommodate this delay, they incur
|
|
significant fraud risks.
|
|
|
|
Bitcoin is considered to be secure against an adversary who cannot
|
|
control around a fifth of the Bitcoin miner's computational
|
|
resources~\cite{BTC:Bahack13,BTC:MajorityNotEnough,BTC:Eclipse}. % 21percent?
|
|
As a result, the network must expend considerable computational
|
|
resources to keep this value high.
|
|
According to~\cite{vice_btc_unsustainable}, a single Bitcoin transaction uses roughly enough
|
|
electricity to power 1.57 American households for a day.
|
|
These costs are largely hidden by speculation in BTC,
|
|
but that speculation itself contributes to BTC's valuation being
|
|
volatile.~\cite{jeffries_economists_v_btc,lehmann_btc_fools_gold,lewis_btc_is_junk}. % exacerbating risk
|
|
|
|
% fees hit you 2-3 times with currency conversions
|
|
% more on massive transaction fees from blockchain.info
|
|
|
|
Bitcoin's pseudononymity applies equally to both customers and
|
|
merchants, which makes Bitcoin amen\-able to tax evasion, money
|
|
laundering, sales of contraband, and especially extorion
|
|
\cite{NYA:CyberExtortionRisk}.
|
|
As a result, anonymity tools like mixnets do not enjoy widespread
|
|
support in the Bitcoin community where many participants seek to make
|
|
the currency appear more legitimate. While Bitcoin's transactions
|
|
are difficult to track, there are several examples of Bitcoin's
|
|
pseudononymity being broken by investigators~\cite{BTC:Anonymity}.
|
|
This has resulted in the development of new protocols with better
|
|
privacy protections.
|
|
|
|
\begin{figure*}[t!]
|
|
\includegraphics[width=\textwidth]{figs/paypal.pdf}
|
|
\caption{Payment processing with PayPal. (From: W3C Web Payments IG.)}
|
|
\label{fig:paypal}
|
|
\end{figure*}
|
|
|
|
Zerocoin \cite{miers2013zerocoin} is such an extension of Bitcoin:
|
|
It affords protection against linkability of transactions,
|
|
but at non-trivial additional computational costs even for
|
|
spending coins. This currently makes using Zerocoin unattractive
|
|
for payments, especially with mobile devices.
|
|
|
|
Bitcoin also faces serious scalability limitations, with the classic
|
|
implementation being limited to at most 7 transactions per second
|
|
globally on
|
|
average.\footnote{\url{http://hackingdistributed.com/2016/08/04/byzcoin/}}
|
|
There are a variety of efforts to confront Bitcoin's scaling problems
|
|
with off-blockchain techniques, like side-chains. % \cite{???}
|
|
Amongst these, the blind off-chain lightweight transactions (BOLT)
|
|
proposal~\cite{BOLT} provides anonymity by routing off-blockchain
|
|
transfers through bank-like intermediaries. Although interesting,
|
|
there are numerous seemingly fragile aspects of the BOLT protocol,
|
|
including aborts deanonymizing customers, intermediaries risking
|
|
unlimited losses, and theft if a party fails to post a refute message
|
|
in a timely fashion.
|
|
% Of course, Taler itself could be used to provide a side-chain like technology
|
|
% Assuming these issues can be addressed,
|
|
% % and the relatively advanced crypto involved became production ready,
|
|
% Taler might prove a better platform for deploying a BOLT-like scheme
|
|
% than Zerocoin.
|
|
|
|
|
|
% In addition, the Bitcoin protocol does not interact well with
|
|
% conventional anonymity networks like Tor \cite{BTC:vsTor}
|
|
% dark pools?
|
|
|
|
% outdated ideas :
|
|
% mining suck0rs,
|
|
% DDoS : wired article?
|
|
% economic ideology
|
|
|
|
\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 his behalf
|
|
(see Figure~\ref{fig:paypal}). 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 {\em 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 {\em competition}
|
|
can result in excessive profit taking that may require political
|
|
solutions~\cite{guardian2015cap} to the resulting {\em market
|
|
failure}. The use of non-standard {\em proprietary} interfaces to
|
|
the payment processing service of these providers serves to reinforce
|
|
the customer {\em lock-in}.
|
|
|
|
|
|
\section{Taler}
|
|
|
|
Taler is a free software cryptographic payment system. It has an open
|
|
protocol specification, which couples cash-like anonymity for customers
|
|
with low transaction costs, signed digital
|
|
receipts, and accurate income information to facilitate taxation and
|
|
anti-corruption efforts.
|
|
|
|
% FIXME: maybe say what blind signature are
|
|
Taler achieves anonymity for buyers using {\em blind
|
|
signatures}~\cite{chaum1983blind}. Since their discovery thirty years
|
|
ago, cryptographers have viewed blind signatures as the optimal
|
|
cryptographic primitive for privacy-preserving consumer-level transaction systems.
|
|
However, previous transaction systems based on blind signatures have
|
|
failed to see widespread adoption. This paper details strategies for
|
|
hiding the complexity of the cryptography from users and integrating smoothly with the
|
|
Web, thereby providing crucial steps to bridge the gap between good
|
|
cryptography and real-world deployment.
|
|
|
|
%\subsection{Design overview}
|
|
|
|
\begin{figure}[b!]
|
|
\centering
|
|
\begin{tikzpicture}
|
|
\tikzstyle{def} = [node distance=3em and 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}
|
|
\caption{Taler system overview.}
|
|
\label{fig:system}
|
|
\end{figure}
|
|
|
|
|
|
There are four key roles in the Taler system (Figure~\ref{fig:system}):
|
|
|
|
\begin{figure*}[b!]
|
|
\includegraphics[width=0.9\textwidth]{figs/taler-withdraw.pdf}
|
|
\caption{Withdrawing coins with Taler.}
|
|
\label{fig:taler-withdraw}
|
|
\end{figure*}
|
|
|
|
|
|
|
|
|
|
\begin{itemize}
|
|
\item
|
|
{\em Customers} use a digital wallet to withdraw,
|
|
hold, and spend coins. Wallets manage the customer's accounts
|
|
at the exchange, and keep receipts in a transaction history. Wallets can be
|
|
realized as browser extensions, mobile Apps or even in custom
|
|
hardware. If a user's digital wallet is compromised, the current
|
|
balance may be lost, just as with an ordinary wallet containing cash.
|
|
A wallet includes a list of trusted auditors, and will warn
|
|
users against using an exchange that is not certified by a trusted
|
|
auditor.
|
|
|
|
\begin{figure}[b!]%[36]{R}{0.5\linewidth}
|
|
\subfloat[Bank login. (Simplified for demonstration.)]{
|
|
\includegraphics[width=0.4\linewidth]{figs/bank0a.png}
|
|
\label{subfig:login}} \hfill
|
|
\subfloat[Specify amount to withdraw. (Integrated bank support.)]{
|
|
\includegraphics[width=0.4\linewidth]{figs/bank1a.png}
|
|
\label{subfig:withdraw}} \\
|
|
\subfloat[Select exchange provider. (Generated by wallet.)]{
|
|
\includegraphics[width=0.4\linewidth]{figs/bank2a.png}
|
|
\label{subfig:exchange}} \hfill
|
|
\subfloat[Confirm transaction with a PIN. (Generated by bank.)]{
|
|
\includegraphics[width=0.4\linewidth]{figs/bank3a.png}
|
|
\label{subfig:pin}}
|
|
\caption{Required steps in a Taler withdrawal process.}
|
|
\label{fig:withdrawal}
|
|
\end{figure}
|
|
|
|
|
|
|
|
\item
|
|
{\em Exchanges}, which are run by financial service providers, enable
|
|
customers to withdraw anonymous digital coins,
|
|
and merchants to deposit digital coins, in exchange for
|
|
bank money. Coins are signed by the exchange using
|
|
a blind signature scheme~\cite{chaum1983blind}. Thus, only
|
|
an exchange can issue new coins, but coins cannot be traced back
|
|
to the customer who withdrew them.
|
|
Furthermore, exchanges learn the amounts withdrawn by customers
|
|
and deposited by merchants, but they do not learn the relationship
|
|
between customers and merchants. Exchanges perform online detection
|
|
of double spending, thus providing merchants instant feedback
|
|
---including digital proofs---in case of misbehaving customers.
|
|
|
|
\item
|
|
{\em Merchants} provide goods or services in exchange for coins held
|
|
by customers' wallets. Merchants deposit these coins at the
|
|
exchange used by the customer in return for a bank wire
|
|
transfer of their value. While the exchange is determined by
|
|
the customer, the merchant's contract specifies the currency,
|
|
a list of accepted auditors, and the maximum exchange deposit
|
|
fee the merchant is willing to pay. Merchants consist of a
|
|
{\em frontend}, which interacts with the customer's wallet, and a {\em
|
|
backend}, which interacts with the exchange. Typical frontends include
|
|
Web shops and point-of-sale systems.
|
|
|
|
\item
|
|
{\em Auditors} verify that exchanges operate correctly to limit the risk
|
|
that customers and merchants incur by using a particular exchange.
|
|
Auditors are typically operated by or on behalf of financial regulatory authorities.
|
|
Depending on local legislation, auditors may mandate that exchanges
|
|
have enough financial reserves before authorizing them to create a given
|
|
volume of signed digital coins to provide a buffer against potential risks due to
|
|
operational failures (such as data loss or theft of private keys) of the exchange.
|
|
Auditors certify exchanges that they audit using digital signatures. The
|
|
respective signing keys of the auditors are distributed to customer and
|
|
merchants.
|
|
\end{itemize}
|
|
|
|
|
|
The specific protocol between wallet and merchant depends on the
|
|
setting. For a traditional store, a near field communication (NFC)
|
|
protocol might be used between a point-of-sale system and a mobile
|
|
application. In this paper, we focus on Web payments for an online
|
|
shop and explain how the actors in the Taler system interact by way of
|
|
a typical payment.
|
|
|
|
Initially, the customer installs the Taler wallet extension for
|
|
their browser. This only needs to be done once per
|
|
browser. Naturally, this step may become superfluous if Taler is
|
|
integrated tightly with browsers in the future. Regardless,
|
|
installing the extension involves only one or two clicks to confirm the
|
|
operation. Restarting the browser is not required.
|
|
|
|
|
|
\begin{figure*}[b!]
|
|
\includegraphics[width=0.9\textwidth]{figs/taler-pay.pdf}
|
|
\caption{Payment processing with Taler.}
|
|
\label{fig:taler-pay}
|
|
\end{figure*}
|
|
|
|
|
|
\subsection{Withdrawing coins}
|
|
|
|
As with cash, the customer must first withdraw digital coins
|
|
(Figure~\ref{fig:taler-withdraw}). For this, the customer must first
|
|
visit the bank's online portal. Here, the bank will
|
|
typically require some form of authentication; the specific method
|
|
used depends on the bank (Figure~\ref{subfig:login}).
|
|
|
|
The next step depends on the level of Taler support offered by the bank:
|
|
\begin{itemize}
|
|
\item If the bank does not offer integration with Taler, the
|
|
customer needs to use the menu of the wallet to create a {\em reserve}.
|
|
The wallet will ask which amount in which {\em currency} (e.g. EUR
|
|
or USD) the customer wants to withdraw, and allow the customer to
|
|
select an exchange. Given this information, the wallet will
|
|
instruct the customer to transfer the respective amount to the
|
|
account of the exchange. The customer will have to enter a
|
|
% FIXME it is not said that this crypto token is the reserve,
|
|
% or, more abstractly, that "identify" this operation
|
|
% CG: I don't think this has to be said.
|
|
54-character reserve key, which includes 256 bits of entropy and an
|
|
8-bit checksum into the transfer subject. Naturally, the above is
|
|
exactly the kind of interaction we would like to avoid for
|
|
usability reasons.
|
|
\item Otherwise, if the bank fully supports Taler, the
|
|
customer has a form in the online banking portal in which they can specify
|
|
an amount to withdraw (Figure~\ref{subfig:withdraw}).
|
|
The bank then triggers an interaction with
|
|
the wallet to allow the customer to select an exchange
|
|
(Figure~\ref{subfig:exchange}). Afterwards,
|
|
the wallet instructs the bank about the details of the wire
|
|
transfer. The bank asks the customer to authorize the transfer, and
|
|
finally confirms to the wallet that the transfer has been
|
|
successfully initiated.
|
|
\end{itemize}
|
|
|
|
In either case, the wallet can then withdraw the coins from the
|
|
exchange, and does so in the background without further interaction
|
|
with the customer.
|
|
|
|
In principle, the exchange can be directly operated by the bank, in
|
|
which case the step where the customer selects an exchange could be
|
|
skipped by default. However, we generally assume that the exchange is
|
|
a separate entity, as this yields the largest anonymity set for
|
|
customers, and may help create a competitive market.
|
|
|
|
\subsection{Spending coins}
|
|
% \tinyskip
|
|
|
|
\begin{figure}[p!]
|
|
\subfloat[Select article][Select article. \\ Generated by Web shop.]{
|
|
\includegraphics[width=0.30\textwidth]{figs/cart.png}
|
|
\label{subfig:cart}} \hfill
|
|
\subfloat[Confirm payment][Confirm payment. \\ Generated by Taler wallet.]{
|
|
\includegraphics[width=0.30\textwidth]{figs/pay.png}
|
|
\label{subfig:payment}} \hfill
|
|
\subfloat[Receive article][Receive article. \\ Generated by Web shop.]{
|
|
\includegraphics[width=0.30\textwidth]{figs/fulfillment.png}
|
|
\label{subfig:fulfillment}}
|
|
\caption{Required steps in a Taler checkout process.}
|
|
\label{fig:shopping}
|
|
\end{figure}
|
|
|
|
|
|
At a later point in time, the customer can spend their coins by
|
|
visiting a merchant that accepts digital coins in the respective
|
|
currency issued by the respective exchange
|
|
(Figure~\ref{fig:taler-pay}). Merchants are generally configured to
|
|
either accept a specific exchange, or to accept all the exchanges
|
|
audited by a particular auditor. Merchants can also set a ceiling for
|
|
the maximum amount of transaction fees they are willing to cover.
|
|
Usually these details do not matter for the customer, as we expect
|
|
most merchants to accept most exchange providers accredited by the
|
|
auditors that wallets include by default. Similarly, we expect
|
|
exchanges to operate with transaction fees acceptable to most
|
|
merchants to avoid giving customers a reason to switch to another
|
|
exchange. If transaction fees are higher than what is covered by the
|
|
merchant, the customer may choose to cover them.
|
|
|
|
% \tinyskip
|
|
\lstdefinelanguage{JavaScript}{
|
|
keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, for},
|
|
keywordstyle=\color{blue}\bfseries,
|
|
ndkeywords={class, export, boolean, throw, implements, import, this},
|
|
ndkeywordstyle=\color{darkgray}\bfseries,
|
|
identifierstyle=\color{black},
|
|
sensitive=false,
|
|
comment=[l]{//},
|
|
morecomment=[s]{/*}{*/},
|
|
commentstyle=\color{purple}\ttfamily,
|
|
stringstyle=\color{red}\ttfamily,
|
|
morestring=[b]',
|
|
morestring=[b]"
|
|
}
|
|
|
|
\begin{figure*}[p!]
|
|
\lstset{language=HTML5}
|
|
\lstinputlisting{figs/taler-presence-js.html}
|
|
\caption{Sample code to detect the Taler wallet. Allowing the
|
|
Web site to detect the presence of the wallet leaks one bit
|
|
of information about the user. The above logic also works
|
|
if the wallet is installed while the page is open.}
|
|
\label{listing:presence}
|
|
\end{figure*}
|
|
|
|
|
|
\begin{figure*}[p!]
|
|
\lstset{language={}}
|
|
\begin{lstlisting}
|
|
HTTP/1.1 402 Payment Required
|
|
Content-Type: text/html; charset=UTF-8
|
|
X-Taler-Contract-Url: https://shop/generate-contract/42
|
|
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<!-- fallback for browsers without the Taler extension -->
|
|
You do not seem to have Taler installed, here are other payment options ...
|
|
</html>
|
|
\end{lstlisting}
|
|
\caption{Sample HTTP response to prompt the wallet to show an offer.}
|
|
\label{listing:http-contract}
|
|
\end{figure*}
|
|
|
|
\begin{figure*}[p!]
|
|
\lstset{language=HTML5}
|
|
\lstinputlisting{figs/taler-contract.html}
|
|
\caption{Sample JavaScript code to prompt the wallet to show an offer.
|
|
Here, the contract is fetched on-demand from the server.
|
|
The {\tt taler\_pay()} function needs to be invoked
|
|
when the user triggers the checkout.}
|
|
\label{listing:contract}
|
|
\end{figure*}
|
|
|
|
|
|
As with traditional Web transactions, customers first select which
|
|
items they wish to buy. This can involve building a traditional
|
|
shopping cart, or simply clicking on a particular link for the
|
|
respective article (Figure~\ref{subfig:cart}). Once the articles have
|
|
been selected, the Web shop directs the user to the {\em offer} URL,
|
|
where the payment details are negotiated. The process usually starts
|
|
by allowing the user to select a {\em payment method} from a set of
|
|
methods supported by the Web shop. Taler also allows the Web shop to
|
|
detect the presence of a Taler wallet (Figure~\ref{listing:presence}),
|
|
so that the selection of alternative payment methods can be skipped if
|
|
a Taler wallet is installed (as it is in Figure~\ref{fig:shopping}).
|
|
|
|
\begin{figure*}[t!]
|
|
\lstset{language=JavaScript}
|
|
\begin{lstlisting}
|
|
{
|
|
"H_wire":"YTH0C4QBCQ10VDNTJN0DCTTV2Z6JHT5NF43F0RQHZ8JYB5NG4W4G...",
|
|
"amount":{"currency":"EUR","fraction":1,"value":0},
|
|
"auditors":[{"auditor_pub":"42V6TH91Q83FB846DK1GW3JQ5E8DS273W4236AXC397892ESD0B0"}],
|
|
"exchanges":[{"master_pub":"1T5FA8VQHMMKBHDMYPRZA2ZFK2S63AKF0YTHJZWFKF45K2JGC8H0",
|
|
"url":"https://exchange/"}],
|
|
"expiry":"/Date(1480119270)/",
|
|
"fulfillment_url": "https://shop/article/42?tid=249960194066269&time=1471479270",
|
|
"max_fee":{"currency":"EUR","fraction":01,"value":0},
|
|
"merchant":{"address":"Mailbox 4242","jurisdiction":"Jersey","name":"Shop Inc."},
|
|
"merchant_pub":"Y1ZAR5346J3ZTEXJCHQY9NJN78EZ2HSKZK8M0MYTNRJG5N0HD520",
|
|
"products":[{
|
|
"description":"Essay: The GNU Project",
|
|
"price":{"currency":"EUR","fraction":1,"value":0},
|
|
"product_id":42,"quantity":1}],
|
|
"refund_deadline":"/Date(1471522470)/",
|
|
"timestamp":"/Date(1471479270)/",
|
|
"transaction_id":249960194066269
|
|
}
|
|
\end{lstlisting}
|
|
\caption{Minimal Taler contract over a digital article with a value of \EUR{0.10}. The merchant will pay transaction fees up to \EUR{0.01}. The hash over the wire transfer information was truncated to make it fit to the page.}
|
|
\label{listing:json-contract}
|
|
\end{figure*}
|
|
|
|
\subsubsection{Offer}
|
|
|
|
The offer URL of the Web shop can then initiate payments by sending a
|
|
\emph{contract proposal} (Figure~\ref{listing:json-contract}) to the
|
|
wallet, either via the HTTP status code {\tt 402 Payment Required}
|
|
(Figure~\ref{listing:http-contract}), or via Taler's JavaScript API
|
|
(Figure~\ref{listing:contract}). The wallet then presents the
|
|
contract to the user. The format of the contract is in an extensible
|
|
JSON-based format defined by Taler and not HTML, as the rendering of
|
|
the contract is done by the wallet to ensure correct visual
|
|
representation of the terms and prices. In case that transaction fees
|
|
need to be covered by the customer, these are shown together with the
|
|
rest of the proposed contract.
|
|
|
|
The Taler wallet operates from a securely isolated {\em background}
|
|
context on the client side. The user interface that displays the
|
|
contract and allows the user to confirm the payment is displayed by
|
|
this background context. By running in the background context, the
|
|
wallet can perform the cryptographic operations protected from the
|
|
main process of the Web site. In particular, this architecture is
|
|
secure against a merchant that generates a page that looks like the
|
|
wallet's payment page (Figure~\ref{subfig:payment}), as such a page
|
|
would still not have access to the private keys of the coins that are
|
|
exclusive to the background context.
|
|
|
|
If the customer approves the contract by clicking the ``Confirm
|
|
Payment'' button (Figure~\ref{subfig:payment}), their wallet signs the
|
|
contract with enough coins to cover the contract's cost, stores all of
|
|
the information in its local database, and redirects the browser to
|
|
the {\em fulfillment} URL provided by the merchant in the contract
|
|
(Figure~\ref{subfig:fulfillment}).
|
|
|
|
\subsubsection{Fulfillment}
|
|
|
|
\begin{figure*}[t!]
|
|
\lstset{language=HTML5}
|
|
\begin{lstlisting}
|
|
taler.executePayment("2BAH2AT4GSG5JRM2W4YWTSYGY66EK4X8CX2V69D5VF7XV703AJMG",
|
|
"https://shop/pay", "https://shop/article/42",
|
|
(err) => { alert("Sending payment failed"); });
|
|
\end{lstlisting}
|
|
\caption{Sample JavaScript code to trigger transmission of a payment to the merchant.}
|
|
\label{listing:javascript-execute}
|
|
\end{figure*}
|
|
|
|
|
|
\begin{figure*}[t!]
|
|
\lstset{language={}}
|
|
\begin{lstlisting}
|
|
HTTP/1.1 402 Payment Required
|
|
Content-Type: text/html; charset=UTF-8
|
|
X-Taler-Contract-Hash: 2BAH2AT4GSG5JRM2W4YWTSYGY66EK4X8CX2V69D5VF7XV703AJMG...
|
|
X-Taler-Pay-Url: https://shop/pay
|
|
X-Taler-Offer-Url: https://shop/article/42
|
|
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<!-- fallback for browsers without the Taler extension -->
|
|
You do not seem to have Taler installed, here are other payment options ...
|
|
</html>
|
|
\end{lstlisting}
|
|
\caption{Sample HTTP response when the user agent navigates to a fulfillment
|
|
URL without the session state that indicates they have paid for the resource.
|
|
Note that unlike in Listing~\ref{listing:http-contract}, the response
|
|
references a contract that typically is already known to the wallet via its
|
|
hash code.}
|
|
\label{listing:http-execute}
|
|
\end{figure*}
|
|
|
|
The fulfillment URL uniquely identifies a purchase by some customer,
|
|
while the offer URL identifies a generic offer that is not specific to
|
|
a customer. The purchase identified by a fulfillment URL may have
|
|
been completed or still be in progress. The information contained in
|
|
the fulfillment URL must allow the merchant to restore the full
|
|
contract (including a unique transaction identifier) that was
|
|
associated with the purchase, either directly from the URL or
|
|
indirectly from an identifier in a database. Efficiently
|
|
reconstructing the contract entirely from the URL instead of using
|
|
costly database transactions can be important, as costly disk
|
|
operations for incomplete purchases make merchants more susceptible to
|
|
denial-of-service attacks from adversaries pretending to be customers.
|
|
|
|
When a customer has completed a purchase, navigating to the
|
|
fulfillment URL in a browser will show the resource associated with
|
|
the purchase. This resource can be a digital good such as a news
|
|
article, or simply a confirmation for products that are delivered by
|
|
other means.
|
|
|
|
When a customer has not yet completed a purchase (this is always the
|
|
case when a customer visits the fulfillment URL for the first time),
|
|
or when the Web shop cannot confirm that this visitor has paid for the
|
|
contract, for example because the session state was
|
|
lost,\footnote{This can happen when when privacy conscious users
|
|
delete their cookies. Also, some user agents (such as the TOR
|
|
browser) do not support persistent (non-session) cookies.} the Web
|
|
store responds by (again) triggering a payment process (either via
|
|
JavaScript or using {\tt 402 Payment Required}, see
|
|
Figures~\ref{listing:javascript-execute} and~\ref{listing:http-execute}). However, unlike the response from
|
|
the offer URL, the 402 response from the fulfillment page includes the
|
|
headers {\tt X-Taler-Contract-Hash}, {\tt X-Taler-Pay-Url} and {\tt
|
|
X-Taler-Offer-Url}.
|
|
|
|
If the contract hash matches a payment which the user already
|
|
previously approved, the wallet reacts to this by injecting the logic
|
|
to transmit the payment to the {\em pay} URL of the Web shop into
|
|
the page. Then the wallet inspects the response as it may contain
|
|
error reports about a failed payment which the wallet has to handle.
|
|
By submitting the payment this way, we also ensure that this
|
|
intermediate request does not require JavaScript and still does not
|
|
interfer with navigation. Once the Web shop confirms the payment, the
|
|
wallet causes the fulfillment URL to be reloaded.
|
|
|
|
If the contract hash does not match a payment which the user
|
|
already approved, for example because the user obtained the link
|
|
from another user, the wallet navigates to the offer URL included
|
|
in the header.
|
|
|
|
\subsubsection{Discussion}
|
|
|
|
Various failure modes are considered in this design:
|
|
|
|
\begin{itemize}
|
|
\item If the payment fails on the network, the request is typically
|
|
retried. How often the client retries automatically before informing
|
|
the user of the network issue is up to the merchant. If the network
|
|
% FIXME this (above) could be ambiguous because the network failure
|
|
% can happen between the wallet and the merchant without the merchant
|
|
% getting any (failing) request, so the merchant cannot count how much
|
|
% times a payment has failed.
|
|
% CG: Well, the merchant can do that counting *client-side*. The retries
|
|
% will be controlled by the JS on the client side, which is provided
|
|
% by the merchant initially.
|
|
failure persists and is between the customer and the merchant, the wallet
|
|
will try to recover control over the coins at the exchange by
|
|
effectively spending the coins first using Taler's
|
|
refresh protocol. In this case, later deposits by the merchant
|
|
will simply fail. If the merchant already succeeded with the payment
|
|
before the network failure, the customer can either retry the
|
|
operation via the transaction history kept by the wallet, or demand a refund (see
|
|
below). Handling these errors does not require the customer to give
|
|
up his privacy.
|
|
\item If the payment fails due to the exchange
|
|
claiming that the request was invalid, the diagnostics created by the
|
|
exchange are passed to the wallet for inspection. The wallet then
|
|
decides whether the exchange was correct, and can then inform the
|
|
user about a fraudulent or buggy exchange. At this time, it allows
|
|
the user to export the relevant cryptographic data to be used in
|
|
court. If the exchange's proofs were correct and coins were
|
|
double-spent, the wallet informs the user that its database must have
|
|
been out-of-date (e.g. because it was restored from backup),
|
|
updates the database and allows the user to retry
|
|
the transaction.
|
|
\end{itemize}
|
|
|
|
\noindent
|
|
While our design requires a few extra roundtrips,
|
|
it has the following key advantages:
|
|
\begin{itemize}
|
|
\item It works in the confines of the WebExtensions API.
|
|
\item It supports restoring session state for bookmarked
|
|
Web resources even after the session state is lost by the user agent.
|
|
\item Sending deep links to fullfilment or offer pages to
|
|
other users has the expected behavior
|
|
of asking the other user to pay for the resource.
|
|
\item Asynchronously transmitting coins from injected JavaScript costs
|
|
one roundtrip, but does not interfer with navigation and allows
|
|
proper error handling.
|
|
\item The different pages of the merchant have clear
|
|
delineations: the shopping pages conclude by making an offer, and
|
|
the fulfillment page begins with processing an accepted contract. It is thus
|
|
possible for these pages to be managed by separate parties. The
|
|
control of the fulfillment page over the transmission of the payment
|
|
data minimizes the need for exceptions to handle cross-origin
|
|
resource sharing~\cite{rfc6454,cors}.
|
|
\item The architecture supports security-conscious users that may have
|
|
disabled JavaScript, as it is not necessary to execute JavaScript
|
|
originating from Web pages to execute the payment process.
|
|
\end{itemize}
|
|
|
|
% \smallskip
|
|
|
|
\subsection{Giving change and refunds}
|
|
|
|
\begin{figure*}[b!]
|
|
\lstset{language={HTML5}}
|
|
\begin{lstlisting}
|
|
<script src="taler-wallet-lib.js"></script>
|
|
<script>
|
|
// Obtain refund permissions from the merchant backend
|
|
// ...
|
|
let refundPermissions = /* ... */;
|
|
taler.acceptRefunds(refundPermissions, (err) => {
|
|
alert("An error occured while attempting a refund");
|
|
});
|
|
</script>
|
|
\end{lstlisting}
|
|
\caption{Sample JavaScript code to trigger a refund from the merchant's web shop}
|
|
\label{listing:refund}
|
|
\end{figure*}
|
|
|
|
An important cryptographic difference between Taler and previous
|
|
transaction systems based on blind signing is that Taler is able to
|
|
provide unlinkable change and refunds. From the user's point of view,
|
|
obtaining change is automatic and handled by the wallet, i.e., if the
|
|
user has a single coin worth \EUR{5} and wants to spend \EUR{2}, the
|
|
wallet may request three \EUR{1} coins in change. Critically, the
|
|
change giving process is completely hidden from the user.
|
|
In fact, our graphical user
|
|
interface does not offer a way to inspect the denominations of the
|
|
various coins in the wallet, it only shows the total amount available
|
|
in each denomination. Expanding the views to show details may show
|
|
the exchange providers and fee structure, but not the cryptographic
|
|
coins. Consequently, the major cryptographic advances of Taler are
|
|
invisible to the user.
|
|
|
|
Taler's refresh protocol~\cite{talercrypto} also allows merchants to give
|
|
refunds to customers. To refund a purchase, the merchant obtains a signed refund permission
|
|
from the exchange, which the customer's wallet processes
|
|
(Figure~\ref{listing:refund}) to obtain new, unlinkable coins as refund.
|
|
This process allows the customer to say anonymous when receiving refunds.
|
|
|
|
Taler's refresh protocol ensures unlinkability for both change and
|
|
refunds, thereby assuring that the user has key conveniences of other
|
|
payment systems while maintaining the security standard of an
|
|
anonymous payment system.
|
|
|
|
% Alternative version:
|
|
%An important technical difference between Taler and previous
|
|
%transaction systems based on blind signing is that in Taler coins
|
|
%consist of a public-private key pair with the blind signature on the
|
|
%public key, so that coins themselves can be used to anonymously sign
|
|
%the purchase contract.
|
|
%
|
|
%An important technical difference between Taler and previous
|
|
%transaction systems based on blind signing is that Taler coins
|
|
%consist of a public-private key pair with the blind signature on the
|
|
%public key, so that coins themselves can be used to anonymously sign
|
|
%the purchase contract.
|
|
%
|
|
%In general, these coins exceed the cost of the contract, so the wallet
|
|
%may specify that only a fraction of a coin be spent, leaving some
|
|
%residual value on the partially spent coin as ``change''.
|
|
%
|
|
%As the merchant received only a signature of the coin, not private
|
|
%or symmetric key material, merchants can refund anonymous coins by
|
|
%asking the mint to restore a part of the coin's original value,
|
|
%and notifying the customer's wallet to refresh the coin.
|
|
%
|
|
%Spending Taler coins reveals nothing about a customer per se.
|
|
%Yet, any coins that hold value after being involved in a purchase or
|
|
%a refund operation cannot be considered anonymous anymore because a
|
|
%merchant, and possibly the exchange, has now seen them and could
|
|
%link them that previous transaction. At best, these tainted coins
|
|
%are only pseudononymous, similar to Bitcoin accounts.
|
|
%
|
|
%To maintain anonymity, a Taler wallet automatically performs a
|
|
%{\em refresh} operation with the mint API to both replace tainted
|
|
%coins with new freshly anonymized coins and to exchange old coins
|
|
%before their denomination's expiration date. We view refreshing
|
|
%partially spent coins as analogous to giving change in cash
|
|
%transactions, but refreshing refunded coins allows Taler merchants
|
|
%to refund anonymous customers. Cash transactions have these options,
|
|
%but credit cards require customer identification for both operations.
|
|
% Is this true?
|
|
% no comment around randomizing the serial numbers on bills
|
|
|
|
|
|
|
|
\subsection{Deployment considerations for merchants}
|
|
|
|
Payment system security is not only a concern for
|
|
customers, but also for merchants. For consumers, existing schemes
|
|
may be inconvenient and not provide privacy, but remembering to
|
|
protect a physical token (e.g. the card) and to guard a secret
|
|
(e.g. the PIN) is relatively straightforward. In contrast, merchants
|
|
are expected to securely handle sensitive customer payment data on
|
|
networked computing devices. However, securing computer systems---and
|
|
especially payment systems that represent substantial value---is a
|
|
hard challenge, as evidenced by large-scale break-ins with millions of
|
|
consumer card records being illicitly copied~\cite{target}.
|
|
|
|
Taler simplifies the deployment of a secure payment system for
|
|
merchants. The high-level cryptographic design provides the first
|
|
major advantage, as merchants never receive sensitive payment-related
|
|
customer information. Thus, they do not have to be subjected to
|
|
costly audits or certified hardware, as is commonly the case for
|
|
processing card payments~\cite{pcidss}. In fact, the exchange does not
|
|
need to have a formal business relationship with the merchant at all.
|
|
According to our design, the exchange's contract with the state
|
|
regulator or auditor and the customers ought to state that it must
|
|
honor all (legal and valid) deposits it receives. Hence, a merchant
|
|
supplying a valid deposit request should be able to enforce this in
|
|
court without a prior direct business agreement with the exchange.
|
|
This dramatically simplifies setting up a shop to the point that the
|
|
respective software only needs to be provided with the merchant's wire
|
|
transfer routing information to become operational.
|
|
|
|
The payment process requires a
|
|
few cryptographic operations on the side of the merchant, such as
|
|
signing a contract and verifying the customer's and the exchange's
|
|
signatures. The merchant also needs to store transaction data, in
|
|
particular so that the store can match sales with incoming wire
|
|
transfers from the exchange. We simplify this for merchants by
|
|
providing a generic payment processing {\em backend} for the Web
|
|
shops.
|
|
|
|
\begin{figure*}[b!]
|
|
\begin{center}
|
|
\begin{tikzpicture}[
|
|
font=\sffamily,
|
|
every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm},
|
|
source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm},
|
|
process/.style={draw,thick,circle,fill=blue!20},
|
|
sink/.style={source,fill=green!20},
|
|
datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm},
|
|
dots/.style={gray,scale=2},
|
|
to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize},
|
|
every node/.style={align=center}]
|
|
|
|
% Position the nodes using a matrix layout
|
|
\matrix{
|
|
\node[source] (wallet) {Wallet};
|
|
\& \node[process] (browser) {Browser};
|
|
\& \node[process] (shop) {Web shop};
|
|
\& \node[sink] (backend) {Taler backend}; \\
|
|
};
|
|
|
|
% Draw the arrows between the nodes and label them.
|
|
\draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract}
|
|
node[midway,below] {(signal)} (wallet);
|
|
\draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)}
|
|
node[midway,below] {(5) signed coins} (browser);
|
|
\draw[<->] (browser) -- node[midway,above] {(3,6) custom}
|
|
node[midway,below] {(HTTP(S))} (shop);
|
|
\draw[to] (shop) to[bend right=50] node[midway,above] {(HTTP(S))}
|
|
node[midway,below] {(1) proposed contract / (7) signed coins} (backend);
|
|
\draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation}
|
|
node[midway,below] {(HTTP(S))} (shop);
|
|
\end{tikzpicture}
|
|
\end{center}
|
|
\caption{Both the customer's client and the merchant's server
|
|
execute sensitive cryptographic operations in a
|
|
secured background/backend that is protected against direct access.
|
|
Interactions with the Taler exchange from the wallet background
|
|
to withdraw coins and the Taler backend
|
|
to deposit coins are not shown.
|
|
Existing system security mechanisms
|
|
are used to isolate the cryptographic components (boxes) from
|
|
the complex rendering logic (circles), hence the communication
|
|
is restricted to JavaScript signals or HTTP(S), respectively.}
|
|
\label{fig:frobearch}
|
|
\end{figure*}
|
|
|
|
Figure~\ref{fig:frobearch} shows how the secure payment components
|
|
interact with the existing Web shop logic. First, the Web shop
|
|
frontend is responsible for constructing the shopping cart. For this,
|
|
the shop frontend generates the customary Web shop pages, which are transmitted
|
|
to the customer's browser. Once the order has been constructed, the
|
|
shop frontend provides a {\em proposed contract} in JSON format to the
|
|
payment backend, which signs it and returns it to the frontend. The
|
|
frontend then transfers the signed contract over the network, and
|
|
passes it to the wallet (sample code for this is shown in
|
|
Figure~\ref{listing:contract}).
|
|
|
|
Instead of adding any cryptographic logic to the merchant frontend,
|
|
the Taler merchant backend allows the implementor to delegate
|
|
coin handling to the payment backend, which validates the coins,
|
|
deposits them at the exchange, and finally validates and persists the
|
|
receipt from the exchange. The merchant backend then communicates the
|
|
result of the transaction to the front\-end, which is then responsible
|
|
for executing the business logic to fulfill the order. As a result of
|
|
this setup (Figure~\ref{fig:frobearch}), the cryptographic details
|
|
of the Taler protocol do not have to be re-implemented by each
|
|
merchant. Instead, existing Web shops implemented in a multitude of
|
|
programming languages can add support for Taler by:
|
|
{\bf (0)} detecting in the browser that Taler is available; {\bf (1)}
|
|
upon request, generating a contract in JSON based on the shopping
|
|
cart; {\bf (2)} allowing the backend to sign the contract before
|
|
sending it to the client; {\bf (7)} passing coins received in payment
|
|
for a contract to the backend; and, {\bf (8)} executing fulfillment
|
|
business logic if the backend confirms the validity of the payment.
|
|
|
|
To setup a Taler backend, the merchant only needs to configure the
|
|
wire transfer routing details, such as the merchant's IBAN number, as
|
|
well as a list of acceptable auditors and limits for transaction fees.
|
|
Ideally, the merchant might also want to obtain a certificate for the
|
|
public key generated by the backend for improved authentication.
|
|
Otherwise, the customer's authentication of the Web shop simply
|
|
continues to rely upon HTTPS/X.509.
|
|
|
|
|
|
\section{Discussion}
|
|
|
|
We will now discuss how customer's may experience relevant operational
|
|
risks and failure modes of Taler, and relate them to failure modes
|
|
in existing systems.
|
|
|
|
% \smallskip
|
|
\subsection{Security risks}
|
|
|
|
In Taler, customers incur the risk of wallet loss or theft. We
|
|
believe customers can manage this risk effectively because they manage
|
|
similar risks of losing cash in a physical wallet. Unlike physical
|
|
wallets, Taler's wallet could be backed up to secure against loss of a
|
|
device. We note that managing the risk does not imply that customers
|
|
will never suffer from such a loss. We expect that customers will
|
|
limit the balance they carry in their digital wallet. Ideally, the
|
|
loss should be acceptable given that the customer gains the insight
|
|
that their computer was compromised.
|
|
|
|
Taler's contracts provide a degree of protection for customers,
|
|
because they are signed by the merchant and retained by the wallet.
|
|
While they mirror the paper receipts that customers receive in
|
|
physical stores, Taler's cryptographically signed contracts ought to
|
|
carry more weight in courts than typical paper receipts. Customers
|
|
can choose to discard the receipts, for example to avoid leaking their
|
|
shopping history in case their computer is compromised.
|
|
|
|
Point-of-sale systems providing printed receipts have been compromised
|
|
in the past by merchants to embezzle sales
|
|
taxes.~\cite{munichicecream} With Taler, the merchant still generates
|
|
a receipt for the customer, however, the record for the tax
|
|
authorities ultimately is anchored with the exchange's wire transfer
|
|
to the merchant. Using the subject of the wire transfer, the state
|
|
can trace the payments and request the merchant provide
|
|
cryptographically matching contracts. Thus, this type of tax
|
|
fraud is no longer possible, which is why we call Taler {\em
|
|
taxable}. The mere threat of the state sometimes tracing transactions
|
|
and contracts back to the merchant also makes Taler unsuitable for
|
|
illegal activities.
|
|
|
|
The exchange operator is obviously crucial for risk management in
|
|
Taler, as the exchange operator holds the customer's funds in a
|
|
reserve in escrow until the respective deposit request
|
|
arrives\footnote{As previously said, this {\it deposit request} is
|
|
aimed to exchange {\it coins} for bank money, and it is made by a
|
|
merchant after successfully receiving coins from a wallet during the
|
|
payment process.} To ensure that the exchange operator does not
|
|
embezzle these funds, Taler expects exchange operators to be regularly
|
|
audited by an independent auditor\footnote{Auditors are typically run
|
|
by financial regulatory bodies of states.}. The auditor can then
|
|
verify that the incoming and outgoing transactions, and the current
|
|
balance of the exchange matches the logs with the cryptographically
|
|
secured transaction records.
|
|
|
|
|
|
% \smallskip
|
|
\subsection{Failure modes}
|
|
|
|
There are several failure modes which a customer using a Taler wallet may
|
|
encounter:
|
|
|
|
\begin{itemize}
|
|
\item
|
|
As Taler supports multiple exchanges, there is a chance that a
|
|
merchant might not support any exchange where the customer withdrew
|
|
coins from. We mitigate this problem by allowing merchants to
|
|
support all exchanges audited by a particular auditor. We believe
|
|
this a reasonable approach, because auditors and merchants must
|
|
operate with a particular legal and financial framework anyways. We
|
|
note that a similar failure mode exists with credit cards where not
|
|
all merchants accept all issuers, which is often the case internationally.
|
|
|
|
\item
|
|
Restoring the Taler wallet state from previous backups, or copying the
|
|
wallet state to a new machine may cause honest users to attempt to
|
|
double spend coins, as the wallet does not know when coins are spent
|
|
between backup and recovery. In this case, the exchange provides
|
|
cryptographic proof to the wallet that the coins were previously spent so the
|
|
wallet can verify that the exchange and the merchant are behaving honestly.
|
|
|
|
% FIXME FIXME: the following paragraph seems to describe a scenario where the
|
|
% wallet lost coins due to a restore from backup and then ask for refresh
|
|
% of lost coins: but how does the wallet know lost coins' public keys?
|
|
% CG: I don't understand the problem.
|
|
%
|
|
% Also in this paragraph: how can a payment end in-flight due to insufficient
|
|
% funds? If the payment has been started by the wallet, then no 'insufficient
|
|
% funds' may occur, otherwise the wallet would not have started the payment.
|
|
%
|
|
% CG: Yes, as I explain if the Wallet isn't aware that some coins were
|
|
% already spent (I make a backup, spend coins, restore backup, try to
|
|
% spend again), then this may happen.
|
|
%
|
|
% A way to fix that could be to better define 'internal invariants' ..
|
|
%
|
|
% CG: The internal invariant is exactly the one you fell upon:
|
|
% That the wallet knows which coins have been spent!
|
|
\item
|
|
There could be insufficient funds in the Taler wallet when making a
|
|
payment. Usually the wallet can trivially check this before beginning
|
|
a transaction, but when double-spending is detected this may also
|
|
happen after the wallet already initiated the payment. This would
|
|
usually only happen if the wallet is unaware of a backup operation
|
|
voiding its internal invariant of knowing which coins have already
|
|
been spent. If a payment fails in-flight due to
|
|
insufficient funds, the wallet can use Taler's refresh protocol to
|
|
obtain a refund for those coins that were not actually double-spent,
|
|
and then explain to the user that the balance was inaccurate due to
|
|
inconsistencies, and insufficient for payment.
|
|
For the user, this failure mode appears equivalent to an insufficient
|
|
balance or credit line when paying with debit or credit cards.
|
|
\end{itemize}
|
|
|
|
In the future, we plan to make it easy for users to backup and
|
|
synchronize wallets to reduce the probability of the later two failure
|
|
modes. A key issue in this context is that these processes will need
|
|
to be designed carefully to avoid leaking information that might allow
|
|
adversaries to link purchases via side channels opened up by the
|
|
synchronization protocol.
|
|
|
|
\subsection{Comparison}
|
|
|
|
The different payment systems discussed make use of different security
|
|
technologies, which has an impact on their usability and the
|
|
assurances they can provide. Except for Bitcoin, all payment systems
|
|
described involve an authentication step.
|
|
% FIXME alternative for the following sentence:
|
|
% With Taler, the authentication is implicit when withdrawing, since
|
|
% the user has to login into his bank's Web portal in the first place,
|
|
% and no further authentication is required during the whole payment
|
|
% experience.
|
|
% CG: Not exactly, as the authentication to the bank is still
|
|
% a very explicit authentication step. It's just more natural.
|
|
With Taler, the authentication itself is straightforward, as the customer is
|
|
at the time visiting the Web portal of the bank, and the authentication is
|
|
with the bank (Figure~\ref{fig:taler-withdraw}). With PayPal, the
|
|
shop redirects the customer to the PayPal portal (step 5 in
|
|
Figure~\ref{fig:paypal}) after the user selects PayPal as the payment
|
|
method. The customer then provides the proof of payment to the
|
|
merchant. Again, this is reasonably natural. The 3DS workflow
|
|
(Figure~\ref{fig:cc3ds}) has to deal with a multitude of banks and
|
|
their different implementations, and not just a single provider.
|
|
Hence, the interactions are more complicated as the merchant needs to
|
|
additionally perform a lookup in the card scheme directory and verify
|
|
availability of the bank (steps 8 to 12).
|
|
|
|
A key difference between Taler and 3DS or PayPal is that
|
|
in Taler, authentication is done ahead of time.
|
|
After authenticating once to withdraw digital coins, the customer can
|
|
perform many micropayments without having to re-authenticate. While
|
|
this simplifies the process of the individual purchase, it shifts the
|
|
mental overhead to an earlier time, and thus requires some planning,
|
|
especially given that the digital wallet is likely to only contain a
|
|
% FIXME line below: which 'funds'? Coins or real money? (If they are
|
|
% coins, recall that the wallet withdraw all the coins from a fresh
|
|
% reserve, so there is no 'fraction' of user's available funds; at
|
|
% least in the current implementation)
|
|
% I originally wrote ``wealth'' or ``net value'', but given that
|
|
% most customers are in debt today, that makes little sense, so
|
|
% I changed it to ``available funds'', but I meant _all_ the money
|
|
% he has.
|
|
small fraction of the customer's available funds. As a result, Taler
|
|
improves usability if the customer withdraws funds once to
|
|
then perform many micropayments, while Taler is likely less usable
|
|
if for each transaction the customer first visits the bank to withdraw
|
|
funds. This is {\em deliberate}, as Taler can only achieve reasonable
|
|
privacy for customers if they keep a balance in their wallet, as
|
|
this is necessary to break the association between withdrawal and deposit.
|
|
% FIXME the sentence above can be in contrast with how the exchange
|
|
% actually deposits funds to merchants, that is through 'aggregate
|
|
% deposits' that may add unpredictable delays (but that doesn't affect
|
|
% this article too much)
|
|
% CG: I think mentioning aggregation here would distract.
|
|
|
|
Bitcoin's payment process (Figure~\ref{fig:bitcoin}) resembles that of
|
|
Taler in one interesting point, namely that the wallet is given
|
|
details about the contract the user enters (steps 7 to 11).
|
|
However, in contrast to Taler, Bitcoin wallets are expected
|
|
to fetch the ``invoice'' from the merchant. In Taler, the browser
|
|
can provide the proposed contract directly to the wallet. In
|
|
PayPal and 3DS, the user is left without a cryptographically secured
|
|
receipt.
|
|
|
|
Card-based payments (including 3DS) and PayPal also extensively rely
|
|
on TLS for security. The customer is expected to verify that their
|
|
connections to the various Web sites are properly authenticated using
|
|
X.509, and to know that it is fine to provide their bank account
|
|
credentials to the legitimate
|
|
\url{verifiedbyvisa.com}.\footnote{The search query
|
|
``verifiedbyvisa.com legit'' is so common that, when we entered
|
|
``verifiedbyvisa'' into a search engine, it was the suggested
|
|
auto-completion.} However, relying on users understanding their
|
|
browser's indications of the security context is inherently
|
|
problematic. Taler addresses this challenge by ensuring that digital
|
|
coins are only accessible from wallet-generated pages. As such
|
|
there is no risk of Web pages mimicking the look of the respective
|
|
page, as they would still not obtain access to the digital coins.
|
|
|
|
Once the payment process nears its completion, merchants need to have
|
|
some assurance that the contract is valid. In Taler, merchants
|
|
obtain a non-repudiable confirmation of the payment. With 3DS and
|
|
PayPal, the confirmation may be disputed later (e.g. in case of
|
|
fraud), or accounts may be frozen arbitrarily~\cite{diaspora2011}.
|
|
Payments in cash require the merchant to assume the risk of receiving
|
|
counterfeit money.
|
|
% FIXME what about (for the following sentence): merchants should care
|
|
% about maintaining change and depositing the money earned
|
|
% CG: No, it's not optional, ``should'' doesn't come into the equation
|
|
% here. It's a mandatory business expense.
|
|
Furthermore, with cash merchants have the cost of maintaining change
|
|
and depositing the money earned. The most extreme case for lack of
|
|
assurances upon ``completion'' is Bitcoin, where there is no time
|
|
until a payment can be said to be definitively confirmed (step 19,
|
|
Figure~\ref{fig:bitcoin}), leaving merchants in a bit of a tricky
|
|
situation.
|
|
|
|
Finally, attempts to address the scalability hudles of Bitcoin using
|
|
side-chains or schemes like BOLT introduce semi-centralized
|
|
intermediaries, not wholey unlike Taler's use of exchanges. Compared
|
|
to BOLT, we would expect a Taler exchange operating in BTC to offer
|
|
stronger security to all parties and stronger anonymity to customers,
|
|
as well as being vastly cheaper to operate.
|
|
|
|
|
|
\section{Future work}
|
|
|
|
This paper has focused on how Taler would work for Web payments.
|
|
However, the underlying cryptography should work just as well for
|
|
other domains. In particular, we plan to adapt Taler for NFC and
|
|
peer-to-peer payments in the future.
|
|
|
|
\subsection{NFC payments}
|
|
|
|
We have so far focused on how Taler could be used for Web payments;
|
|
however, Taler can in theory also be used over other protocols, such
|
|
as near field communication (NFC). Here, the user would hold his
|
|
NFC-enabled device running a wallet application near an NFC terminal
|
|
to obtain the contract and confirm the payment on his device, which
|
|
would then transfer the coins and obtain a receipt. A native NFC
|
|
application would be less restricted in its interaction with the
|
|
point-of-sale system compared to a browser extension, and the security
|
|
of the communication channel is also comparable. Thus, running
|
|
Taler over NFC is largely a simplification of the existing process.
|
|
|
|
In particular, there are no significant new concerns arising from an
|
|
NFC device possibly losing contact with a point-of-sale system, as for
|
|
Web payments, Taler already only employs idempotent operations to
|
|
ensure coins are never lost, and that transactions adequately persist
|
|
even in the case of network or endpoint failures. As a result, the
|
|
NFC system can simply use the same transaction models to replay
|
|
transmissions once contact with the point-of-sale system is
|
|
reestablished.
|
|
|
|
|
|
\subsection{Peer-to-peer payments}
|
|
|
|
Peer-to-peer payments are in principle possible with Taler as well;
|
|
however, we need to distinguish two types of peer-to-peer payments.
|
|
|
|
First, there is the {\em sharing} of coins among entities that
|
|
mutually trust each other, for example within a family. Here, all
|
|
users have to do is to export and import electronic coins over a
|
|
secure channel, such as encrypted e-mail or via NFC. For NFC, the
|
|
situation is straightforward because we presumably do not have to worry
|
|
about man-in-the-middle attacks, while secure communication over the
|
|
Internet is likely to remain a significant usability challenge. We
|
|
note that sharing coins by copying the respective private keys across
|
|
devices is not taxable: the exchange is not involved, no contracts are
|
|
signed, and no records for taxation are created. However, the
|
|
involved entities must trust each other, because after copying a private
|
|
key both parties could try to spend the coins, but only the first
|
|
transaction will succeed. Given this crucial limitation
|
|
inherent in sharing keys, we consider it ethically acceptable that
|
|
sharing is not taxable.
|
|
|
|
Second, there is the {\em transactional} mutually exclusive transfer
|
|
of ownership. This requires the receiving party to have a {\em
|
|
reserve} with an exchange, and the sender's exchange would have to
|
|
support wire transfers to the receiver's exchange. If taxability is
|
|
desired, the {\em reserve} would still need to be tied to a particular
|
|
citizen's identity for tax purposes, and thus require similar
|
|
identification protocols as commonly used for establishing a bank
|
|
account. As such, in terms of institutions, one would expect this
|
|
setup to be offered most easily by traditional banks, effectively
|
|
merging the technical concepts of a (traditional) bank accounts and
|
|
Taler reserves into one service for the customer.
|
|
|
|
In terms of usability, transactional
|
|
transfers are just as easy as sharing when performed over NFC, but
|
|
more user friendly when performed over the Internet as they do not
|
|
require a secure communication channel: the Taler protocol is by
|
|
design still safe to use even if the communication is made over an
|
|
unencrypted channel. Only the authenticity of the proposed contract
|
|
needs to be assured.
|
|
|
|
|
|
|
|
\section{Conclusions}
|
|
|
|
Customers and merchants should be able to easily adapt their existing
|
|
mental models and technical infrastructure to Taler. In contrast,
|
|
Bitcoin's payment models fail to match common expectations be it in
|
|
terms of performance, durability, security, or privacy. Minimizing
|
|
the need to authenticate to pay fundamentally improves security
|
|
and usability.
|
|
|
|
% FIXME (following paragraph): it's never said that the Taler wallet
|
|
% keeps any 'receipt' of transaction -- maybe here we want to say 'contract'
|
|
% instead of 'receipt'?
|
|
% CG: I'd say on the customer side, the signed contract is a receipt.
|
|
% That should be intuitive.
|
|
We expect that electronic wallets that automatically collect digitally
|
|
signed receipts for transactions will become commonplace.
|
|
By providing a free software wallet, Taler gives the user full control
|
|
over the usage of their
|
|
transaction history, as opposed to giving control to big data corporations.
|
|
|
|
\begin{center}
|
|
\bf
|
|
We encourage readers to try our prototype for Taler
|
|
at \url{https://demo.taler.net/}.
|
|
\end{center}
|
|
%and to ponder why the billion dollar
|
|
%e-commerce industry still relies mostly on TLS for security given
|
|
%that usability, security and privacy can clearly {\em all} be improved
|
|
%simultaneously using a modern payment protocol.
|
|
|
|
% These APIs are all RESTful in the modern sense because that greatly
|
|
% simplify integrating Taler with web shops and browsers.
|
|
|
|
\section*{Acknowledgements}
|
|
|
|
This work benefits from the financial support of the Brittany Region
|
|
(ARED 9178) and a grant from the Renewable Freedom Foundation. We
|
|
thank Bruno Haible for his financial support enabling us to
|
|
participate with the W3C payment working group. We thank the W3C
|
|
payment working group for insightful discussions about Web payments.
|
|
We thank Krista Grothoff and Neal Walfield for comments on an earlier
|
|
draft of the paper. We thank Gabor Toth for his help with the
|
|
implementation.
|
|
|
|
\bibliographystyle{splncs03}
|
|
\bibliography{ui,btc,taler,rfc}
|
|
|
|
|
|
|
|
\end{document}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% \smallskip
|
|
\subsection{Anonymity}
|
|
|
|
We strongly recommend that the user use Tor Browser to protect their
|
|
% FIXME wasn't the use of Tor discouraged to login into personal things?
|
|
IP address, both initially when withdrawing coins and later during
|
|
purchases.
|
|
|
|
There are lingering risks that anonymous coins can be correlated to
|
|
customers using additional information.
|
|
|
|
After withdrawing coins, customer should usually wait before spending
|
|
them, as spending them immediately ....
|
|
% wallet determines coin denominations
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wallet provides isolation
|
|
Near copy from EXIST proposal?
|
|
- Limits user risk
|
|
- Nearly eliminates risk for merchant and exchange
|
|
- lower transaction fees
|
|
- Reserves simplify things
|
|
|
|
Denomination choice
|
|
- Anonymity refresh protocol
|
|
- Withdraw automates like ATMs
|
|
|
|
Browser extension
|
|
- RESTful vs Bitcoin, OpenCoin, etc.
|
|
- Retrying RESTful transactions always works
|
|
- minimizing dialog
|
|
- see & pay ??
|
|
- TBB integration
|
|
- Needed anyways
|
|
- Other browser integration?
|
|
- Is it wise? Ok if not worried about anonymity Taler is still better
|
|
- Is tor2web worse?
|
|
- W3C
|
|
|
|
Autopay? pat payment recognition?
|
|
- dangerous?
|
|
- high charges
|
|
- good for funny money
|
|
|
|
NFC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% \smallskip
|
|
\subsection{Risks}
|
|
|
|
A Taler exchange's need not face significant financial risks beyond
|
|
the risk of losing a denomination signing key. Exchanges can limit that
|
|
risk by carefully tracking how much they issue in each denomination.
|
|
Taler merchant's risks are limited primarily by depositing coins
|
|
quickly and stating contracts accurately.
|