@@ -2,49 +2,44 @@ Partially Blind Atomic Swap Using Adaptor Signatures
2
2
===========================
3
3
4
4
In this scheme one of the participants of the swap does not learn which coins
5
- are being swapped. For example if Alice engages in a partially blind atomic
6
- swap with Bob and Carol, she would not be able to determine if a swapped output
7
- belongs to Bob or Carol (assuming the transaction amounts are identical or
8
- confidential). This property is very similar to
9
- [ TumbleBit] ( https://eprint.iacr.org/2016/575.pdf ) but in the form of a
10
- [ scriptless
11
- script] ( https://github.com/apoelstra/scriptless-scripts/blob/master/md/atomic-swap.md )
5
+ are being swapped. For example if service provider engages in a partially blind
6
+ atomic swap with the users Bob and Carol, the server would not be able to
7
+ determine if a swapped output belongs to Bob or Carol (assuming the transaction
8
+ amounts are identical or confidential). This property is very similar to
9
+ [ TumbleBit] ( https://eprint.iacr.org/2016/575.pdf ) but in the form of a [ scriptlessscript] ( https://github.com/apoelstra/scriptless-scripts/blob/master/md/atomic-swap.md )
12
10
and therefore purely in the elliptic curve discrete logarithm setting.
13
11
14
12
The basic idea is that the discrete logarithm of the auxiliary point ` T ` in the
15
- adaptor signature is not chosen uniformly at random by Alice. Instead, Bob
16
- computes ` T = t*G ` where ` t ` is a [ blind Schnorr
17
- signature] ( https://blog.cryptographyengineering.com/a-note-on-blind-signature-schemes/ )
18
- of Alice over a transaction spending the funding transaction without knowing ` t `
19
- (similar to [ Discreet Log Contracts] ( https://adiabat.github.io/dlc.pdf ) ).
13
+ adaptor signature is not chosen uniformly at random by the server. Instead, the user
14
+ computes ` T = t*G ` where ` t ` is a [ blind Schnorr signature] ( https://blog.cryptographyengineering.com/a-note-on-blind-signature-schemes/ )
15
+ of the server over a transaction spending the funding transaction without knowing
16
+ ` t ` (similar to [ Discreet Log Contracts] ( https://adiabat.github.io/dlc.pdf ) ).
20
17
21
18
Protocol description
22
19
---
23
- Assume Alice has a permanent public key ` A = a*G ` , ephemeral pubkey `A1 = A +
20
+ Assume the server has a permanent public key ` A = a*G ` , ephemeral pubkey `A1 = A +
24
21
h* G` where ` h` is a tweak that is known to Bob, and ephemeral pubkey ` A2` which
25
- has a secret key known only to Alice and doesn't have to be derived from ` A ` .
26
- Bob has two pubkeys ` B1 = b1*G ` and ` B2 = b2*G `
27
- and ` H ` is a cryptographic hash function. Public key aggregation in "2-of-2"
28
- scripts is achieved with [ MuSig] ( https://eprint.iacr.org/2018/068.pdf ) and the
29
- signature scheme is adapted from
30
- [ Bellare-Neven] ( https://cseweb.ucsd.edu/~mihir/papers/multisignatures-ccs.pdf ) .
31
- The partially blind atomic swap protocol where Alice acts as a tumbler works as
32
- follows.
22
+ has a secret key known only to the server and doesn't have to be derived from ` A ` .
23
+ Bob has two pubkeys ` B1 = b1*G ` and ` B2 = b2*G ` and ` H ` is a cryptographic hash
24
+ function. Public key aggregation in "2-of-2" scripts is achieved with [ MuSig] ( https://eprint.iacr.org/2018/068.pdf )
25
+ and the signature scheme is adapted from [ Bellare-Neven] ( https://cseweb.ucsd.edu/~mihir/papers/multisignatures-ccs.pdf ) .
26
+ The partially blind atomic swap protocol with the server and Bob as a user
27
+ works as follows.
33
28
34
29
1 . Setup
35
30
36
- * Bob anonymously asks Alice to put coins into a key aggregated output O1
37
- with public key ` P1 = H(A1,B1,A1)*A1 + H(A1,B1,B1)*B1 ` .
31
+ * Bob anonymously asks the server to put coins into a key aggregated output
32
+ O1 with public key ` P1 = H(A1,B1,A1)*A1 + H(A1,B1,B1)*B1 ` .
38
33
* Bob puts coins into a key aggregated output O2 with `P2 = H(A2,B2,A2)* A2 +
39
- H(A2,B2,B2)* B2`. As usual, before sending coins Alice and Bob agree on
34
+ H(A2,B2,B2)* B2`. As usual, before sending coins server and Bob agree on
40
35
timelocked refund transactions in case one party disappears.
41
36
2 . Blind signing
42
37
43
38
Bob creates a transaction ` tx_B ` spending O1. Then Bob creates an auxiliary
44
39
point ` T = t*G ` where ` t ` is a Schnorr signature over ` tx_B ` in the
45
40
following way:
46
41
47
- * Bob asks Alice for nonce ` Ra = ka*G `
42
+ * Bob asks the server for nonce ` Ra = ka*G `
48
43
* Bob creates nonce ` Rb = kb*G `
49
44
* Bob computes
50
45
* the combined nonce ` R = Ra+Rb `
@@ -55,21 +50,21 @@ follows.
55
50
* the challenge ` c' ` for ` A1 ` as part of ` P1 ` : ` c' = c1*H(A1,B1,A1) `
56
51
* the blinded challenge ` c = c'+beta `
57
52
* and the blinded signature of A times ` G ` : ` T = R + c*A `
58
- * Bob sends ` c ` to Alice
59
- * Alice replies with an adaptor signature over ` tx_A ` spending ` O2 ` with
60
- auxiliary point ` T = t*G, t = ka + c*a ` where ` a ` is the discrete
53
+ * Bob sends ` c ` to the server
54
+ * The server replies with an adaptor signature over ` tx_A ` spending ` O2 `
55
+ with auxiliary point ` T = t*G, t = ka + c*a ` where ` a ` is the discrete
61
56
logarithm of permanent key ` A ` .
62
57
3 . Swap
63
58
64
- * Bob gives Alice his contribution to the signature over ` tx_A ` .
65
- * Alice adds Bob's contribution to her own signature and uses it to take
59
+ * Bob gives the server his contribution to the signature over ` tx_A ` .
60
+ * The server adds Bob's contribution to her own signature and uses it to take
66
61
her coins out of O2.
67
62
* Due to previously receiving an adaptor signature Bob learns ` t ` from step (2).
68
63
4 . Unblinding
69
64
70
- * Bob unblinds Alice 's blind signature ` t ` as ` t' = t + alpha + c'*h ` where
71
- c' is the unblinded challenge ` h ` is the tweak for ` A1 ` . This results in a
72
- regular signature ` (R', t') ` of Alice (` A1 ` ) over ` tx_B ` .
65
+ * Bob unblinds the server 's blind signature ` t ` as ` t' = t + alpha + c'*h ` where
66
+ ` c' ` is the unblinded challenge ` h ` is the tweak for ` A1 ` . This results in a
67
+ regular signature ` (R', t') ` of the server (` A1 ` ) over ` tx_B ` .
73
68
* Bob adds his contribution to ` t' ` completing `(R', s), s = t' + kb +
74
69
c1* H(A1,B1,B1)* b1` which is a valid signature over ` tx_B` spending O1:
75
70
```
@@ -84,17 +79,17 @@ follows.
84
79
+------------+ (R', s) +------------+
85
80
| O1 +----------->| ...|
86
81
+------------+ +------------+
87
- Alice 's setup tx tx_B
82
+ the server 's setup tx tx_B
88
83
89
84
+------------+ +------------+
90
85
| O2 +----------->| ...|
91
86
+------------+ +------------+
92
87
Bob's setup tx tx_A
93
88
```
94
89
95
- As a result, Alice can not link Bob's original coins and his new coins. From
96
- Alice 's perspective `tx_B` could have been just as well the result of a swap
97
- with someone else.
90
+ As a result, the server can not link Bob's original coins and his new coins.
91
+ From the server 's perspective `tx_B` could have been just as well the result
92
+ of a swap with someone else.
98
93
99
94
Blind Schnorr signatures suffer from a vulnerability known as "parallel attack"
100
95
([Security of Blind Discrete Log Signatures Against Interactive Attacks, C. P.
@@ -109,20 +104,20 @@ challenge.
109
104
A simpler scheme that would be broken by Aggregated Signatures
110
105
---
111
106
Note that Bob can get a signature of A over anything including arbitrary
112
- messages. Therefore, Alice must only use fresh ephemeral keys `A1` when
113
- creating outputs. This complicates the protocol because at the same time Alice
114
- must not be able to determine for which exact input she signs. As a result,
115
- It's Bob's job to apply tweak `h` to convert a signature of `A` to `A1`.
116
-
117
- A simpler protocol where Alice uses `A` instead of `A1` is broken by aggregated
118
- signatures because it allows spending multiple inputs with a single signature.
119
- If Bob creates many funding txs with Alice , he can create a tx spending all of
120
- them, and prepares a message for Alice to sign which is her part of the
121
- aggregate signature of all the inputs. Alice just dumbly signs any blinded
122
- message, so can't decide if it's an aggregated sig or not. For example Bob may
123
- send Alice a challenge for an aggregate signature covering output 1 with
124
- pubkeys `L1 = {A, B1}` and output 2 with pubkeys `L2 = {A, B2}` as `c'=H(P1, 0,
125
- R', tx_B)*H(L1,A) + H(P2, 1, R', tx_B)*H(L2,A)`.
107
+ messages. Therefore, the server must only use fresh ephemeral keys `A1` when
108
+ creating outputs. This complicates the protocol because at the same time the
109
+ server must not be able to determine for which exact input she signs. As a
110
+ result, It's Bob's job to apply tweak `h` to convert a signature of `A` to `A1`.
111
+
112
+ A simpler protocol where the server uses `A` instead of `A1` is broken by
113
+ aggregated signatures because it allows spending multiple inputs with a single
114
+ signature. If Bob creates many funding txs with the server , he can create a
115
+ tx spending all of them, and prepares a message for the server to sign which is
116
+ her part of the aggregate signature of all the inputs. The server just dumbly
117
+ signs any blinded message, so can't decide if it's an aggregated sig or not. For
118
+ example Bob may send the server a challenge for an aggregate signature covering
119
+ output 1 with pubkeys `L1 = {A, B1}` and output 2 with pubkeys `L2 = {A, B2}` as
120
+ `c'=H(P1, 0, R', tx_B)*H(L1,A) + H(P2, 1, R', tx_B)*H(L2,A)`.
126
121
127
122
Similarly, the [SIGHASH_SINGLE
128
123
bug](https://underhandedcrypto.com/2016/08/17/the-2016-backdoored-cryptocurrency-contest-winner/)
0 commit comments