Skip to content

Route Blinding (Feature 24/25)#765

Merged
t-bast merged 3 commits intomasterfrom
route-blinding
Mar 28, 2023
Merged

Route Blinding (Feature 24/25)#765
t-bast merged 3 commits intomasterfrom
route-blinding

Conversation

@t-bast
Copy link
Collaborator

@t-bast t-bast commented Apr 6, 2020

Route blinding allows a recipient to provide a blinded route to potential payers. Each node_id in the route is tweaked, and dummy hops may be included.

This is an alternative to rendezvous to preserve recipient anonymity.
It has a different set of trade-offs: onions are re-usable, but the privacy guarantees are a bit weaker and require more work (e.g. when handling errors).

The main areas I'd like reviewers to focus on at first are:

  • the crypto itself, and whether we're missing an abstraction (it's really a kind of reverse sphinx) or a simpler way to do this
  • whether we can live with some update_add_htlc that have a different length than other update_add_htlc (which kind of gives away the blinded path if you're watching the network traffic)
  • error management: how do we ensure errors don't leak the blinded path? Obfuscation + delayed responses may do the trick, but is it enough (and is it necessary)?

The attack scenarios that reviewers should focus on include (but are not limited to):

  • can attackers figure out the identity of the recipient, and if so, with what kind of attack and resources?
  • note that attackers can do any kind of message tampering, delaying or dropping if they're intermediate nodes

@ariard

This comment was marked as abuse.

@t-bast
Copy link
Collaborator Author

t-bast commented Apr 28, 2020

"To require a new invoice, announce me a another channel utxo or you don't have more than X invoices for one channel utxo registered"

That's an interesting idea, it would force payers to have some skin in the game (multiple channels). It's worth exploring!

@t-bast t-bast marked this pull request as ready for review April 28, 2020 13:49
@t-bast t-bast marked this pull request as draft April 28, 2020 13:49
Copy link
Collaborator

@cdecker cdecker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice proposal, just found some minor things that could be clarified and some markup :-)

Copy link

@ariard ariard left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Achieved a new round, I think we should have a better model around recipient anonymity and attacker capabilities before to move forward.

I'm still skeptical about delegating relay parameters (cltv, fees) to an untrusted sender. We should assume such a a pair is a unique fingerprint across the network due to node relay policy heterogeneity. And sender sounds to be able to freely probe this "identifier" as you can screw up an onion path after this probed point.

@t-bast
Copy link
Collaborator Author

t-bast commented Nov 16, 2020

@ariard @cdecker thanks for the early reviews, I marked many comments as resolved to make it more readable for newcomers, feel free to unresolve if you think it's useful.

@rustyrussell
Copy link
Collaborator

Needs (trivial?) rebase BTW, due to conflict.

t-bast added 2 commits January 9, 2023 08:25
Route blinding allows a recipient to provide a blinded route to
potential payers. Each node_id in the route is tweaked, and dummy
hops may be included.

This is an alternative to rendezvous to preserve recipient anonymity.
It has a different set of trade-offs: onions are re-usable, but the
privacy guarantees are a bit weaker and require more work (e.g. when
handling payment fees and errors).
Add specification requirements for creating and using blinded routes.
This commit contains the low-level details of the route blinding scheme,
decoupled from how it can be used by high-level components such as onion
messages or payments.
@t-bast
Copy link
Collaborator Author

t-bast commented Jan 9, 2023

Rebased.

@t-bast
Copy link
Collaborator Author

t-bast commented Jan 31, 2023

We have successfully completed interop tests between eclair and cln, so this PR is getting ready to be merged! I have rebased it and squashed the last commits, please have a (hopefully) last look at it @rustyrussell and we'll be able to integrate it. It's been a while since we last integrated such a big change to the specification, I'm excited 😄

Copy link
Collaborator

@rustyrussell rustyrussell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three final wording suggestions. Otherwise looks good!

Add specification requirements for using route blinding to make payments
while preserving recipient anonymity. Implementers must ensure they
understand all those requirements, there are subtle attacks that could let
malicious senders deanonymize the route if incompletely implemented.
@t-bast
Copy link
Collaborator Author

t-bast commented Mar 28, 2023

Merging this pull request as discussed during yesterday's spec meeting.
Many thanks to everyone involved in the review and implementation!

@t-bast t-bast merged commit c4c5a8e into master Mar 28, 2023
@t-bast t-bast deleted the route-blinding branch March 28, 2023 06:44
ddustin pushed a commit to ddustin/lightning that referenced this pull request Apr 11, 2023
This is as of commit aed5518a80aade56218da87f92e0a39963b660cf

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ddustin pushed a commit to ddustin/lightning that referenced this pull request May 12, 2023
This is as of commit aed5518a80aade56218da87f92e0a39963b660cf

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.