taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

commit 87c7bcbbba06e09c42ca27dab2bc63a8deb02e25
parent c17313a9e478d0aa072853dce41b291a56409e58
Author: Özgür Kesim <oec-taler@kesim.org>
Date:   Thu,  6 Oct 2022 14:44:21 +0200

-rename file; rename field

Diffstat:
Mcore/api-exchange.rst | 2+-
Ddesign-documents/032-auctions.rst | 303-------------------------------------------------------------------------------
Adesign-documents/032-brandt-vickrey-auctions.rst | 306+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdesign-documents/index.rst | 2+-
4 files changed, 308 insertions(+), 305 deletions(-)

diff --git a/core/api-exchange.rst b/core/api-exchange.rst @@ -2265,7 +2265,7 @@ proof to the seller for the escrow of sufficient fund. // winning price. This field is not relevant for the replay of a // transcript, as the transcript must be provided by the seller who sees // the winner(s) and winning price of the auction. - public: boolean; + is_public: boolean; // The public key of the seller. pubkey: EddsaPublicKey; diff --git a/design-documents/032-auctions.rst b/design-documents/032-auctions.rst @@ -1,303 +0,0 @@ -DD32: Brandt-Vickrey Auctions -############################# - -Summary -======= - -This document describes the design for how (SMC) auctions could be done with -funds held in escrow by a Taler exchange. It is taking major inspiration from -Markus Teich's Master's thesis on "Implementing Privacy Preserving Auction -Protocols". - - -Motivation -========== - -Escrow is a key capability of payment systems. With SMC auctions we can -broaden the escrow functionality beyond the (simplistic) refunds we currently -offer. This provides a first new use-case for the extension mechanism. By -using SMC auctions (libbrandt), we also provide privacy for another business -process. - -We expect the design to be useful for three primary use-cases: - - * Auctions in the style of Ebay (consumer goods) - - * Auctions for commodities and stock trading - - * Auctions in currency exchange, including crypto-currencies - -We do not consider the use-case of high-value art auctions, as here the Taler -payment system is likely unsuitable for the high transaction values, the -privacy for the buyer would still be problematic from a money-laundering -perspective, and the cost of a trusted auctioneer manually running the auction -is small compared to the transaction value, so the benefits from automation -are also minor. - - -Requirements -============ - -The discovery of ongoing auctions and the exchange of meta-data about the -auction (duration, price ranges, conditions of the sale, etc.) is considered -out-of-scope for the Taler protocol. Taler is only used to escrow a payment -once participants have decided to make a bid on an aution. - - * Support libbrandt-style SMC multiparty computation to determine - auction winner. No party is trusted to learn the bids during - the bidding phase, including the exchange. This implies that - participants have to always escrow the largest possible amount - in the auction, even if their actual bid is much lower. - - * Integrate nicely with existing exchange functionality, including - minimal changes to existing endpoints and introducing as few new - endpoints as reasonable. - - * Verifiablity of the auction outcome by the exchange and the - auditor. There is not supposed to be any trusted third party. - Naturally, when selling real-world goods, external enforcement - of the transfer of the good may be required. - - * Guaranteed payment. If the auction is successful (there were at - least two bidders), the seller must unconditionally receive the - payment. - - * Participants pay fees (possibly even just for participation), - to ensure only truly interested parties with skin in the game - participate (protection against denial-of-service attacks). - - * To ensure participants can perform the required computations - in each round, the number of bidders on an auction may need - to be limited. - - - -Proposed Solution -================= - -We will for now consider five types of parties involved in -the auction: - - * A seller, who is offering an item and who sets some basic - rules for the auction (like the price range, duration of - rounds, delivery conditions, seller's bank account, - auction operator, etc.). - - * A number of bidders, who make bids on the auction, with - the highest bidder winnig the auction and paying the - second highest price to the seller. - - * An auction operator, who collects messages from the seller - and the bidders and ultimately announces the (then universally - verifiable) outcome. In the original paper of Brand, this - would be the ``blackboard``. The auction operator may - also facilitate the discovery of auctions, but this is out - of scope. The auction operator may charge fees for setting - up and running an auction. However, from the Taler perspective, - paying an auction operator to run an auction is the same - as paying any other merchant and thus out of scope for this - design document. - - * An exchange that supports the ``policy_vickrey_auction`` extension and - holds the funds for bids in escrow for the duration of the auction. Upon - completion of the auction, the exchange pays the seller from the auction's - winner and refunds the other bidders. - - * An auditor that verifies that the exchange made the payments - correctly. - -The high-level protocol for a bidder's interaction with the auction operator -and the Taler exchange is already described in Teich's thesis in Figure 3.2: -the bidder begins by registering (say with an ephemeral EdDSA key) at the -auction operator. Further messages from the bidder during this auction must -then always be signed by the respective private key. - -The auction operator checks if there is a free slot (to limit the number of -bidders per auction) and if one is free, gives the bidder a (modest) timeout -until when it must prove that it escrowed an appropriate amount at the -exchange. If no slots are free, the auction operator may allow the -prospective bidder to long-poll for slots to become available (say because -another prospective bidder failed to provide a proof of escrow on time). - -The bidder then uses the existing ``/deposit`` endpoint at the exchange to -escrow the maximum bid. Escrowing the maximum bid ensures that no information -about the actual bid is leaked to the exchange, and that any bid that could be -made by the bidder can always be executed. In the ``/deposit``, the contract -hash is set to information that includes those private parts of the auction -meta data that do not concern the exchange (such as information about the item -being sold). The seller's account information is included as the receiver of -the funds. Additionally, the ``/deposit`` handler accepts an extension object -which specifies the (SMC auction) extension and relevant meta-data about the -auction (in particular, the bidder's ephemeral EdDSA public key, until when -the auction runs, and (possibly) key material about the auction operator). - -The resulting proofs of deposits (plural, as there may be multiple coins -involved) are then returned to the bidder. Note that the deposit confirmation -signatures cover both the hash of the contract terms and the extension object. -The deposit confirmations are then forwarded by the bidder to the auction -operator, possibly already together with first (sealed) information about the -bid. - -The auction operator then runs the auction protocol with all participants -until conclusion. Once the winner and price have been determined, the auction -operator POSTs the resulting transcript to a new -``/extensions/policy_brandt_vickrey_auction`` endpoint of the exchange. Here, -the extension-specific logic stores the transcript in its database (in a new -table) and then simulates the auction again (using libbrandt), again -determining the winner and price. The extension configuration (and thus -``/keys``) may stipendulate some fee(s) charged by the exchange to handle the -``/extensions/policy_brandt_vickrey_auction`` request. The fees should be -covered by the seller. We note that the transcript inherently contains the -deposit confirmations originally issued by the exchange for the auction. So, -the exchange can identify all of the coins that were escrowed (it should also -double-check that the coins were escrowed for the correct auction). It then -refunds the bids from the loosing bidders, pays the price to the seller from -the winner (minus auction fee), and partially refunds the winner the difference -between the escrowed amount and the winning bid. - - .. note:: - - Partial refunds are currently implemented using the ``refunds`` table. - The refunds table requires refund message signatures by the merchant's - public key. Thus, this table will need to be generalized to include - some indicator as to whether the refund signature is valid or - whether some other mechanism justified the refund. The most trivial - way would probably be to allow NULL values for the signature. However, - likely a link to the extension transcript should then be stored in - another column to make it easier for the auditor to look for - "alternative" justifications in those cases. - -In case participants are identified as malicious, the auction meta data should -specify the penalty those participants must pay to the seller. Again, the -exchange should assess the auction transcript and then trigger the correct -transactions. - -The auditor of the exchange can again simulate the auction protocol and can -thus confirm that the exchange's ultimate transactions were correct. - -Transcripts -^^^^^^^^^^^ - -A transcript of a Brandt-Vickrey auction is the JSON encoding of an object of -type `BrandtVickreyAuctionTranscript`. - - .. ts:def:: BrandtVickreyAuctionTranscript - - // This structure defines the transcript of an auction of Brandt-Vickrey kind. - interface BrandtVickreyAuctionTranscript { - // The auction definition. - auction: BrandtVickreyAuction; - - // The public keys of the bidders, in Crockford Base32 encoding. - bidders: EddsaPublicKey[]; - - // Signatures of the auction in Crockford Base32 encoding. - // One signature per bidder. - signatures: EddsaSignature[]; - - // The transcript of all messages received by the seller. - transcript: BrandtVickreyAuctionMessage[]; - - // Optionally, the seller can provide the winners it had calculated. - winners?: BrandtVickreyAuctionWinner[]; - - // The signature over the hash of this JSON object, without the - // key ``sig`` and in normalized form, basically over - // H(auction, bidders, signatures, transcripts, winners?) - // It is signed by the private key that corresponds to the public key - // in `BrandtVickreyAuction`.``pubkey``. - // This signature is in Crockford Base32 encoding. - sig: EddsaSignature; - } - - - .. ts:def:: BrandtVickreyAuctionMessage - - interface BrandtVickreyAuctionMessage { - // The index of the bidder into the - // `BrandtVickreyAuctionTranscript`.``bidders`` array. - bidder: number; - - // The raw message in Crockford Base32 encoding. - msg: string; - - // The signature over the message. The signature is in Crockford Base32 - // encoding. It must be signed by the private key corresponding to the - // bidder's public key in `BrandtVickreyAuctionTranscript`.``bidders``. - sig: EddsaSignature; - } - - - - .. ts:def:: BrandtVickreyAuctionWinner - - interface BrandtVickreyAuctionWinner { - // The index of the bidder into the - // `BrandtVickreyAuctionTranscript`.bidder array. - bidder: number; - - // The index of the winning price into the - // `BrandtVickreyAuction`.prices array. - price_idx: number; - - // The winning price - price: Amount; - } - - -Alternatives -============ - -If currency is sold for currency in an auction, the seller could also escrow -the currency being sold. This could be done by a simple parallel extension -for sellers that provides the seller's escrow proof as input into the auction -protocol. The result would effectively be an auction-driven equivalent of the -atomic swap protocols for crytocurrencies. - -Instead of the exchange and the auditor re-running the auction protocol -internally against the transcript, it might suffice if the auction operator, -seller and all bidders jointly attest to the outcome. However, this presumes -that there are no malicious participants. Thus, this is an optimization that -can help, but likely should not be relied upon. The exchange may stipendulate -different fees if auction participants provide signatures demonstrating that -they agree upon the outcome of the auction. - - -Drawbacks -========= - -Forcing participants to escrow the largest possible bid may exclude some -bidders. However, it can be assumed that the seller (wanting to get as many -high bids as possible) will set a reasonable bidding range to not exclude -realistic bids. If the seller set the bidding range wrong and receives no bids -as a result, the auction can of course simply be repeated. Finally, excluding -bidders that can only make rather low bids may help keep the number of -participants managable. Given the three application domains we focus on, -it seems that the number of bidders regularly excluded from the auction due -to this constraint should be acceptable. - - -Discussion / Q&A -================ - -A possible challenge that may require more thought is how to deal with auction -participants dropping out and not sending any more messages and the -equivalent attack from the auction operator of suppressing messages from -certain participants. The latter case can likely be addressed partially by -network-level anonymization of all participants, as then the auction operator -doesn't have the ability to target specific users. However, a conspirator -could still deanonymize themselves to the auctioneer with the objective of the -auction operator then suppressing messages from other (anonymous) -participants and thereby possibly excluding higher bids from those users. - - .. note:: - - As described above, the Master's thesis of Markus Teich proposes to - address the issue of bidders dropping out of the protocol by fining them, - for example by keeping (some of) the escrowed funds. This may work, but - only if we assume that the auction operator is not maliciously dropping - messages from some bidders. - - - -(This should be filled in with results from discussions on mailing lists / personal communication.) diff --git a/design-documents/032-brandt-vickrey-auctions.rst b/design-documents/032-brandt-vickrey-auctions.rst @@ -0,0 +1,306 @@ +DD32: Brandt-Vickrey Auctions +############################# + +Summary +======= + +This document describes the design for how (SMC) auctions could be done with +funds held in escrow by a Taler exchange. It is taking major inspiration from +Markus Teich's Master's thesis on "Implementing Privacy Preserving Auction +Protocols". + +The support for these types of auctions will be in the form of an extension for +a deposit policy. + + +Motivation +========== + +Escrow is a key capability of payment systems. With SMC auctions we can +broaden the escrow functionality beyond the (simplistic) refunds we currently +offer. This provides a first new use-case for the extension mechanism. By +using SMC auctions (libbrandt), we also provide privacy for another business +process. + +We expect the design to be useful for three primary use-cases: + + * Auctions in the style of Ebay (consumer goods) + + * Auctions for commodities and stock trading + + * Auctions in currency exchange, including crypto-currencies + +We do not consider the use-case of high-value art auctions, as here the Taler +payment system is likely unsuitable for the high transaction values, the +privacy for the buyer would still be problematic from a money-laundering +perspective, and the cost of a trusted auctioneer manually running the auction +is small compared to the transaction value, so the benefits from automation +are also minor. + + +Requirements +============ + +The discovery of ongoing auctions and the exchange of meta-data about the +auction (duration, price ranges, conditions of the sale, etc.) is considered +out-of-scope for the Taler protocol. Taler is only used to escrow a payment +once participants have decided to make a bid on an aution. + + * Support libbrandt-style SMC multiparty computation to determine + auction winner. No party is trusted to learn the bids during + the bidding phase, including the exchange. This implies that + participants have to always escrow the largest possible amount + in the auction, even if their actual bid is much lower. + + * Integrate nicely with existing exchange functionality, including + minimal changes to existing endpoints and introducing as few new + endpoints as reasonable. + + * Verifiablity of the auction outcome by the exchange and the + auditor. There is not supposed to be any trusted third party. + Naturally, when selling real-world goods, external enforcement + of the transfer of the good may be required. + + * Guaranteed payment. If the auction is successful (there were at + least two bidders), the seller must unconditionally receive the + payment. + + * Participants pay fees (possibly even just for participation), + to ensure only truly interested parties with skin in the game + participate (protection against denial-of-service attacks). + + * To ensure participants can perform the required computations + in each round, the number of bidders on an auction may need + to be limited. + + + +Proposed Solution +================= + +We will for now consider five types of parties involved in +the auction: + + * A seller, who is offering an item and who sets some basic + rules for the auction (like the price range, duration of + rounds, delivery conditions, seller's bank account, + auction operator, etc.). + + * A number of bidders, who make bids on the auction, with + the highest bidder winnig the auction and paying the + second highest price to the seller. + + * An auction operator, who collects messages from the seller + and the bidders and ultimately announces the (then universally + verifiable) outcome. In the original paper of Brand, this + would be the ``blackboard``. The auction operator may + also facilitate the discovery of auctions, but this is out + of scope. The auction operator may charge fees for setting + up and running an auction. However, from the Taler perspective, + paying an auction operator to run an auction is the same + as paying any other merchant and thus out of scope for this + design document. + + * An exchange that supports the ``policy_vickrey_auction`` extension and + holds the funds for bids in escrow for the duration of the auction. Upon + completion of the auction, the exchange pays the seller from the auction's + winner and refunds the other bidders. + + * An auditor that verifies that the exchange made the payments + correctly. + +The high-level protocol for a bidder's interaction with the auction operator +and the Taler exchange is already described in Teich's thesis in Figure 3.2: +the bidder begins by registering (say with an ephemeral EdDSA key) at the +auction operator. Further messages from the bidder during this auction must +then always be signed by the respective private key. + +The auction operator checks if there is a free slot (to limit the number of +bidders per auction) and if one is free, gives the bidder a (modest) timeout +until when it must prove that it escrowed an appropriate amount at the +exchange. If no slots are free, the auction operator may allow the +prospective bidder to long-poll for slots to become available (say because +another prospective bidder failed to provide a proof of escrow on time). + +The bidder then uses the existing ``/deposit`` endpoint at the exchange to +escrow the maximum bid. Escrowing the maximum bid ensures that no information +about the actual bid is leaked to the exchange, and that any bid that could be +made by the bidder can always be executed. In the ``/deposit``, the contract +hash is set to information that includes those private parts of the auction +meta data that do not concern the exchange (such as information about the item +being sold). The seller's account information is included as the receiver of +the funds. Additionally, the ``/deposit`` handler accepts an extension object +which specifies the (SMC auction) extension and relevant meta-data about the +auction (in particular, the bidder's ephemeral EdDSA public key, until when +the auction runs, and (possibly) key material about the auction operator). + +The resulting proofs of deposits (plural, as there may be multiple coins +involved) are then returned to the bidder. Note that the deposit confirmation +signatures cover both the hash of the contract terms and the extension object. +The deposit confirmations are then forwarded by the bidder to the auction +operator, possibly already together with first (sealed) information about the +bid. + +The auction operator then runs the auction protocol with all participants +until conclusion. Once the winner and price have been determined, the auction +operator POSTs the resulting transcript to a new +``/extensions/policy_brandt_vickrey_auction`` endpoint of the exchange. Here, +the extension-specific logic stores the transcript in its database (in a new +table) and then simulates the auction again (using libbrandt), again +determining the winner and price. The extension configuration (and thus +``/keys``) may stipendulate some fee(s) charged by the exchange to handle the +``/extensions/policy_brandt_vickrey_auction`` request. The fees should be +covered by the seller. We note that the transcript inherently contains the +deposit confirmations originally issued by the exchange for the auction. So, +the exchange can identify all of the coins that were escrowed (it should also +double-check that the coins were escrowed for the correct auction). It then +refunds the bids from the loosing bidders, pays the price to the seller from +the winner (minus auction fee), and partially refunds the winner the difference +between the escrowed amount and the winning bid. + + .. note:: + + Partial refunds are currently implemented using the ``refunds`` table. + The refunds table requires refund message signatures by the merchant's + public key. Thus, this table will need to be generalized to include + some indicator as to whether the refund signature is valid or + whether some other mechanism justified the refund. The most trivial + way would probably be to allow NULL values for the signature. However, + likely a link to the extension transcript should then be stored in + another column to make it easier for the auditor to look for + "alternative" justifications in those cases. + +In case participants are identified as malicious, the auction meta data should +specify the penalty those participants must pay to the seller. Again, the +exchange should assess the auction transcript and then trigger the correct +transactions. + +The auditor of the exchange can again simulate the auction protocol and can +thus confirm that the exchange's ultimate transactions were correct. + +Transcripts +^^^^^^^^^^^ + +A transcript of a Brandt-Vickrey auction is the JSON encoding of an object of +type `BrandtVickreyAuctionTranscript`. + + .. ts:def:: BrandtVickreyAuctionTranscript + + // This structure defines the transcript of an auction of Brandt-Vickrey kind. + interface BrandtVickreyAuctionTranscript { + // The auction definition. + auction: BrandtVickreyAuction; + + // The public keys of the bidders, in Crockford Base32 encoding. + bidders: EddsaPublicKey[]; + + // Signatures of the auction in Crockford Base32 encoding. + // One signature per bidder. + signatures: EddsaSignature[]; + + // The transcript of all messages received by the seller. + transcript: BrandtVickreyAuctionMessage[]; + + // Optionally, the seller can provide the winners it had calculated. + winners?: BrandtVickreyAuctionWinner[]; + + // The signature over the hash of this JSON object, without the + // key ``sig`` and in normalized form, basically over + // H(auction, bidders, signatures, transcripts, winners?) + // It is signed by the private key that corresponds to the public key + // in `BrandtVickreyAuction`.``pubkey``. + // This signature is in Crockford Base32 encoding. + sig: EddsaSignature; + } + + + .. ts:def:: BrandtVickreyAuctionMessage + + interface BrandtVickreyAuctionMessage { + // The index of the bidder into the + // `BrandtVickreyAuctionTranscript`.``bidders`` array. + bidder: number; + + // The raw message in Crockford Base32 encoding. + msg: string; + + // The signature over the message. The signature is in Crockford Base32 + // encoding. It must be signed by the private key corresponding to the + // bidder's public key in `BrandtVickreyAuctionTranscript`.``bidders``. + sig: EddsaSignature; + } + + + + .. ts:def:: BrandtVickreyAuctionWinner + + interface BrandtVickreyAuctionWinner { + // The index of the bidder into the + // `BrandtVickreyAuctionTranscript`.bidder array. + bidder: number; + + // The index of the winning price into the + // `BrandtVickreyAuction`.prices array. + price_idx: number; + + // The winning price + price: Amount; + } + + +Alternatives +============ + +If currency is sold for currency in an auction, the seller could also escrow +the currency being sold. This could be done by a simple parallel extension +for sellers that provides the seller's escrow proof as input into the auction +protocol. The result would effectively be an auction-driven equivalent of the +atomic swap protocols for crytocurrencies. + +Instead of the exchange and the auditor re-running the auction protocol +internally against the transcript, it might suffice if the auction operator, +seller and all bidders jointly attest to the outcome. However, this presumes +that there are no malicious participants. Thus, this is an optimization that +can help, but likely should not be relied upon. The exchange may stipendulate +different fees if auction participants provide signatures demonstrating that +they agree upon the outcome of the auction. + + +Drawbacks +========= + +Forcing participants to escrow the largest possible bid may exclude some +bidders. However, it can be assumed that the seller (wanting to get as many +high bids as possible) will set a reasonable bidding range to not exclude +realistic bids. If the seller set the bidding range wrong and receives no bids +as a result, the auction can of course simply be repeated. Finally, excluding +bidders that can only make rather low bids may help keep the number of +participants managable. Given the three application domains we focus on, +it seems that the number of bidders regularly excluded from the auction due +to this constraint should be acceptable. + + +Discussion / Q&A +================ + +A possible challenge that may require more thought is how to deal with auction +participants dropping out and not sending any more messages and the +equivalent attack from the auction operator of suppressing messages from +certain participants. The latter case can likely be addressed partially by +network-level anonymization of all participants, as then the auction operator +doesn't have the ability to target specific users. However, a conspirator +could still deanonymize themselves to the auctioneer with the objective of the +auction operator then suppressing messages from other (anonymous) +participants and thereby possibly excluding higher bids from those users. + + .. note:: + + As described above, the Master's thesis of Markus Teich proposes to + address the issue of bidders dropping out of the protocol by fining them, + for example by keeping (some of) the escrowed funds. This may work, but + only if we assume that the auction operator is not maliciously dropping + messages from some bidders. + + + +(This should be filled in with results from discussions on mailing lists / personal communication.) diff --git a/design-documents/index.rst b/design-documents/index.rst @@ -40,5 +40,5 @@ and protocol. 029-mobile-ui 030-offline-payments 031-invoicing - 032-auctions + 032-brandt-vickrey-auctions 999-template