Hi All,

I would like to revisit a topic that has been discussed earlier between
ZmnSCPxj and Christian Decker. [1]

I think it's important to revisit it, because not only does ZmnSCPxj
propose a cool trick, but it can also be used to mitigate certain attacks.
(More on that later)

ZmnSCPxj wrote:

> consider this below graph:
>
>       E<---D--->C<---B
>            ^  /
>            | /
>            |L
>            A
>
> In the above, B requests a route from B->C->D->E.
>
> However, C cannot send to D, since the channel direction is saturated in
favor of D.
>
> Alternately, C can route to D via A instead.  It holds the (encrypted)
route from D to E.  It can take that sub-route and treat it as a partial
route-to-payee under rendez-vous routing, as long as node A supports
rendez-vous routing.
>
> This can allow re-routing or payment splitting over multiple hops.

Christian replied by explaining this is not possible because "with this
scheme it is not possible for C to find an ephemeral key that would end up
identical to the one that D would require to decrypt the onion correctly."

Christian is correct but I think this problem can be solved with a simple
change to the setup. Consider the same graph, but now it's not node A that
supports rendezvous routing but it is node D.

To circumvent the saturated channel D-C, C creates the route C->A->D, where
node D supports rendezvous routing. C can create a sub-route from D to E
and treat it as a partial route-to-payee under rendezvous routing by using
the hop payload found when unwrapping the onion of the original route
B->C->D->E . Because every node in a route is able to create the ephemeral
key for the next node by tweaking it with its own shared secret, C is also
able to create the ephemeral key for D. C passes that ephemeral key into
the payload of the rendezvous node D in the alternate route, signaling to D
it needs to swap out the key. D, upon unwrapping its onion sees that it
needs to swap ephemeral keys, does so, and goes on with the route to E.

Under these changed circumstances I don't think Christian's critique still
holds, but I'd love to hear your feedback.

Now as to why I think this is useful:

1. ZmnSCPxj proposed this as kind of atomic JIT rebalancing. The
rebalancing only happens if the payment happens.
2. It can be used to offload HTLC's to another channel, mitigating channel
jamming.
3. It can be used to mitigate Balance Disclosure Attacks, because an
attacker wouldn't necessarily be sure which channels are used for routing.
I think Rusty calls this "sloppy routing".

Thanks for your attention,


Gijs van Dam

[1]:
https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-November/001573.html
_______________________________________________
Lightning-dev mailing list
Lightning-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev

Reply via email to