1. Introduction
Since the release of the Bitcoin paper by Nakamoto [
1], blockchain technology has experienced rapid growth in both academic and industry interest. Numerous protocols, such as Ethereum [
2], Ripple [
3], Phantom [
4], HyperLedger [
5], and Ouroboros Praos [
6], have presented different approaches to the decentralized/distributed nature of blockchain technologies and digital currencies. These protocols present blockchain solutions with different modifications and restrictions on who may join the network, participate, or submit blocks.
While the above represents a small sample of the more famous protocols, the development and adoption is likely to continue to grow in the longer term due to the significant interest from industry. In their 2020 global blockchain survey, Deloitte polled nearly 1400 executives across 14 countries, and 53% responded that blockchain technology was listed among their top strategic priorities [
7]. Moreover, nearly a third stated that their company was in development of a blockchain-related project, and 84% indicated that they already use blockchain technology to some extent. Lastly, in their survey, Deloitte estimated that global spending on blockchain solutions will exceed USD 11 billion. Furthermore, the application of blockchain has spread beyond just financial use as a result of extended research conducted on its application to electronic health records [
8,
9], supply chain management [
10,
11], and smart cities [
12].
These figures and estimates demonstrate that blockchain technology will continue to expand and become increasingly prevalent globally. As such, there is, then, a matching need for these protocols to be provably secure and trustworthy in the long-term. This last criteria of long-term security and trustworthiness is especially vital with the advancements in quantum computers. The existence of Shor’s algorithm [
13] and the Grover search [
14] undermine the security of currently deployed cryptographic algorithms. Shor’s algorithm provides quantum computers the ability to recover the secret keys used for both encryption and signing for both RSA and ECC systems. The Grover search can be used to find collisions in hash functions, which are used to ensure the immutability of the blockchain. Thus, any current, and more importantly, future blockchain protocols must consider the potential of quantum-based attacks.
1.1. Our Contributions
In this paper, we present formal proofs of security for the Dandelion blockchain protocol. The Dandelion protocol is designed to be a mobile peer-to-peer transaction application that allows for asynchronous payment requests and deposits [
15]. More specifically, we review the protocol and define a set of properties necessary for both functionality and security in the asynchronous, distributed network of Dandelion. To do so, we define a series of black-box oracles that would allow a (potentially quantum) adversary to simulate the entire network, and a set of security experiments that capture our defined properties. Briefly, these criteria include fault tolerance, decidability, unforgeability, non-repudiation, immutability, and double-spending. We then present direct, tight security proofs against a quantum-computing-capable adversary for each of the outlined criteria.
1.2. Paper Organization
The organization of this paper is as follows. In
Section 2, we review the necessary background notation and cryptographic algorithms used in this paper and the Dandelion protocol. In
Section 3, we outline the network model, a description of users, a summary of Dandelion’s message flows, and a brief discussion of the key differences between Dandelion and other protocols. In
Section 4, we define our security model for Dandelion, including a formal description of adversarial powers, via oracles and goals. In
Section 5, we then prove both the functional and security properties of Dandelion in our model. We conclude our paper in
Section 6. In
Appendix A, we provide a detailed description of how messages are handled. In
Appendix B, we describe how out-of-sync nodes are dealt with in our oracle model.
2. Prelimaries
In this section, we introduce the notation used in this paper, and the necessary cryptographic algorithms used in the Dandelion protocol. We will first review the notation for (cryptographic) algorithms, sampling, and negligible functions.
This section introduces the notation used in this paper and the necessary cryptographic algorithms used in the Dandelion protocol. First, we will review the notation for (cryptographic) algorithms, sampling, and negligible functions.
2.1. Notation
By we denote an algorithm, , that runs on input x and output y. When has access to an oracle, , that it may query, we write this as . If is an algorithm that uses some randomness in its execution on input x and we wish to specify what the randomness is, say r, we denote it as . We will refer to specific subroutines within as . We will consider all adversaries as probabilistic polynomial time (PPT) algorithms on their input length.
We write to denote that x was outputted by S probabilistically, where if S is some algorithm, then x was selected according to some internal distribution, and if S is some space, such as , then we implicitly mean for x to be sampled uniformly at random.
We say a function g mapping non-negative integers to non-negative reals is called negligible, if for all positive numbers c there exists an integer , such that for all , we have .
2.2. Digital Signatures
Next, we outline the core asymmetric cryptographic component of Dandelion.
Definition 1 (Digital Signature Algorithms). We say a triple of algorithms Σ = (, , form a digital signature algorithm (DSA) scheme, if:
: The key generation algorithm is a probabilistic algorithm which on input outputs a related pair, , of public verification and secret signing keys;
: The signing algorithm is a probabilistic algorithm that takes two inputs, a secret signing key , and a plaintext message m, from a designated message space, , and outputs a signature σ;
: The decryption algorithm is a deterministic algorithm that takes as input a public verification key , a plaintext message m, and a signature σ, and returns either a 0 if rejected, or a 1 if accepted.
We now define our security notions for DSAs.
Definition 2 (Security for DSAs). We say that a DSA, Σ
, is -secure if, for all adversaries , we have that: is a negligible function in κ, where is defined in Figure 1. 2.3. Hash Functions
For the purposes of this paper, when we refer to a hash function, we are specifically referring to an unkeyed compression function, which takes strings of arbitrary length and outputs digests of some fixed length l. Furthermore, when we informally refer to a secure or good hash function, we mean a hash function that is collision-resistant, that is, it should be infeasible for an adversary to produce two different messages that evaluate to the same digest. We now formalize the notion of a family of collision-resistant of hash functions.
Definition 3. Let be a family of functions . We call this family of functions a family of collision-resistant families of hash functions if:
There is a PPT time algorithm to sample ;
Given , can be computed in poly-time;
For all adversaries , and , we have thatis a negligible function, where is defined in Figure 2.
3. The Dandelion Protocol
In this section of the paper, we outline the users and network settings of the Dandelion protocol [
15], the protocol itself, the message flows, and the data structure.
3.1. Network and Users
The fundamental network structure of Dandelion is that of an asynchronous, open network, where users, or nodes, may join the network at any time, and may participate in any number of requests they choose. More precisely, by asynchronous we mean that there is no shared network clock, and that communication between clients and nodes can be responded to by the other at any point in time. This description also allows for situations where nodes may adaptively go on- or offline, including because of crashes, disconnections, or other reasons [
15].
The network is parameterized by the following: a list of all users and all related information , an existentially unforgeable under chosen message attack (-secure) digital signing algorithm (DSA) , a collision-resistant hash function , and a variable that denotes the maximum number of unclaimed transactions a user may have at once . We refer to a user’s unclaimed transactions as the user’s penny jar.
Users, , in the Dandelion protocol are parameterized by the following:
- Keys:
A pair of keys , where remains private, and acts as part of ’s public account ID;
- Shard
Id: , a parameter to denote which “shard” of the network the user belongs to. Shards are finite collections of users and are assigned to users as they join the network using a proprietary technology not discussed in this work. A specific users’ shard ID is denoted as ;
- Balance:
The user’s account balance, denoted by . When we refer to a specific users’ balance, we will use the notation ;
- Transaction
Id: The number of sent transactions the user has completed is denoted by , which is updated incrementally as new transactions are completed. To refer to a specific i-th transaction number, we adopt the notation . In cases where we wish to refer to the transaction of a specific user, we denote it as , and likewise for . We also use the notation to denote a ’s transaction ID according to the internal state of another node;
- Status:
represents what state the user is in from the view of a different node. Each user has three possible states: , , and . When a node is , the node is free to create new transaction requests to send to the network. When a node is , the rest of the nodes will reject transaction requests from it until the status is changed to . is the state nodes are set to when their transaction requests have been denied. Once a transaction request has been denied, the node must send out an abort request to the network, to which their status is set to . The node must then receive enough authorizations to abort the transaction and then send all authorizations to the network to become . When we refer to a specific user’s status, we will use the notation ;
- Penny
Jar: , a collection of non-redeemed transfers to the user, called
pennies. This list is held by the other nodes of the network. Each penny in the penny jar is denoted by
. Each element is of the form
. A formal description of a penny and block header are included in
Figure 3. When we refer to a specific user’s penny jar, we denote it as
. We note that different nodes may have differing penny jars for the same user
. To differentiate the source of the penny jar (penny) we denote it as
(
);
- Blocks:
The record of transactions which the user has participated in. We use
to denote the complete set of all transactions, or
blocks, in a user’s chain in sequential order, and
to refer to the
i-th block of the user’s chain. We will also adopt the notation of
to refer to the last block currently part of a user’s chain. When we need to distinguish multiple users’ chains (blocks) we use the notation
. A description of a block and the block header are provided below, in
Figure 3. We note here an important difference between Dandelion and other traditional blockchains: while other blockchains’ blocks are collections of global transactions, in the Dandelion protocol, each user has their own individual chain, where each block is a single transaction.
We assume every node maintains a list of all the publicly available information above (i.e., all information barring the users’ secret key) for each other user that is efficiently searchable on inputs . We call this list the node list, . Whenever a node joins the network, we assume that they obtain a node list generated from at the time of joining. In the real-world setting, when a node wishes to join the network, they would use discovery channels to download a copy of other existing node lists (signed by the providing node), and collate these lists to create and publish their own node list. Moreover, in real-world applications, nodes would continuously update and publish their node list while participating in network validation to determine the approximate number of total online nodes. This is used so that nodes can determine whether a transaction has received enough responses and authorizations for finalization. To see why this is necessary, consider a transaction created by an adversary that is sent to one honest node and two corrupted nodes. The adversary can trivially create a scenario where a fake transaction has a consensus of approval from the responses collected. However, as the transaction is fake, it should not be possible for fabricated transactions to obtain majority approval. Thus, utilize each node’s node list to prevent this curating of biased responses.
3.2. Message Flows
We now briefly introduce Dandelion, a permissionless directed acyclic graph (DAG) blockchain protocol, and its message flows, with a series of figures. For readability considerations, we split the complete Dandelion protocol into three sub-protocols: transaction requests, abort requests, and collection requests. We then describe the sub-protocol with three figures: message descriptions, message flows, and how each message is handled. We provide the descriptions for how messages in each sub-protocol are handled in
Appendix A.
3.3. Data Structure
Unlike traditional blockchain protocols, which make use of linear chains and have potential new blocks compete for consensus to be added to the single chain each round, Dandelion uses the structure of a DAG. The DAG structure seeks to offer faster confirmation times and increased scalability than traditional linear blockchains without compromising security. In the last several years, there has been an increasing number of protocols built upon DAGs [
4,
16,
17,
18,
19,
20].
DAGs consist of a point set and an edge set . Each tuple in the edge set represents a partial-order relationship between u and v, where order is defined as a directed path between u and v.
In the case of Dandelion, each element in the point set corresponds to a transaction , and the directed path or order means that one transaction is linked to another. Furthermore, each user has their own DAG, and for every transaction there must exist a discretely matched pair of transactions from the sending account and the receiving account. Finally, Dandelion allows for these transaction blocks to be created asynchronously.
3.4. Comparisons
We now briefly highlight the unique structural features of Dandelion regarding other DAG-based protocols. We note here that a true comparison between Dandelion and other protocols is not truly possible on a structural level, and a performance comparison is outside the scope of this paper; the main goal of this paper is to prove the security of Dandelion in our model described in
Section 4.
Unlike other peer-to-peer protocols, Dandelion operates on an individual level, and does not have a global or network-wide shared ledger of transactions. Instead, each account has its own chain recording each transaction they have participated in, which is stored on the network nodes. Furthermore, each account holder is responsible for advancing the state of their own chain, rather than a protocol determining when to add the next block to the shared chain.
A second fundamental difference is that network nodes do not communicate with one another to process requests. Dandelion uses a distinct consensus mechanism, as opposed to traditional consensus algorithms such as proof of work or proof of stake. Instead, Dandelion uses a so-called “client leader” model, where the account holder is responsible for collecting the responses from validator nodes. The account holder then forwards their collection of responses to the rest of the network, who individually confirm whether there is a two-thirds majority of approval before accepting and continuing.
Finally, as previously mentioned, Dandelion allows for completely asynchronous processing of payments and deposits. As a result of these design choices, a rigorous comparison between the security of Dandelion and other well-known protocols would not be truly meaningful, and a performance comparison is not within the scope of this work.
4. Security Model
In this section, we outline the adversarial powers (via oracles) and security definitions developed for the Dandelion protocol. We begin with global network parameters needed for Dandelion, as well as several artificial parameters necessary for the proof of security.
4.1. Adversary Oracles
In this section of the paper, we present a series of oracles that are given to the adversary attempting to achieve some goal. We define the security criteria and the corresponding experiments following the descriptions of the oracles.
Before beginning the description of our oracles, we provide insight behind this choice of approach. Proofs of security for algorithms, such as DSAs, and (authenticated) key exchange protocols typically use oracles in security experiments, that are given to the adversary. This allows them to interact and control various aspects of the algorithm/protocol. In the case of key exchanges, the adversary can simulate the entire network, issuing messages on behalf of users, corrupt users, and more, effectively giving them near-total control while they attempt to win the security experiment. Our choice of using an oracle representation is to bring security proofs of blockchain protocols in line with other cryptographic algorithms through the use of oracles and formal security experiments.
To this end, we adopt a method similar to key exchange models, where the oracles are able to generate and process any message from the protocol. Thus, our oracles are defined to follow this approach, and provide the adversary oracles that are capable of generating and processing any message from the Dandelion protocol. We note here that our choice of model can be thought of as an oracle-based generalization of Garay et al.’s security model [
21], which gives an adversary the ability to broadcast any message they wish, adaptively corrupt nodes, and change the source of any message. However, their model is not truly appropriate for our purposes, as Dandelion does not utilize rounds and a global ledger. Instead, each transaction is completed separately, and we make use of oracles which act on a transactional level.
We first define two additional lists that we require for our security analysis: , which is a list of users that have been corrupted by the adversary; , a list of non-active nodes; and , a list of transactions the adversary has created via oracle queries. Each of , , and begins empty and is updated adaptively in response to the actions of the adversary. Importantly, allows the adversary to view the corrupted node’s secret keys and to arbitrarily decide the node’s responses to transaction requests. Finally, we note that all transactions require , and all other values will result in a reject message ⊥.
- :
Generates a new node , under the control of . The oracle first checks whether . If yes, then the node’s keys are generated, along with its shard ID ; its balance and transaction are each set to 0, is set to , and its chain and penny jar are set to empty. The node is added to both , , , 0, 0, , , and , and are returned to . If no, then the oracle returns ⊥.
: Corrupts a node to give the node’s secret key and control over it. The oracle first checks whether the node is in the master list of users and whether . If yes, it then returns ’s corresponding secret and . If not, then the oracle returns ⊥.
: Takes a node temporarily offline so that the node will miss the next transaction or collection request, simulating the node missing the next round of network validation. The oracle first checks whether the node is in the master list of users and whether . If yes, then the oracle is successful and , and it returns 1. Otherwise, the oracle fails and returns 0.
: Creates a transaction request to send from a corrupted node to another node, . First, the oracle confirms both that the user exists, and that . If neither is true, then the oracle rejects. Otherwise, the oracle creates the corresponding and , and returns a message to the adversary and adds .
: Returns the responses of all nodes
to the transaction request. First, the oracle does the following for each online non-corrupted node: it confirms that each of the users exist, that
is
, that
, that
, and it verifies the signature. The node then updates its node list. If a node accepts the transaction request as valid, it will return a
message (see
Figure 5) with
, and will set
. Otherwise, the node sets
and sends
. We describe how this oracle handles nodes that were previously offline in
Appendix B.
: Creates the message
(see
Figure 5) with the list of responses
, computes the final processing fee from the suggested fees by ordering the suggested fees in increasing order, and then takes the median of the first two thirds. It then returns the completed message to the adversary.
: Completes the transaction. Each node processes by first checking if each response in is from an existing node by checking its own node list. If not, then that response is discarded. Next, they verify the signatures of the nodes they know of, and confirms if over two-thirds of the responses, relative to their node list, in , accepted the transaction. If yes, then the node computes the next block in ’s chain, updates ’s balance by subtracting the amount request and the fee calculated, updating the transaction ID, sets to , and adds the transaction to ’s penny jar to be collected later. Finally, it returns each ’s response to the adversary , if they are rejected and if accepted. is emptied.
: Creates an abort transaction request for transaction
. The oracle first checks whether
; if not, then the oracle returns
. Otherwise, the oracle computes and returns
; see
Figure 7.
: Returns the responses of all nodes
to the abort transaction requests. Each node reviews the transaction
and checks whether the transaction is still in
’s penny jar and not in
’s chain, and verifies the signature. If true, then the node sets
, and
creates the response
(see
Figure 7) with
. Otherwise, it sets
, and creates
accordingly. All the responses are collected in the set
and returned to the adversary.
: Creates the abort finalize message
(see
Figure 7) under response set
, where
are the responses the adversary inputs themselves for the corrupted nodes they control, and returns the completed message to the adversary.
is then returned.
: Completes the abort request. Each node is given a copy of , and first checks if each response in is from an existing node by checking its own node list. If not, then that response is discarded. Next, they verify the signatures of the nodes they know of and confirm if over two-thirds of the responses, relative to their node list in , accepted the abort. If accepts, then the transaction is aborted, removed from node ’s penny jar , is set to and the balance is updated, and the message is outputted by the node. Otherwise, the node does nothing but output . The collection of responses is outputted to the adversary.
: Creates a penny jar request for node
The oracle first checks whether the node exists (if not, then the oracle returns
) and if
is
’s transaction ID on
. Otherwise, the oracle returns to the adversary
; see
Figure 9.
: Returns the penny jar that every available node has for node
. Each node first attempts to verify the signature. If the signature is valid, it outputs
; see
Figure 9. Additionally, the node sends the corresponding
for each penny. Otherwise, it returns
. The responses are collected in the collection
and returned to the adversary.
: Returns
’s ordered list of pennies according to the node
from all collected penny jars, along with the corresponding hash of the penny. The order is determined by the
s. The oracle then returns
to the adversary; see
Figure 9.
: Sends the ordered list of pennies to the other nodes to redeem all pennies. First, it verifies the signature
. If the signature verifies, then
updates
’s chain by hashing
’s preceding block along with the corresponding block from the sender’s chain for the penny (using the blocker header to find the correct block) and creating the next block for
. This is repeated for each penny, and during each iteration,
’s balance and transaction ID are updated appropriately. Then,
empties
’s penny jar
. We describe how this oracle handles nodes that were previously offline in
Appendix B.
: Returns the i-th transaction for node , by searching the node’s chain. If there is no such transaction, the oracle returns
: Returns the i-th block in node ’s chain. If there is no such block, then the oracle returns
- :
Returns .
4.2. Security
In addition to resistance to double-spending attacks, we now provide a list of security properties for the Dandelion protocol. We first provide an informal description of the various properties that have been, we believe, necessary for practical use for the Dandelion protocol, in addition to resistance to double-spending attacks. We then capture these with notions in a formal setting, along with security experiments in which the adversary is given access to the above oracles and must achieve some related goal.
- Correctness:
If , then all requests that were honestly created will be authorized by honest nodes in the network.
- Fault
Tolerance: An adversary, with some number of corrupted nodes, should not have monopolistic control over the approval of transactions or the processing of abort transaction requests.
- Decidability:
All transaction requests must either be completed or rejected.
- Unforgeable
Transactions: An adversary, with some number of corrupted nodes, cannot issue transaction requests that can become finalized on behalf of non-corrupted nodes.
- Non-repudiation:
An adversary, with some number of corrupted nodes, cannot issue abort transaction requests that are able to become finalized on behalf of non-corrupted nodes.
- Unforgeable
Collection: An adversary, with some number of corrupted nodes, cannot issue a request for the penny jar of honest nodes that causes honest nodes to return the corresponding penny jar.
- Immutability:
An adversary, with some number of corrupted nodes, cannot modify an existing users’ chain.
- Quantum
Resistance: The above properties must hold in the presence of an adversary with quantum computing capabilities.
We call the first three properties the functionality properties, as they ensure a basic level of the usability of the Dandelion protocol. Correctness ensures that honest attempts by potential users should be accepted by others executing the protocol correctly. An honest transaction should be only be rejected if the receiver’s penny jar is full. Thus, we must prove that if the penny jar limit was infinite and these messages were well-formed and valid, then they will always be accepted.
Fault tolerance is a necessary property for basic functionality, as Dandelion is to be a distributed decentralized network, where malicious nodes may attempt to collude and influence the network at large. As such, we must determine the fault-tolerance threshold of Dandelion, the point at which the network is effectively controlled by adversaries.
The final functionality property is that of decidability. Each request must be processed by the other nodes in the network before responding. If there existed a transaction that could not be decided upon, then, by the definition of Dandelion, the requester’s account would become locked. Moreover, the requester must then create an abort transaction message to unlock the node. Thus, we must prove that all transactions are either accepted, rejected, or can be aborted successfully.
The remaining five properties will be referred to as the security properties of Dandelion. We will use the traditional security experiment framework of Setup, Query, Challenge, and Finalize to formalize the first four security proprieties. Regarding quantum resistance, we will make it explicit that we will be considering a probabilistic poly-time adversary with quantum-computing capabilities, and that are capable of performing queries in superposition. While the following security experiments and the subsequent proofs can be downgraded to consider classic adversaries, we consider it prudent to focus on quantum-capable adversaries as the default, given the impending standardization of quantum-resistant algorithms and the increasing probability of scaleable quantum computers during the intended lifetime of Dandelion.
We first begin with the security experiment for unforgeable transaction requests.
Definition 4 (Unforgeability of Transactions)
. Let κ be a security parameter, be the challenger of this experiment, Σ
be a signature scheme, and H a hash function, and let be an adversary interacting with Dandelion via the queries defined in Section 4.1 within the following security experiment : - Setup.
The challenger generates all the public and private information of all users in the Dandelion network according to the Dandelion protocol. This includes generating the public and secret key for Σ with security parameter κ. The challenger then simulates the network operating by uniformly creating, at random, interactions between nodes (i.e., simulating transaction requests, processing transactions, collecting pennies on arbitrary nodes, etc). After many polynomial transactions, the challenger outputs all public information to the adversary and initializes ;
- Query.
The adversary receives the generated public information and may query any of the oracles: , , , , , , , , , , , , , , , , .
- Challenge.
At some point, stops and requests a challenge from . then uniformly and at random selects a node, , from , whose status is set to unlocked, and gives the public information of that node. If no such nodes exist, then selects a node at random and generates the transaction abort request on behalf of the node. It then processes this request on behalf of all honest nodes. The adversary is then given back access to their oracles, but is forbidden from corrupting ;
- Finalize.
The adversary eventually stops and outputs a transaction , a request message , and a response list for any number of nodes in . accepts these inputs and computes the complete Dandelion transaction request protocol on and uses as well as the response of honest nodes to compute . After completing, the protocol returns 1 if the transaction was accepted and finalized, and 0 otherwise.
We say that wins the game if returns 1 and loses otherwise. We say provides -security if, for all adversaries, , the advantage function below is negligible in the security parameter: We note here that the remaining security experiments have identical Setup and Query phases to Definition 4, and we will omit their description from the remaining definitions for space considerations.
Definition 5 (Non-repudiation of Transactions)
. Let κ be a security parameter, be the challenger of this experiment, Σ
be a signature scheme, and H a hash function, and let be an adversary interacting with Dandelion via the queries defined in Section 4.1 within the following security experiment : - Challenge.
At some point, stops and requests a challenge from . then uniformly and at random selects a node, , from . If this node has a pending transaction that has not yet been finalized, the challenger then sends ’s public information, along with . Otherwise, if the node is set to unlocked, generates a random valid transaction request from to another node, , in , and sends the request to all other honest nodes. The challenger then forwards ’s public information and the transaction to . The adversary is then given back access to their oracles, but is forbidden from corrupting ;
- Finalize.
The adversary eventually stops and outputs an abort transaction request and a response list for any number of nodes in . accepts these inputs and computes the complete Dandelion abort transaction request protocol on , and uses as well as the response of honest nodes to compute . After completing, the protocol returns 1 if the abort transaction request was accepted and finalized and 0 otherwise.
We say that wins the game if returns 1 and loses otherwise. We say provides -security if, for all adversaries, , the advantage function below is negligible in the security parameter: Definition 6 (Unforgeable Collection Transactions)
. Let κ be a security parameter, be the challenger of this experiment, Σ
be a signature scheme, and H a hash function, and let be an adversary interacting with Dandelion via the queries defined in Section 4.1 within the following security experiment : - Challenge.
At some point, stops and requests a challenge from . then uniformly and at random selects a node, , from and confirms that has uncollected pennies in their jar. If there are no such pennies, selects another node in that is unlocked, and then generates a valid transaction from to and completes the Dandelion transaction request protocol to add a penny to ’s penny jar. then sends ’s public information to , as well as the transaction ID from the last block in ’s chain, . The adversary is then given back access to their oracles, but is forbidden from corrupting ;
- Finalize.
The adversary eventually stops, then outputs . accepts the message and completes the Dandelion request penny jar protocol and returns 1 if the abort was accepted and finalized, and 0 otherwise.
We say that wins the game if returns 1 and loses otherwise. We say provides -security if, for all adversaries, , the advantage function below is negligible in the security parameter: Definition 7 (Immutability of Chains)
. Let κ be a security parameter, be the challenger of this experiment, Σ
be a signature scheme, and H a hash function, and let be an adversary interacting with Dandelion via the queries defined in Section 4.1 within the following security experiment : - Challenge.
At some point, stops and selects a node with a chain of length . The adversary then submits the node and its chain, , to the challenger, along with a transaction, , and index ;
- Finalize.
The challenger accepts and first confirms the node exists and that is the current state of the user’s chain. If not, returns 0 and has lost the security experiment. Otherwise, then computes the hash and compares it with the from block of ’s chain. If , then returns 1, and 0 otherwise.
We say that wins the game if returns 1 and loses otherwise. We say provides -security if, for all adversaries, , the advantage function below is negligible in the security parameter: 5. Proof of Security
In this section, we prove the security of the Dandelion protocol in our model. We first demonstrate that Dandelion satisfies the three functionality properties before moving on to the security properties and, finally, to double-spending attacks. We begin with correctness.
Theorem 1. Dandelion is correct.
Proof. We first assume that ; this represents receivers still having space available in their penny jar. Next, recall the following: the Dandelion protocol has two request messages, a transaction request, , and an abort request, . In both requests, the sender must provide the following information: , , , , and , . Each request also contains a corresponding “requestTx” or “abortTx”, a signature over the transaction details, and one of the two messages. In either situation, an honest user will include valid details of the transaction, including public account information. Thus, nodes will receive valid inputs, confirm that the transaction details are valid, and verify the signature attached. That is, the nodes will confirm that both accounts exist, that the transaction ID is correct (or update it accordingly), and that the amount is no more than the sender’s balance. Since there is no limit to the number of transactions that the sender can have in their penny jar, the honest request would not be rejected. Thus, Dandelion is correct. □
Theorem 2. The fault-tolerance threshold of Dandelion is .
Proof. Recall that, in order for a transaction or an abort to be finalized, the nodes must first receive a or message, containing a list of responses signed by other nodes in the network. The node confirms the existence of the other nodes and verifies the corresponding response and signature from said node. The request is finalized if over two-thirds of the responses in the request authorized the transaction. Each request is intended to be sent across the network to all active nodes, N. This implies that a transaction requires greater than nodes to authorize the transaction. Now, let f denote the number of nodes an adversary controls. If , then clearly the adversary has complete control over all requests. However, this is also true for , as the adversary is able to act as a tie-breaker to authorize a transaction or to force users to abort transactions as they would be unable to reach a consensus from the network, giving the adversary effective control of the network instead of complete control. Thus, we have that the fault-tolerance threshold is . Alternatively, we have that , where N is the number of active online nodes, and f is the number of nodes the adversary controls. □
Corollary 1. Dandelion is decidable.
Proof. Let N denote the number of active online nodes in the network, and let be an adversary that controls nodes of the network. By Theorem 1, we have that Dandelion is correct, and so all requests that are honestly generated, and well-formed requests will be authorized by honest nodes, provided the receiver has space available in their penny jar. By the assumption that controls fewer nodes than the fault-tolerance threshold, and by Theorem 2, it does not have enough control over the network to solely decide which requests are authorized. Moreover, there does exist a sufficient number of honest nodes to either authorize valid transactions or reject invalid transactions. □
We now establish the security properties of Dandelion through a series of security reductions.
Theorem 3. Let Σ be a signature algorithm that is -secure against quantum-computing-capable PPT adversaries, H be a hash function that is collision-free against quantum-computing-capable PPT adversaries, and be a quantum-computing-capable PPT adversary that controls less than of the Dandelion network. Then, except with negligible probability, the Dandelion protocol satisfies the unforgeability of transaction property.
Proof. To prove the security against forged transaction requests, we will demonstrate that an adversary capable of doing so can be used as an oracle algorithm to win the
-security game (see Definition 2) against
. Let
be a quantum-computing-capable adversary against the
-security of
. We then consider
while it is in the
-security experiment, as described in
Figure 1; that is, it is given a public key
and oracle
programmed with the corresponding secret key
. Now, assume that there exists a quantum-computing-capable PPT adversary
that can win the
-security of Dandelion by outputting a new transaction request
and response list
that results in the transaction being finalized with non-negligible probability.
is able to use to win the -security game as follows. First it picks a suitable collision-free hash function H, initializes the following lists—, generates keys for other nodes, defines the distribution D, and uses as the public key for the N-th node. then simulates the Dandelion protocol for some polynomial amount of time. This includes generating shard IDs for nodes as it adds them to the list of nodes, assigning account balances, arbitrarily deciding on transactions between random users, and keeps track of all user data, both, private and public. It uses its oracle to produce signatures on behalf of the account represented with public key . then simulates and the and acts as the challenger. As generated all but one node’s public key, it is able to answer all but one of the oracle queries may make, including and queries, ensuring does not surpass the fault-tolerance threshold. The only exception is for a query on . Thus, the simulation is perfect to through both the Setup and Query phases until queries on .
We let
E denote the event that
queries
on the account with public key
, and let
and
denote the number of
and
queries made, respectively, by
. During the simulation of
by
, we define an abort and restart condition if
E happens, and we wish to bound the probability of this. First, we know that it must hold that
. Thus, the maximum number of
queries
may make is
. We can then upper-bound the probability of
E by using a hyper-geometric distribution. There are
N total nodes,
accounts are drawn, and there is only a single success that is
. Thus, we have:
Therefore, we have an upper bound of
for
, and
will be forced to restart its simulation with probability
. When
E does not occur, then
will select the node with public key
as the challenge for
, instead of a truly random non-
-controlled node.
continues the simulation until
outputs a
.
then parses the
message and forwards
requestTx,
to their own challenger. By assumption, we have that
can successfully produce a
and response list that will be accepted by the Dandelion network, which includes a valid signature for a node whose secret keys it does not have knowledge of. Thus, if
is accepted by the network, then
will have provided a successful forgery under
. We can then conclude that:
where the factor of 3 is to account for the probability of
querying
on
’s challenge public key. □
Theorem 4. Let Σ be a signature algorithm that is -secure against quantum-computing-capable PPT adversaries, H be a hash function that is collision-free against quantum-computing-capable PPT adversaries, and be a quantum-computing-capable PPT adversary that controls less than of the Dandelion network. Then, except with negligible probability, the Dandelion protocol satisfies the non-repudiation of transactions property.
Proof. We employ a similar strategy to the one used in Theorem 3. We consider a quantum-computing-capable PPT adversary attempting to win the -security experiment on the signature scheme . We also assume that there exists a quantum-computing-capable PPT adversary that is able to win the experiment, as in Definition 5, with non-negligible probability. We will demonstrate a reduction that may employ to use as an oracle algorithm to win their experiment.
We have set up a Dandelion network identically to the way described in Theorem 3. It generates a signing key and account information for N nodes, using its challenge public key, , as part of the network. It also generates the distribution D. It then simulates Dandelion for polynomial time, making arbitrary valid transactions between nodes before stopping and beginning to simulate in the security experiment over the simulated network.
This simulation is perfect up to querying on , and the probability of this occurring is upper-bounded by . If does not perform this query, and eventually requests a challenge, forwards the account information associated with to , along with a challenge transaction (that may or may not need to generate itself). is given back access to its oracles and eventually outputs a message and response list , which parses and forwards to its own challenger abortRequest, . Again, by assumption, is able to win the with non-negligible probability, and so it must have produced a valid signature under a public key for which it does not know the secret key. Thus, if would win the by having the network accept the abort request as legitimate with that output, then will win the experiment.
We conclude that:
where the factor of 3 is to account for the probability of
querying
on
’s challenge public key. □
Theorem 5. Let Σ be a signature algorithm that is -secure against quantum-computing-capable PPT adversaries, H be a hash function that is collision-free against quantum-computing-capable PPT adversaries, and be a quantum-computing-capable PPT adversary that controls less than of the Dandelion network. Then, except with negligible probability, the Dandelion protocol satisfies the unforgeable collection of transactions property.
Proof. We consider a quantum-computing-capable PPT adversary against the -security of . We also assume that there exists another quantum-computing-capable PPT adversary that can win the , as in Definition 5, with non-negligible probability. sets up a simulation of the Dandelion network and includes its challenge public key as one of the nodes in the network. It also generates the distribution D. It runs the simulation for polynomial time before stopping. then begins to simulate in the -security experiment.
Once again, the simulation is perfect until queries on , which occurs with probability bounded above . If does not perform this query, and eventually requests a challenge, forwards the account information associated with to , along with . may need to generate a transaction to add a penny to the corresponding node’s penny jar. is given back oracle access, and eventually outputs a message. then takes this message and submits it to its own challenger. By assumption, is able to win the -security experiment with a non-negligible advantage, and so it must produce a valid signature for a node it does not control. Thus, if had won in the -security experiment, would have submitted a successful forgery in the -security experiment.
We conclude that:
where the factor of 3 is to account for the probability of
querying
on
’s challenge public key. □
Theorem 6. Let Σ be a signature algorithm that is -secure against quantum-computing-capable PPT adversaries, H be a hash function that is collision-free against quantum-computing-capable PPT adversaries, and be a quantum-computing-capable PPT adversary that controls less than of the Dandelion network. Then, except with negligible probability, the Dandelion protocol satisfies the immutability of chains property.
Proof. We once again use a similar approach to those used in the previous Theorems, except we do not consider a quantum-computing-capable PPT adversary,
, against the
-security of
, but against the collision-free security experiment in
Figure 3. We also assume that there exists a quantum-computing-capable PPT adversary,
, that can win
-security experiment in Definition 7.
As before,
simulates the Dandelion network, but this time it generates all nodes’ signing keys and distributions
D. This means that there is no
query that the adversary can make that will cause
to restart the simulation. As a result,
can perfectly simulate the
-security experiment by using its own hash oracle to answer hash queries, and answer all other queries itself. Eventually,
submits a node
, its chain
, an index
i, and transaction
to
.
then parses the input and does the following:
searches
’s chain for block
i,
, and the transaction information from block
for the transaction:
It then submits the following messages to its own oracle—
, and
. By assumption,
wins the real
-security experiment with non-negligible probability by producing a collision between
and the hash value used in the next block. We can, then, conclude that:
Thus, if has successfully produced a collision, then will also have submitted a collision as well. □
We now, finally, cover the double-spend attack.
Theorem 7. Malicious parties cannot double-spend in Dandelion.
Proof. Let denote a quantum-computing-capable PPT adversary that controls less than of the Dandelion network, be the balance of a single account that tries to double-spend from, and and denote the two transactions attempting to double-spend.
Then, without loss of generality, if attempts to collect authorizations for first, it sends the corresponding (valid) transaction request . Any honest nodes that receive the request will set to and, thus, will not authorize the transaction request for . Likewise, any honest nodes that receive first will set to and, thus, will not authorize the transaction request .
Thus, will have partitioned the network into two sets, and , based on which request the node received first. In order for both transactions to be authorized, and successfully double-spend, it must be that . However, and so only one of where or 2. Consequently, cannot authorize both transaction simultaneously. □