Last month I had a discussion about this what a few people. Somebody pointed out that we deployed “HTTPS Everywhere” to improve the privacy of everyone on the web.
My counterpoint at the time was that “HTTPS Everywhere” could be imposed by user-agents and their operators, but there is nothing that would force forwarding nodes to create randomized forwarding times; senders and receivers cannot force forwarding nodes to perform the randomization. This is equivalent to the observation by carla that it is the senders and receivers who have an incentive to randomize, not forwarding nodes.
My counterproposal was:
- Make batching of HTLCs the primitive, not individual
update_add_htlc
s. - Create a new forwarding “receiver-enforced forwarding randomization” protocol:
- New message
you_have_incoming_htlcs
. This is sent if a node wants to eventuallyupdate_add_htlc
one or more HTLCs. The message has no body, and is replayed on reconnection. - New response
gimme_the_incoming_htlcs
. This is sent after receivingyou_have_incoming_htlcs
. - New rules for
update_add_htlc
:- it is an error for a node to send
update_add_htlc
unless it has receivedgimme_the_incoming_htlcs
. (because it is an error, you shoulderror
if you receive anupdate_add_htlc
without having sentgimme_the_incoming_htlcs
first and drop all channels with that peer onchain) - A “batch” of
update_add_htlc
s MUST be sent in response togimme_the_incoming_htlcs
. The batch is ended by acommitment_signed
. After sendingcommitment_signed
, it is once again an error for the node to sendupdate_add_htlc
until it has received a newgimme_the_incoming_htlcs
.
- it is an error for a node to send
- New message
The above adds increased latency to the forwarding protocol, due to the additional you_have_incoming_htlcs
/gimme_the_incoming_htlcs
exchange. A counter to this is that this protocol can be restricted to use only on endpoint receivers (i.e. receivers can use an even feature bit to enforce that this protocol is used in an “HTTPS Everywhere”-style campaign, while forwarders can provide an odd feature bit to indicate to new peers that they support this protocol, and if both of you use the odd feature bit you don’t follow this protocol after all), and pure forwarders can use the original low-latency forwarding protocol with each other.
A receiver can, on receiving a you_have_incoming_htlcs
message, then randomize the delay before sending gimme_the_incoming_htlcs
. This also allows the LSP of the receiver to batch multiple HTLCs to the receiver (e.g. probably helpful to improve throughput for multipath payments, which carla also noted would probably also help privacy in practice).