Subject: Re: [bitcoin-dev] V3 Transactions are still vulnerable to significant tx pinning griefing attacks

From: Gloria Zhao <[email-masked]>
Date: Wed, 20 Dec 2023 19:13:22 +0000

Hi Peter,

Thanks for spending time thinking about RBF pinning and v3.

> Enter Mallory. His goal is to grief Alice by forcing her to spend more
money
than she intended...
> ...Thus the total fee of Mallory's package would have
> been 6.6 * 1/2.5 = 2.6x more than Alice's total fee, and to get her
transaction
> mined prior to her deadline, Alice would have had to pay a 2.6x higher
fee than
> expected.

I think this is a good understanding of the goal of Rule #3, but I'm not
sure how you're getting these numbers without specifying the size and fees
of the commitment transaction. We should also quantify the severity of the
"damage" of this pin in a meaningful way; the issue of "Alice may need to
pay to replace descendant(s) she isn't aware of" is just a property of
allowing unconfirmed descendants.

Let's use some concrete numbers with your example. As you describe, we need
80-162sat/vB to get into the next block, and Alice can fund a CPFP with a
152vB CPFP. Let's say the commitment transaction has size N, and pays 0
fees.

The lower number of 80sat/vB describes what Mallory needs to shoot below in
order to "pay nothing" for the attack (i.e. otherwise it's a CPFP and gets
the tx confirmed). Mallory can maximize the cost of replacement according
to Rule #3 by keeping a low feerate while maximizing the size of the tx.

The higher number of 162sat/vB describes the reasonable upper bound of what
Alice should pay to get the transactions confirmed. As in: If Alice pays
exactly 162sat/vB * (N + 152vB) satoshis to get her tx confirmed, nothing
went wrong. She hopes to not pay more than that, but she'll keep
broadcasting higher bumps until it confirms.

The "damage" of the pin can quantified by the extra fees Alice has to pay.

For a v3 transaction, Mallory can attach 1000vB at 80sat/vB. This can
increase the cost of replacement to 80,000sat.
For a non-v3 transaction, Mallory can attach (101KvB - N) before maxing out
the descendant limit.
Rule #4 is pretty negligible here, but since you've already specified
Alice's child as 152vB, she'll need to pay Rule #3 + 152sats for a
replacement.

Let's say N is 1000vB. AFAIK commitment transactions aren't usually smaller
than this:
- Alice is happy to pay 162sat/vB * (1000 + 152vB) = 186,624sat
- In a v3 world, Mallory can make the cost to replace 80sat/vB * (1000vB) +
152 = 80,152sat
    - Mallory doesn't succeed, Alice's CPFP easily pays for the replacement
- In a non-v3 world, Mallory can make the cost to replace 80sat/vB *
(100,000vB) + 152 = 8,000,152sat
    - Mallory does succeed, Alice would need to pay ~7 million sats extra

Let's say N is 10,000vB:
- Alice is happy to pay 162sat/vB * (10,000 + 152vB) = 1,644,624
- In a v3 world, Mallory can make the cost to replace 80sat/vB * (1000vB) +
152 = 80,152sat
    - Mallory doesn't succeed, Alice's CPFP easily pays for the replacement
- In a non-v3 world, Mallory can make the cost to replace 80sat/vB *
(91,000vB) + 152 = 7,280,152sat
    - Mallory does succeed Alice would need to pay ~5 million sats extra

Let's say N is 50,000vB:
- Alice is happy to pay 162sat/vB * (50,000 + 152vB) = 8,124,624
- In a v3 world, Mallory can make the cost to replace 80sat/vB * (1000vB) +
152 = 80,152sat
    - Mallory doesn't succeed, Alice's CPFP easily pays for the replacement
- In a non-v3 world, Mallory can make the cost to replace 80sat/vB *
(51,000vB) + 152 = 4,080,152sat
    - Mallory doesn't succeed, Alice's CPFP easily pays for the replacement
    - The key idea here is that there isn't much room for descendants and
the cost to CPFP is very high

These numbers change if you tweak more variables - the fees paid by the
commitment tx, the feerate range, etc. But the point here is to reduce the
potential "damage" by 100x by restricting the allowed child size.

> If V3 children are restricted to, say, 200vB, the attack is much less
effective
as the ratio of Alice vs Mallory size is so small.

This is exactly the idea; note that we've come from 100KvB to 1000vB.

> Mallory can improve the efficiency of his griefing attack by attacking
multiple
> targets at once. Assuming Mallory uses 1 taproot input and 1 taproot
output for
> his own funds, he can spend 21 ephemeral anchors in a single 1000vB
> transaction.

Note that v3 does not allow more than 1 unconfirmed parent per tx.

Let me know if I've made an arithmetic error, but hopefully the general
idea is clear.

Best,
Gloria

On Wed, Dec 20, 2023 at 5:16 PM Peter Todd via bitcoin-dev <
[email-masked]> wrote:

> V3 transactions(1) is a set of transaction relay policies intended to aim
> L2/contracting protocols, namely Lightning. The main aim of V3
> transactions is
> to solve Rule 3 transaction pinning(2), allowing the use of ephemeral
> anchors(3) that do not contain a signature check; anchor outputs that _do_
> contain a signature check are not vulnerable to pinning attacks, as only
> the
> intended party is able to spend them while unconfirmed.
>
> The main way that V3 transactions aims to mitigate transaction pinning is
> with
> the following rule:
>
>     A V3 transaction that has an unconfirmed V3 ancestor cannot be larger
> than
>     1000 virtual bytes.
>
> Unfortunately, this rule - and thus V3 transactions - is insufficient to
> substantially mitigate transaction pinning attacks.
>
>
> # The Scenario
>
> To understand why, let's consider the following scenario: Alice has a
> Lightning
> channel with Bob, who has become unresponsive. Alice is using a Lightning
> protocol where using V3 commitment transactions with a single OP_TRUE
> ephemeral
> anchor of zero value.  The commitment transaction must be broadcast in a
> package, containing both the commitment transaction, and a transaction
> spending
> the anchor output; regardless of the fee of the commitment transaction,
> this is
> a hard requirement, as the zero-valued output is considered non-standard
> by V3
> rules unless spent in the same package.
>
> To pay for the transaction fee of the commitment transaction, Alice spends
> the
> ephemeral output in a 2 input, 1 output, taproot transaction of 152vB in
> size,
> with sufficient feerate Ra to get the transaction mined in what Alice
> considers to be a reasonable amount of time.
>
>
> # The Attack
>
> Enter Mallory. His goal is to grief Alice by forcing her to spend more
> money
> than she intended, at minimum cost. He also maintains well connected nodes,
> giving him the opportunity to both learn about new transactions, and
> quickly
> broadcast transactions to a large number of nodes at once.
>
> When Mallory learns about Alice's commitment+anchor spend package, he
> signs a
> replacement anchor spend transaction, 1000vB in size, with a lower feerate
> Rm
> such that the total fee of Alice's anchor spend is <= Mallory's anchor
> spend
> (in fact, the total fee can be even less due to BIP-125 RBF Rule #4, but
> for
> sake of a simple argument we'll ignore this). Next, Mallory broadcast's
> that
> package widely, using his well-connected nodes.
>
> Due to Rule #3, Alice's higher feerate transaction package does not replace
> Mallory's lower fee rate, higher absolute fee, transaction package. Alice's
> options are now:
>
> 1. Wait for Mallory's low feerate transaction to be mined (mempool
> expiration
>    does not help here, as Mallory can rebroadcast it indefinitely).
> 2. Hope her transaction got to a miner, and wait for it to get mined.
> 3. Replace it with an even higher fee transaction, spending at least as
> much
>    money as Mallory allocated.
>
> In option #1 and #3, Mallory paid no transaction fees to do the attack.
>
> Unfortunately for Alice, feerates are often quite stable. For example, as I
> write this, the feerate required to get into the next block is 162sat/vB,
> while
> the *lowest* feerate transaction to get mined in the past 24 hours is
> approximately 80sat/vB, a difference of just 2x.
>
> Suppose that in this circumstance Alice needs to get her commitment
> transaction
> mined within 24 hours. If Mallory used a feerate of 1/2.5th that of Alice,
> Mallory's transaction would not have gotten mined in the 24 hour period,
> with a
> reasonable safety margin. Thus the total fee of Mallory's package would
> have
> been 6.6 * 1/2.5 = 2.6x more than Alice's total fee, and to get her
> transaction
> mined prior to her deadline, Alice would have had to pay a 2.6x higher fee
> than
> expected.
>
>
> ## Multi-Party Attack
>
> Mallory can improve the efficiency of his griefing attack by attacking
> multiple
> targets at once. Assuming Mallory uses 1 taproot input and 1 taproot
> output for
> his own funds, he can spend 21 ephemeral anchors in a single 1000vB
> transaction.
>
> Provided that the RBF Rule #4 feerate delta is negligible relative to
> current
> feerates, Mallory can build up the attack against multiple targets by
> broadcasting replacements with slightly higher feerates as needed to add
> and
> remove Alice's.
>
> The cost of the attack to Mallory is estimating fees incorrectly, and
> using a
> sufficiently high feerate that his transaction does in fact get mined. In
> that
> circumstance, if he's attacking multiple targets, it is likely that all his
> transactions would get mined at once. Thus having only a single attack
> transaction reduces that worst case cost. Since Mallory can adding and
> remove
> Alice's, he can still force multiple Alice's to spend funds bumping their
> transactions.
>
>
> # Solutions
>
> ## Replace-by-Feerate
>
> Obviously, this attack does not work if Rule #3 is removed for small
> transactions, allowing Alice's transaction to replace Mallory via
> replace-by-feerate. In the common situation where mempools are deep, this
> is
> arguably miner incentive compatible as other transactions at essentially
> the
> same feerate will simply replace the "space" taken up by the griefing
> transaction.
>
>
> ## Restrict V3 Children Even Further
>
> If V3 children are restricted to, say, 200vB, the attack is much less
> effective
> as the ratio of Alice vs Mallory size is so small. Of course, this has the
> disadvantage of making it more difficult in some cases to find sufficient
> UTXO's to pay for fees, and increasing the number of UTXO's needed to fee
> bump
> large numbers of transactions.
>
>
> # References
>
> 1)
> https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020937.html
> ,
>    "[bitcoin-dev] New transaction policies (nVersion=3) for contracting
> protocols",
>    Gloria Zhao, Sep 23 2022
>
> 2)
> https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki#implementation-details
> ,
>    "The replacement transaction pays an absolute fee of at least the sum
> paid by the original transactions."
>
> 3)
> https://github.com/instagibbs/bips/blob/ephemeral_anchor/bip-ephemeralanchors.mediawiki
>
> --
> https://petertodd.org 'peter'[:-1]@petertodd.org
> _______________________________________________
> bitcoin-dev mailing list
> [email-masked]
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
>