Return-Path: <jl2012@xbt.hk> Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 98C37CF7 for <bitcoin-dev@lists.linuxfoundation.org>; Thu, 22 Nov 2018 14:28:47 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from sender-of-o53.zoho.com (sender-of-o53.zoho.com [135.84.80.218]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id D5EF7771 for <bitcoin-dev@lists.linuxfoundation.org>; Thu, 22 Nov 2018 14:28:46 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1542896924; cv=none; d=zoho.com; s=zohoarc; b=MIB5SmmZCG1JN6bHqtfG3QwTdrBsvanTbF9wc2htnIZlB4w97b4WsLPOaaKahKrLfQDpq7gQe+0b4vVl4mt6mlNyb6zKC2MgfyZEXMoAHVgioKAiiPdyhOAuX9rv1usKU5G2XkM11aTpaOtfF9NgwqX00SsHwRHjNRYVrhgD8Vo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1542896924; h=Content-Type:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To:ARC-Authentication-Results; bh=31yLSRAwcm9dfl+YUFy99h1A1fsQe/1LEoIt+0Psmyw=; b=ZGiyPIRQpR3Czl2h16URwP4i9cvgyemX2C80AWavug0LggWCGM8xxwAc6DeJF8ncyp//CvumfYkUf1ITktDso+QJHrmcZoAr04hXmC9lrmFaWM9Hc1aOJdaTivjMCvCuftps77aOmIjS9J5U4vmoYAJvNcqbnvRI3b9GiutQIlk= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass header.i=xbt.hk; spf=pass smtp.mailfrom=jl2012@xbt.hk; dmarc=pass header.from=<jl2012@xbt.hk> header.from=<jl2012@xbt.hk> Received: from [10.8.0.105] (n218103234118.netvigator.com [218.103.234.118]) by mx.zohomail.com with SMTPS id 1542896921764887.5171324645357; Thu, 22 Nov 2018 06:28:41 -0800 (PST) From: Johnson Lau <jl2012@xbt.hk> Message-Id: <64A86A3A-4633-4BE2-AE09-30BD136BCC2D@xbt.hk> Content-Type: multipart/alternative; boundary="Apple-Mail=_2A279FC6-858D-4FAB-9E82-126628860469" Mime-Version: 1.0 (Mac OS X Mail 12.0 \(3445.100.39\)) Date: Thu, 22 Nov 2018 22:28:35 +0800 In-Reply-To: <CAMZUoK==Bdn73Lc=swgf2F5_mqE84TR1GRBFhrFkn7kab4jBaw@mail.gmail.com> To: Russell O'Connor <roconnor@blockstream.io>, bitcoin-dev <bitcoin-dev@lists.linuxfoundation.org> References: <CAPg+sBhuPG-2GXc+Bp0yv5ywry2fk56LPLT4AY0Kcs+YEoz4FA@mail.gmail.com> <CAMZUoK==Bdn73Lc=swgf2F5_mqE84TR1GRBFhrFkn7kab4jBaw@mail.gmail.com> X-Mailer: Apple Mail (2.3445.100.39) X-ZohoMailClient: External X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,HTML_MESSAGE, RCVD_IN_DNSWL_NONE 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: Fri, 23 Nov 2018 04:04:44 +0000 Subject: Re: [bitcoin-dev] Safer sighashes and more granular SIGHASH_NOINPUT 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, 22 Nov 2018 14:28:47 -0000 --Apple-Mail=_2A279FC6-858D-4FAB-9E82-126628860469 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii With MAST in taproot, OP_IF etc become mostly redundant, with worse = privacy. To maximise fungibility, we should encourage people to use = MAST, instead of improve the functionality of OP_IF and further = complicate the protocol. > On 22 Nov 2018, at 1:07 AM, Russell O'Connor via bitcoin-dev = <bitcoin-dev@lists.linuxfoundation.org> wrote: >=20 > On Mon, Nov 19, 2018 at 10:22 PM Pieter Wuille via bitcoin-dev = <bitcoin-dev@lists.linuxfoundation.org = <mailto:bitcoin-dev@lists.linuxfoundation.org>> wrote: > So my question is whether anyone can see ways in which this introduces > redundant flexibility, or misses obvious use cases? >=20 > Hopefully my comment is on-topic for this thread: >=20 > Given that we want to move away from OP_CODESEPARATOR, because each = call to this operation effectively takes O(script-size) time, we need a = replacement for the functionality it currently provides. While perhaps = the original motivation for OP_CODESEPARTOR is surrounded in mystery, it = currently can be used (or perhaps abused) for the task of creating = signature that covers, not only which input is being signed, but which = specific branch within that input Script code is being signed for. >=20 > For example, one can place an OP_CODESEPARATOR within each branch of = an IF block, or by placing an OP_CODESEPARATOR before each OP_CHECKSIG = operation. By doing so, signatures created for one clause cannot be = used as signatures for another clause. Since different clauses in = Bitcoin Script may be enforcing different conditions (such as different = time-locks, hash-locks, etc), it is useful to be able to sign in such a = way that your signature is only valid when the conditions for a = particular branch are satisfied. In complex Scripts, it may not be = practical or possible to use different public keys for every different = clause. (In practice, you will be able to get away with fewer = OP_CODESEPARATORS than one in every IF block). >=20 > One suggestion I heard (I think I heard it from Pieter) to achieve the = above is to add an internal counter that increments on every control = flow operator, OP_IF, OP_NOTIF, OP_ELSE, OP_ENDIF, and have the = signature cover the value of this counter. Equivalently we divide every = Bitcoin Script program into blocks deliminated by these control flow = operator and have the signature cover the index of the block that the = OP_CHECKSIG occurs within. More specifically, we will want a SigHash = flag to enables/disable the signature covering this counter. >=20 > There are many different ways one might go about replacing the = remaining useful behaviour of OP_CODESEPARATOR than the one I gave = above. I would be happy with any solution. > _______________________________________________ > bitcoin-dev mailing list > bitcoin-dev@lists.linuxfoundation.org > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev --Apple-Mail=_2A279FC6-858D-4FAB-9E82-126628860469 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii <html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; = charset=3Dus-ascii"></head><body style=3D"word-wrap: break-word; = -webkit-nbsp-mode: space; line-break: after-white-space;" class=3D"">With = MAST in taproot, OP_IF etc become mostly redundant, with worse privacy. = To maximise fungibility, we should encourage people to use MAST, instead = of improve the functionality of OP_IF and further complicate the = protocol.<div class=3D""><br class=3D""></div><div class=3D""><div><br = class=3D""><blockquote type=3D"cite" class=3D""><div class=3D"">On 22 = Nov 2018, at 1:07 AM, Russell O'Connor via bitcoin-dev <<a = href=3D"mailto:bitcoin-dev@lists.linuxfoundation.org" = class=3D"">bitcoin-dev@lists.linuxfoundation.org</a>> wrote:</div><br = class=3D"Apple-interchange-newline"><div class=3D""><div dir=3D"ltr" = class=3D""><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"">On = Mon, Nov 19, 2018 at 10:22 PM Pieter Wuille via bitcoin-dev <<a = href=3D"mailto:bitcoin-dev@lists.linuxfoundation.org" = class=3D"">bitcoin-dev@lists.linuxfoundation.org</a>> wrote:<br = class=3D""></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 = .8ex;border-left:1px #ccc solid;padding-left:1ex">So my question is = whether anyone can see ways in which this introduces<br class=3D""> redundant flexibility, or misses obvious use cases?<br = class=3D""></blockquote><div class=3D""><br class=3D""></div><div = class=3D"">Hopefully my comment is on-topic for this thread:</div><div = class=3D""><br class=3D""></div><div class=3D"">Given that we want to = move away from OP_CODESEPARATOR, because each call to this operation = effectively takes O(script-size) time, we need a replacement for the = functionality it currently provides. While perhaps the original = motivation for OP_CODESEPARTOR is surrounded in mystery, it currently = can be used (or perhaps abused) for the task of creating signature that = covers, not only which input is being signed, but which specific branch = within that input Script code is being signed for.</div><div = class=3D""><br class=3D""></div><div class=3D"">For example, one can = place an OP_CODESEPARATOR within each branch of an IF block, or by = placing an OP_CODESEPARATOR before each OP_CHECKSIG operation. By = doing so, signatures created for one clause cannot be used as signatures = for another clause. Since different clauses in Bitcoin Script may = be enforcing different conditions (such as different time-locks, = hash-locks, etc), it is useful to be able to sign in such a way that = your signature is only valid when the conditions for a particular branch = are satisfied. In complex Scripts, it may not be practical or = possible to use different public keys for every different clause. (In = practice, you will be able to get away with fewer OP_CODESEPARATORS than = one in every IF block).<br class=3D""></div><div class=3D""><br = class=3D""></div><div class=3D"">One suggestion I heard (I think I heard = it from Pieter) to achieve the above is to add an internal counter that = increments on every control flow operator, OP_IF, OP_NOTIF, OP_ELSE, = OP_ENDIF, and have the signature cover the value of this counter. = Equivalently we divide every Bitcoin Script program into blocks = deliminated by these control flow operator and have the signature cover = the index of the block that the OP_CHECKSIG occurs within. More = specifically, we will want a SigHash flag to enables/disable the = signature covering this counter.<br class=3D""></div><div class=3D""><br = class=3D""></div><div class=3D"">There are many different ways one might = go about replacing the remaining useful behaviour of OP_CODESEPARATOR = than the one I gave above. I would be happy with any solution.<br = class=3D""></div></div></div> _______________________________________________<br class=3D"">bitcoin-dev = mailing list<br class=3D""><a = href=3D"mailto:bitcoin-dev@lists.linuxfoundation.org" = class=3D"">bitcoin-dev@lists.linuxfoundation.org</a><br = class=3D"">https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev<= br class=3D""></div></blockquote></div><br class=3D""></div></body></html>= --Apple-Mail=_2A279FC6-858D-4FAB-9E82-126628860469--