summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZmnSCPxj <ZmnSCPxj@protonmail.com>2019-06-06 00:09:28 +0000
committerbitcoindev <bitcoindev@gnusha.org>2019-06-06 00:09:34 +0000
commitd799eca43e32dd6978bf1e7680b17f0118b15738 (patch)
tree6cd8093198a0f8492bb3651346f0b5ab315af6ad
parentca1bd9ca6bdf98a8826bb6e8a77487de9690b140 (diff)
downloadpi-bitcoindev-d799eca43e32dd6978bf1e7680b17f0118b15738.tar.gz
pi-bitcoindev-d799eca43e32dd6978bf1e7680b17f0118b15738.zip
Re: [bitcoin-dev] Formalizing Blind Statechains as a minimalistic blind signing server
-rw-r--r--ae/fc0e43d76b511d6c696cc2e4f77c26719d93af146
1 files changed, 146 insertions, 0 deletions
diff --git a/ae/fc0e43d76b511d6c696cc2e4f77c26719d93af b/ae/fc0e43d76b511d6c696cc2e4f77c26719d93af
new file mode 100644
index 000000000..7ac13f9d7
--- /dev/null
+++ b/ae/fc0e43d76b511d6c696cc2e4f77c26719d93af
@@ -0,0 +1,146 @@
+Return-Path: <ZmnSCPxj@protonmail.com>
+Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
+ [172.17.192.35])
+ by mail.linuxfoundation.org (Postfix) with ESMTPS id BAA18CAE
+ for <bitcoin-dev@lists.linuxfoundation.org>;
+ Thu, 6 Jun 2019 00:09:34 +0000 (UTC)
+X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6
+Received: from mail-40135.protonmail.ch (mail-40135.protonmail.ch
+ [185.70.40.135])
+ by smtp1.linuxfoundation.org (Postfix) with ESMTPS id BBCDA711
+ for <bitcoin-dev@lists.linuxfoundation.org>;
+ Thu, 6 Jun 2019 00:09:33 +0000 (UTC)
+Date: Thu, 06 Jun 2019 00:09:28 +0000
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
+ s=default; t=1559779771;
+ bh=aRDeJ4pIktwFveeKhMTnkDw5WK39Q3UokC5gY9E5aos=;
+ h=Date:To:From:Reply-To:Subject:In-Reply-To:References:Feedback-ID:
+ From;
+ b=v4sbaeGkTbpoIR12naiVxduhSXjRZch7iMNMTKpg2Q06DIbgRaXOvn1qfgqNDKRq3
+ JFnBL7hzlCMEIZUEiPmqiyK+2lMZnIEwUDsEcF3aGHP76FDBbIqS9k/kN/bt2SyrWp
+ wja9CsBqup9pqjsh2mX5pZkxYDNSsZY+458n0Zlc=
+To: Ruben Somsen <rsomsen@gmail.com>,
+ Bitcoin Protocol Discussion <bitcoin-dev@lists.linuxfoundation.org>
+From: ZmnSCPxj <ZmnSCPxj@protonmail.com>
+Reply-To: ZmnSCPxj <ZmnSCPxj@protonmail.com>
+Message-ID: <8XXMxGjO1b4bM90Khn3tl63lPEBVJ0at9iJa1gZrZbz7NMaA7ANITVbHOJkctvJlxDUwR6H6dhG34Ko8phlu4_h_GcSXvyuYzPyW4ukEdMY=@protonmail.com>
+In-Reply-To: <CAPv7Tjb11yRix4ts76Rqz08yj=SOA1LBzq5E7gkxcrS26Sp=Ng@mail.gmail.com>
+References: <CAPv7Tjb11yRix4ts76Rqz08yj=SOA1LBzq5E7gkxcrS26Sp=Ng@mail.gmail.com>
+Feedback-ID: el4j0RWPRERue64lIQeq9Y2FP-mdB86tFqjmrJyEPR9VAtMovPEo9tvgA0CrTsSHJeeyPXqnoAu6DN-R04uJUg==:Ext:ProtonMail
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: quoted-printable
+X-Spam-Status: No, score=-2.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,
+ DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, FROM_LOCAL_NOVOWEL,
+ RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1
+X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
+ smtp1.linux-foundation.org
+X-Mailman-Approved-At: Thu, 06 Jun 2019 06:54:47 +0000
+Subject: Re: [bitcoin-dev] Formalizing Blind Statechains as a minimalistic
+ blind signing server
+X-BeenThere: bitcoin-dev@lists.linuxfoundation.org
+X-Mailman-Version: 2.1.12
+Precedence: list
+List-Id: Bitcoin Protocol Discussion <bitcoin-dev.lists.linuxfoundation.org>
+List-Unsubscribe: <https://lists.linuxfoundation.org/mailman/options/bitcoin-dev>,
+ <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=unsubscribe>
+List-Archive: <http://lists.linuxfoundation.org/pipermail/bitcoin-dev/>
+List-Post: <mailto:bitcoin-dev@lists.linuxfoundation.org>
+List-Help: <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=help>
+List-Subscribe: <https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev>,
+ <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=subscribe>
+X-List-Received-Date: Thu, 06 Jun 2019 00:09:34 -0000
+
+Good morning Ruben,
+
+> At
+> Scaling Bitcoin =E2=80=9818 [1] I briefly mentioned utilizing blind signa=
+tures
+> [2] to make the entity unaware of what it's signing. I now think this
+> is the more interesting approach. The functionality can be described
+> fairly elegantly as follows.
+
+I agree.
+I had no interest in Statechains at all before, but now that you have blind=
+ signing servers, this is significantly more interesting.
+
+
+>
+> Blind signing server with two functions users can call:
+>
+> // Start new signature chain
+> (1) requestNewKey(userPubkey) =3D> returns a new serverPubkey and
+> registers it to userPubkey
+>
+> // Extend existing chain
+> (2) requestBlindSig(userSignature, blindedMessage, nextUserPubkey) =3D>
+> returns blindSignature, registers the serverPubkey to nextUserPubkey
+>
+> The resulting output is a public ECC chain (one blindSignature per
+> user, one chain per serverPubkey) of blindly signed messages,
+> requested by users (1, 2, 3, etc.):
+>
+> userSignature1(blindedMessage1, userPubkey2) =3D> blindSignature1
+> userSignature2(blindedMessage2, userPubkey3) =3D> blindSignature2
+> etc.
+>
+> Assuming the server is honest (more on this below), we can use it to
+> transfer over the signing rights of a private key without actually
+> changing the key itself.
+>
+> The functionality is general and therefore suitable for more than just
+> Bitcoin, but let's walk through the primary envisioned use case where
+> we transfer the ownership of a Bitcoin UTXO off-chain. Note that the
+> server is kept completely unaware that it's handling a BTC
+> transaction, since it's signing blindly:
+>
+> - B uses function (1) with userPubkey =3D B to request serverPubkey A
+> - B then generates transitory key X, and creates a single MuSig key AX
+> (key X is called =E2=80=9Ctransitory=E2=80=9D because its private key=
+ will later be passed on)
+>
+> - B prepares tx1: 1BTC to AX (he doesn't send it yet)
+> - B creates tx2: an eltoo tx [3] that assigns the 1BTC back to B (off-c=
+hain)
+
+Of note, is that a Decker-Russell-Osuntokun construction ("eltoo") is not *=
+strictly* required.
+We can still make use of the Decker-Wattenhofer construction instead.
+
+The core of Decker-Wattenhofer is a sequence of decrementing-`nSequence` up=
+date systems.
+Number of maximum updates is limited by the starting `nSequence`, however i=
+f we put an update system inside an update system, we can "reset" the `nSeq=
+uence` of the inner update system by updating the outer update system.
+We can chain this concept further and add more update systems nested inside=
+ update systems to gain more leverage from the maximum relative wait time.
+
+As we expect fewer updates are needed for statechains than e.g. actual Ligh=
+tning channels (your given CoinSwap protocol is "only" two updates, for ins=
+tance) this is usually a good tradeoff,
+
+It is thus possible to use statechains in case `SIGHASH_ANYPREVOUT` is too =
+controversial to get into Bitcoin, provided Schnorr (definitely uncontrover=
+sial) does get into Bitcoin.
+
+> A and B can collude to take the money from C, but since all instances
+> of userSignature and blindSignature are published openly, cheating is
+> publicly detectable (e.g. the server signed two messages from B
+> instead of one).
+
+This still admits the possibility of an exit scam once a few "big enough" s=
+waps are in position to be stolen, trading off earned reputation for cold-s=
+tored cash.
+
+>
+> Trust can be distributed by turning the server into a multisig
+> threshold key, so serverPubkey A becomes e.g. 8-of-12 multisig. This
+> means security can be on par with federated sidechains [5], and is
+> similar to how ZmnSCPxj replaced the escrow key with a federation in
+> =E2=80=9CSmart Contracts Unchained=E2=80=9D [6].
+
+This makes me happy.
+
+Regards,
+ZmnSCPxj
+