Skip to content

Commit 518cb06

Browse files
committed
add sender authentication
1 parent 0cd3f84 commit 518cb06

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

Diff for: blip-0002.md

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ The following table contains extension tlv fields for the `payment_onion_payload
8585

8686
| Type | Name | Link |
8787
|-------------|-----------------------------|--------------------------------|
88+
| 83231 | `sender_auth` | [bLIP 11](./blip-0011.md) |
8889
| 7629169 | `podcasting_2_0` | [bLIP 10](./blip-0010.md) |
8990

9091

Diff for: blip-0011.md

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
```
2+
bLIP: 11
3+
Title: Sender authentication
4+
Status: Draft
5+
Author: Joost Jager <[email protected]>
6+
Created: 2022-02-04
7+
License: CC0
8+
```
9+
10+
## Abstract
11+
12+
By default, the lightning protocol protects the sender identity by means of
13+
ephemeral keys and onion routing. There are however use cases that ask for
14+
inclusion of the sender identity with a payment.
15+
16+
This bLIP serves to document a way to authenticate the sender of a payment via a
17+
custom TLV record.
18+
19+
## Copyright
20+
21+
This bLIP is licensed under the CC0 license.
22+
23+
## Specification
24+
25+
Sender:
26+
27+
* MUST include a TLV record keyed by type `83231` with the following TLV value:
28+
* [`33*byte`:`pubkey`]
29+
* [`32*byte`:`hmac`]
30+
31+
`pubkey` is set to the public key of the sender. Note that `pubkey` doesn't
32+
need to be the sender's node public key. It can also be a more general
33+
identity.
34+
35+
`hmac` is calculated over `payment_secret`, using a shared secret as the key.
36+
This shared secret is calculated using Elliptic-curve Diffie-Hellman between
37+
sender private key and receiver public key.
38+
39+
Receiver:
40+
41+
* Derives the shared secret key using Elliptic-curve Diffie-Hellman between
42+
`pubkey` and receiver private key.
43+
* Verifies `hmac` using the shared secret.
44+
* If verification fails, SHOULD error with
45+
`PERM|15 incorrect_or_unknown_payment_details`.
46+
47+
## Motivation
48+
49+
There are many ways to authenticate the sender of a payment in Lightning. This
50+
documentation is an attempt prevent the emergence of too many variants that all
51+
do more or less the same thing.
52+
53+
## Rationale
54+
55+
* The TLV record key is an odd number, meaning that the record is ignored by
56+
receivers that do not support sender authentication. No feature bit is needed.
57+
58+
* The choice for Diffie-Hellman rather than a signature is to preserve the
59+
privacy of the sender as much as possible. Senders are authenticating
60+
themselves to receivers, but receivers cannot prove anything to a third party
61+
because they could have made up the proof themselves.
62+
63+
* `hmac` is calculated over `payment_secret` and not `payment_hash`. With
64+
`payment_hash`, an intermediate node could possibly attempt to pay to the same
65+
hash authenticated with their own identity key.

0 commit comments

Comments
 (0)