Good morning Gleb and Antoine, This is certainly interesting!
Quick question: if I am a routing node and receive a valid stake certificate, can I reuse this stake certificate on my own outgoing payments? It seems to me that the proof-of-stake-certificate should also somehow integrate a detail of the current payment (such as payment hash/point) so it cannot be reused by routing nodes for their own outgoing payments. For example, looking only at your naive privacy-broken proposal, the signature must use a `sign-to-contract` where the `R` in the signature is actually `R' + h(R' | payment_hash)` with the `R'` also revealed. Regards, ZmnSCPxj > Hello list, > > In this post, we explore a different approach to channel jamming mitigation. > We won’t talk about the background here, for the problem description as well > as some proposed solutions (mainly upfront payment schemes), see [1]. > > We’re suggesting using UTXO ownership proofs (a.k.a. Stake Certificates) to > solve this problem. Previously, these proofs were only used in the Lightning > Network at channel announcement time to prevent malicious actors from > announcing channels they don’t control. One can think of it as a “fidelity > bond” (as a scarce resource) as a requirement for sending HTLCs. > > We start by overviewing issues with other solutions, and then present a > naive, privacy-broken Stake Certificates. Then we examine designing a > privacy-preserving version, evaluating them. At the end, we talk about > non-trivial design decisions and open questions. > > ## Issues with other proposals > > We find unsatisfying that upfront payment schemes come at a cost of new fees > (forward and/or backward), thus inflating payment cost for *any* payment. > In the future, the upfront base fee might even make “micropayments” > economically infeasible by exceeding the value they transfer. Thus, a good > solution should not inflate payment cost while still requiring “burning” a > scarce resource (so that the attack is not free). > > Another issue with upfront payments is a circular trust dependency. Ideally, > we shouldn’t introduce anything less trust-minimized than the Lightning > Network itself. > Upfront payment schemes are not like that, because they in one way or another > rely on the honest behavior of route participants. > > We believe Stake Certificates we are going to introduce are satisfactory in > both of these directions: they don’t inflate payment costs for honest users > and don’t require trust. The main disadvantage of Stake Certificates seems to > be the novel cryptography required. > See more details in the “Evaluation” section. > > ## Channel Ownership Proofs as Routing Credit Balance > > Let’s say Alice wants to relay an HTLC to Carol through Bob. Per the Stake > Certificates scheme, she has to commit to a particular channel UTXO by > embedding an ownership proof in the onion packet while sending an HTLC to Bob. > > Bob then unwraps the onion and verifies: > 1) the channel identifier is pointing unambiguously to an on-chain UTXO; > 2) the ownership proof (e.g., a signature) is valid against the previously > disclosed UTXO witness script. > > If all those checks succeed, Bob should see if Alice hasn’t exceeded her > credit balance. In case she hasn’t, Bob has to “decrement Alice’s credit > balance” and relay the HTLC to Carol. > Decrementing credit balance unconditionally of packet success or failure > bounds liquidity abuse by malicious HTLC senders. > Since there is no credit assigned initially, “decrementing the credit > balance” means just remembering that “Alice spent X out of Y of the credit > she received for her Stake Certificates”. > > Unfortunately, this naive protocol is a privacy nightmare, because routing > nodes can now easily assign every HTLC they forward to the sender’s UTXO. > > Let’s first define the terms here one more time, and then proceed to the > non-naive, private Stake Certificates. > > - Stake Certificate. Either means a solution we’re proposing or the primitive > it is based on, namely proof of UTXO ownership. As we will argue later, it > actually makes sense to use proof of LN channel UTXO ownership specifically > rather than any funds ownership. > - Stake Certificate value. An amount of the corresponding UTXO or a ballpark > this amount provably belongs to. > - Credit balance. When Alice provides a routing node Bob with a Stake > Certificate, Bob should increase Alice’s routing credit balance. Alice is > then limited in her payments by this balance, and this rule is enforced by > routing nodes to prevent free channel jamming in the network. Note that > ideally “Alice’s credit balance“ should be virtual and only known to Alice, > while routing nodes should only observe per-UTXO credit balance. We currently > assume that each routing node keeps track of per-UTXO credit balance > separately, see “Design decisions” for more details. > - Stake-to-credit function defines how much credit balance is given per a > Stake Certificate of a given value. This function is a policy of a routing > node, and it should be announced. > - Credit-to-value-transferred function defines how much value a sender can > transfer along a given channel considering how much credit they might claim. > The function may also consider different factors (e.g., the available > capacity of a channel being used) to provide extra robustness. > > ## Privacy-preserving Stake Certificates > > The presented scheme could preserve privacy if it relied on zero-knowledge > proofs of UTXO ownership by avoiding pointing to a particular UTXO. > More specifically, the verifier should be able to check that: > a) The staked UTXO is an element of the current UTXO set > b) The prover knows the witness script committed by the UTXO witness program > c) The prover knows a valid witness for the witness script > d) The staked UTXO was not used to produce a different Stake Certificate > which is currently in use as well. > > The verifier should also have a way to see a Stake Certificate value to > properly account for the credit. This can be achieved by restricting the UTXO > set being proved upon to only those UTXOs with a specific range of values: “I > will prove that I own a UTXO among all UTXOs between 0.5 BTC and 1 BTC”. > > Unfortunately, steps (b) and (c) require zero-knowledge protocols for general > statements, which are more experimental primitives than most of the stuff we > have in Bitcoin protocols, > although we assume it’s feasible to consider them for non-consensus stuff. > > ## Evaluation > > Stake Certificates, upfront payment schemes, and other potential solutions > (given a particular configuration) may be compared along the following axis: > 1) Economic feasibility > 1a) What is the cost of overcoming the protection for an attacker? Likely a > non-linear function: sats_spent =f(channels_to_jam, […]) > 1b) How does this solution limit honest users? > 2) How sophisticated is this solution in terms of integration and making good > UX? > 3) How complex is this solution in terms of protocol design/implementation? > > When it comes to (1a), both Stake Certificates and upfront payments are > probably equal, in a way that they’re just best-effort ideas to increase the > attack cost. Unfortunately, we currently don’t know how to design something > as economically powerful as PoW in Bitcoin [3]. > This aspect can be properly evaluated by applying these ideas to different > hypothetical kinds of LN in a simulation and observing the resulting > trade-off between (1a) and (1b) considering different attack strategies. > > In the previous sections of this post, we have argued that Stake Certificates > may provide a much better (1b) for the cost of (3) because it relies on > zero-knowledge. > When it comes to (2), the design of Stake Certificates may vary in terms of > UX burden, from completely automatic to requiring custom actions with private > keys from users. > > Some of these trade-offs along with other interesting questions are discussed > in the following section. > > ## Design decisions and questions > > #### Should the credit spending be gossipped across the entire network, or > should only the routing nodes involved in the payment know? > > Economically, these two approaches are likely to be equivalent, and it’s just > a matter of stake-to-credit ratio. > However, announcing credit spending to the network results in a privacy leak. > It also imposes bandwidth and CPU overhead on the routing nodes. > > #### Which zero-knowledge system should be used for Stake Certificates? > > Choosing a ZK system boils down to picking the right trade-offs of proving > and verifying time, and assumptions. As we mentioned previously, we would > need proving general statements. > At the same time, we need something cheap in both proving and verification, > because Lightning is supposed to be fast. > At the same time, the setup probably doesn’t matter, because proofs are > supposed to be verified only by one participant, a routing node this proof is > generated for. > Perhaps we can also pick any cryptographic assumptions we want since this > stuff is not mission-critical and can be easily updated if someone breaks a > cryptographic assumption and we observe an attack. > > #### Should we allow holding *any* Bitcoins (not just LN channels) for Stake > Certificates? > > This idea might make sense if we’re worried that some LN users might want to > send more payments than they can afford per their credit. However, we believe > that allowing any UTXO would give an attacker more opportunities to use their > cold funds for this attack, or even have a secondary market where holders > sell their proofs (they have nothing to loose). > Instead, we should a) design the credit-to-stake-functions better; b) > encourage users send payments across different routing nodes (since credits > are not tracked globally) [4]. > > #### What’s the best credit-to-value-transferred function? > > We reckon that this function should be not just linear to provide maximum > security against malicious channel jammers. For example, we can charge more > credit for the last 20% of the capacity of the *channel used for routing*. > Alternatively, we could discourage making too many payments from the same > UTXO within a short period of time by charging more credit in this case. > > #### What about the interactivity and lifetime of Stake Certificates? > > Interactive proofs mean that they are constructed on demand of a routing > node, non-interactive means constructed by a payment sender ahead of time. > Both interactivity and lifetime have something to do with the ease of > producing proof and accessing keys. > We will omit the details of the trade-off we consider, but it remains an open > question. > > #### If Stake Certificates are valid for N blocks after proof generation, > does it mean that if the UTXO is spent during those N blocks, new proof can > be generated from the same coins without invalidating the old proof? > > Yes, but an attacker would, first of all, have to pay an on-chain fee for > this. If we’re still worried about this problem, there are workaround ideas. > For example, we could have epochs of 100 blocks (every epoch starts at > #XYZXYZ00 block). If at the start of an epoch, a channel wasn’t in the UTXO > set, it provides very little credit. > Alternatively, we could expand the zero-knowledge part to proving that the > coins were not yet spent. > > #### Should spending a UTXO reveal all Stake Certificates generated from it? > > This would also solve the problem in the previous question, but it would mean > a retrospective privacy leak again. To avoid a privacy leak, we should > prevent this. > > #### What if malicious Sybil *routing* nodes failing payments causing other > honest routing nodes to reduce the credit of an honest payment sender? > > Both Stake Certificates and upfront payment schemes suffer from malicious > routing nodes failing the payments and “wasting” the sender’s credit or fees. > This problem even applies out of the channel jamming context, when > considering payment failure rate. > This problem can be addressed by reducing the reputation of faulty links and > routing nodes on the payment sender node. When payment routing becomes a > for-profit activity, this would encourage routing nodes to sanitize their > links. > The mitigation can be even stronger by using “provable blaming” introduced in > [2]. > > ## Conclusion > > We propose Stake Certificates, a new solution to channel jamming. Perhaps, it > might not be the best near-term solution due to the complexity, but the zero > satoshi overhead for honest payments is an appealing argument to switch to it > in the future. > This proposal also illustrates how stake-based protocols can solve Sybil > challenges in the Bitcoin ecosystem. Since this might be useful in other > contexts (Sybil-resistance of many kinds, proof-of-ownership), discussing > Stake Certificates is even more useful. > The next step is a discussion of Stake Certificates. If the community finds > it interesting, then we should discuss the design questions mentioned above, > and choose a cryptosystem. > > Cheers, > Gleb Naumenko and Antoine Riard > > ——— > > References and footnotes: > 1. https://github.com/t-bast/lightning-docs/blob/master/spam-prevention.md > 2. > https://lists.linuxfoundation.org/pipermail/lightning-dev/2015-August/000135.html > 3. We don’t actually suggest PoW to solve these issues, because a) the > trade-off between honest user cost and attacker cost is misaligned due to > specialized hardware and b) smartphones would die too fast if they have to > compute PoW; PoW is just an unreachable example of system robustness due to > well-aligned game theory. > 4. Secondary markets are still possible even if we restrict acceptable proofs > to only LN channels, but supply would be much smaller, and markets would work > much worse for an attacker. _______________________________________________ Lightning-dev mailing list Lightning-dev@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev