@@ -2,49 +2,45 @@ Partially Blind Atomic Swap Using Adaptor Signatures
22===========================
33
44In 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 Alice as a tumbler service provider engages in
6+ a partially blind atomic swap with the users Bob and Carol, the tumbler would not
7+ be able to determine if a swapped output belongs to Bob or Carol (assuming the
8+ transaction amounts are identical or confidential). This property is very
9+ similar to [ TumbleBit] ( https://eprint.iacr.org/2016/575.pdf ) but in the form of
10+ a [ scriptlessscript] ( https://github.com/apoelstra/scriptless-scripts/blob/master/md/atomic-swap.md )
1211and therefore purely in the elliptic curve discrete logarithm setting.
1312
1413The 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 ) ).
14+ adaptor signature is not chosen uniformly at random by the server. Instead, the user
15+ computes ` T = t*G ` where ` t ` is a [ blind Schnorr signature] ( https://blog.cryptographyengineering.com/a-note-on-blind-signature-schemes/ )
16+ of the tumbler over a transaction spending the funding transaction without knowing
17+ ` t ` (similar to [ Discreet Log Contracts] ( https://adiabat.github.io/dlc.pdf ) ).
2018
2119Protocol description
2220---
23- Assume Alice has a permanent public key ` A = a*G ` , ephemeral pubkey `A1 = A +
21+ Assume the tumbler has a permanent public key ` A = a*G ` , ephemeral pubkey `A1 = A +
2422h* 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.
23+ has a secret key known only to the tumbler and doesn't have to be derived from ` A ` .
24+ Bob has two pubkeys ` B1 = b1*G ` and ` B2 = b2*G ` and ` H ` is a cryptographic hash
25+ function. Public key aggregation in "2-of-2" scripts is achieved with [ MuSig] ( https://eprint.iacr.org/2018/068.pdf )
26+ and the signature scheme is adapted from [ Bellare-Neven] ( https://cseweb.ucsd.edu/~mihir/papers/multisignatures-ccs.pdf ) .
27+ The partially blind atomic swap protocol with Alice as tumbler and Bob as a user
28+ works as follows.
3329
34301 . Setup
3531
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 ` .
32+ * Bob anonymously asks the tumbler to put coins into a key aggregated output
33+ O1 with public key ` P1 = H(A1,B1,A1)*A1 + H(A1,B1,B1)*B1 ` .
3834 * 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
35+ H(A2,B2,B2)* B2`. As usual, before sending coins tumbler and Bob agree on
4036 timelocked refund transactions in case one party disappears.
41372 . Blind signing
4238
4339 Bob creates a transaction ` tx_B ` spending O1. Then Bob creates an auxiliary
4440 point ` T = t*G ` where ` t ` is a Schnorr signature over ` tx_B ` in the
4541 following way:
4642
47- * Bob asks Alice for nonce ` Ra = ka*G `
43+ * Bob asks the tumbler for nonce ` Ra = ka*G `
4844 * Bob creates nonce ` Rb = kb*G `
4945 * Bob computes
5046 * the combined nonce ` R = Ra+Rb `
@@ -55,21 +51,21 @@ follows.
5551 * the challenge ` c' ` for ` A1 ` as part of ` P1 ` : ` c' = c1*H(A1,B1,A1) `
5652 * the blinded challenge ` c = c'+beta `
5753 * 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
54+ * Bob sends ` c ` to the tumbler
55+ * The tumbler replies with an adaptor signature over ` tx_A ` spending ` O2 `
56+ with auxiliary point ` T = t*G, t = ka + c*a ` where ` a ` is the discrete
6157 logarithm of permanent key ` A ` .
62583 . Swap
6359
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
60+ * Bob gives the tumbler his contribution to the signature over ` tx_A ` .
61+ * The tumbler adds Bob's contribution to her own signature and uses it to take
6662 her coins out of O2.
6763 * Due to previously receiving an adaptor signature Bob learns ` t ` from step (2).
68644 . Unblinding
6965
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 ` .
66+ * Bob unblinds the tumbler 's blind signature ` t ` as ` t' = t + alpha + c'*h ` where
67+ ` c' ` is the unblinded challenge ` h ` is the tweak for ` A1 ` . This results in a
68+ regular signature ` (R', t') ` of the tumbler (` A1 ` ) over ` tx_B ` .
7369 * Bob adds his contribution to ` t' ` completing `(R', s), s = t' + kb +
7470 c1* H(A1,B1,B1)* b1` which is a valid signature over ` tx_B` spending O1:
7571 ```
@@ -84,17 +80,17 @@ follows.
8480 +------------+ (R', s) +------------+
8581 | O1 +----------->| ...|
8682 +------------+ +------------+
87- Alice 's setup tx tx_B
83+ the tumbler 's setup tx tx_B
8884
8985 +------------+ +------------+
9086 | O2 +----------->| ...|
9187 +------------+ +------------+
9288 Bob's setup tx tx_A
9389 ```
9490
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.
91+ As a result, the tumbler can not link Bob's original coins and his new coins.
92+ From the tumbler 's perspective `tx_B` could have been just as well the result
93+ of a swap with someone else.
9894
9995Blind Schnorr signatures suffer from a vulnerability known as "parallel attack"
10096([Security of Blind Discrete Log Signatures Against Interactive Attacks, C. P.
@@ -109,20 +105,20 @@ challenge.
109105A simpler scheme that would be broken by Aggregated Signatures
110106---
111107Note 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)`.
108+ messages. Therefore, the tumbler must only use fresh ephemeral keys `A1` when
109+ creating outputs. This complicates the protocol because at the same time the
110+ tumbler must not be able to determine for which exact input she signs. As a
111+ result, It's Bob's job to apply tweak `h` to convert a signature of `A` to `A1`.
112+
113+ A simpler protocol where the tumbler uses `A` instead of `A1` is broken by
114+ aggregated signatures because it allows spending multiple inputs with a single
115+ signature. If Bob creates many funding txs with the tumbler , he can create a
116+ tx spending all of them, and prepares a message for the tumbler to sign which is
117+ her part of the aggregate signature of all the inputs. The tumbler just dumbly
118+ signs any blinded message, so can't decide if it's an aggregated sig or not. For
119+ example Bob may send the tumbler a challenge for an aggregate signature covering
120+ output 1 with pubkeys `L1 = {A, B1}` and output 2 with pubkeys `L2 = {A, B2}` as
121+ `c'=H(P1, 0, R', tx_B)*H(L1,A) + H(P2, 1, R', tx_B)*H(L2,A)`.
126122
127123Similarly, the [SIGHASH_SINGLE
128124bug](https://underhandedcrypto.com/2016/08/17/the-2016-backdoored-cryptocurrency-contest-winner/)
0 commit comments