Good morning Jim,
>> It seems to me that adding an entire new attack vector in order to only
>> *mitigate* (not eliminate!) another attack vector is not a good enough
>> trade-off. In particular the new attack seems *easier* to perform. The
>> current attack where I annoy the other side until it closes has the risk
>> that the other side may have a high tolerance for annoyance, and decide not
>> to close the channel unilaterally anyway. But in a symmetric-delay world, I
>> do not have to wait for the other side to get annoyed: I just trigger the
>> lockup period immediately in the active attack.
>
> I don't see the two attacks in the symmetric case as any different from one
> another. In 1.1, you force a unilateral close by becoming unresponsive and
> forcing the other side to eventually broadcast the commitment. In this case
> you waste the other party's channel balance for the full time of the delay
> PLUS the additional time they wait around to determine if you are ever going
> to come online. In 1.2, you force a unilateral close by broadcasting
> yourself. This is actually a weaker attack because the other party only has
> to wait for the delay period and there is no uncertainty about when they will
> get access to funds. So basically, I see no reason for an attacker to ever
> choose 1.2 over 1.1.
You make a good point there, I understand.
>>> For example, in the case where the side unilaterally closing the channel
>>> has zero balance, the other side gets no delay and symmetry as measured by
>>> (coins locked) * (duration of lock) equals zero on both sides. When the
>>> side closing the channel has at least 50% of the balance, both sides must
>>> wait the full delay. Thoughts?
>>
>> So on channel setup where I am the funder to a 1BTC channel I make to
>> Daniel:
>>
>> * Daniel holds a commitment transaction with: ZmnSCPxj=1BTC+no delay,
>> Daniel=0BTC+no delay
>> * I hold a commitment transaction with: ZmnSCPxj=1BTC+no delay,
>> Daniel=0BTC+no delay
>
> I rather like Daniel's suggestion to scale the delay in proportion to the
> time-money lost by the broadcasting party. Essentially, the delay just serves
> as punishment, so we should ensure that the punishment delivered is no
> greater than the time-value lost by the initiator of the unilateral close.
>
> This example is not quite right: the commitment delays do not need to be the
> same in both commitment transaction with this scaling strategy. So the delay
> for the local output is ALWAYS the to_local_delay, as it is in the BOLT 3
> spec today. When assigning the delay on the remote output, however, instead
> of using 0 as BOLT specifies now or to_remote_delay as I originally proposed,
> a better rule might be min(to_remote_delay, to_local_delay * to_local_value /
> to_remote_value). So the delay is never worse than what the opposite side
> would get by broadcasting themself, but is the punishment duration is reduced
> if the attacker broadcasts a commitment transaction in which the balance of
> funds is skewed towards the victim's end of the channel. However, I'm not
> sure how much this matters because as I argued above, an attacker should
> always prefer to become unresponsive rather than broadcast the commitment
> themself.
This seems complicated, so perhaps just make delays equal as in the original
proposal. Of course, each side has its own `to_self_delay` that currently is
applied to the other side. It seems best the rule:
If I impose a specific `to_self_delay`, that applies to your commitment
transaction, but for both branches of that.
My commitment transaction will have delays from your `to_self_delay` setting.
Regards,
ZmnSCPxj
_______________________________________________
Lightning-dev mailing list
Lightning-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev