diff options
author | Johnson Lau <jl2012@xbt.hk> | 2018-11-23 04:52:54 +0800 |
---|---|---|
committer | bitcoindev <bitcoindev@gnusha.org> | 2018-11-22 20:53:12 +0000 |
commit | db21de85c051b78f945204ff398166e05e43dcda (patch) | |
tree | 5609500d9b89086f7949444367c58307ac889be0 | |
parent | 75646925c54e6cb032ba635fe9e4f3b86138a5e1 (diff) | |
download | pi-bitcoindev-db21de85c051b78f945204ff398166e05e43dcda.tar.gz pi-bitcoindev-db21de85c051b78f945204ff398166e05e43dcda.zip |
Re: [bitcoin-dev] Safer sighashes and more granular SIGHASH_NOINPUT
-rw-r--r-- | 18/a1ec088ed509ac4cc5a07caff4182175a9f059 | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/18/a1ec088ed509ac4cc5a07caff4182175a9f059 b/18/a1ec088ed509ac4cc5a07caff4182175a9f059 new file mode 100644 index 000000000..9967c0bcf --- /dev/null +++ b/18/a1ec088ed509ac4cc5a07caff4182175a9f059 @@ -0,0 +1,155 @@ +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 2F0EB8CC + for <bitcoin-dev@lists.linuxfoundation.org>; + Thu, 22 Nov 2018 20:53:12 +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 1FD295E2 + for <bitcoin-dev@lists.linuxfoundation.org>; + Thu, 22 Nov 2018 20:53:10 +0000 (UTC) +ARC-Seal: i=1; a=rsa-sha256; t=1542919982; cv=none; d=zoho.com; s=zohoarc; + b=kIY4eXeXK3v7vURU+9K70aHIZPNDRNKb3vctT7z68aSRCBoG63YM6pguXP48YHM1UZxt+tM2lslPrIVyZuzm9RpzOh5YxCd+7i3rJAB/lI2SmNGZiY/A/Wk9BnScX/qFK66P6mBxiDZZlw8gWqQnOFVNCvqfob26OBQjmEA2+2w= +ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; + s=zohoarc; t=1542919982; + h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To:ARC-Authentication-Results; + bh=WlyM59OEDkYeLF0U7REYULF0wMMjicwpGDBFVTc1+ys=; + b=APdhqeUfZqOUWdERebGyFWgCuqELrhlB7pdcbyOr8AMWP6An905KKFPd0kRWsMiUshEaDmuPwPA+JdnIpLfhw1ey83qXQPCIFDeeLFJru6yWDjii6bfGWmkJPdGt+U+r7RZrTEvJRNetHhT677aloW9/d7FYsxXIqSQ7FvV1OJM= +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 1542919979271609.3178364483915; + Thu, 22 Nov 2018 12:52:59 -0800 (PST) +Content-Type: text/plain; + charset=utf-8 +Mime-Version: 1.0 (Mac OS X Mail 12.0 \(3445.100.39\)) +From: Johnson Lau <jl2012@xbt.hk> +In-Reply-To: <CAMZUoKkhrLKOaquP1_M9GwuKT1u7d+GoyW6tcK-t2uv+5VRfyA@mail.gmail.com> +Date: Fri, 23 Nov 2018 04:52:54 +0800 +Content-Transfer-Encoding: quoted-printable +Message-Id: <8CD6C248-9ADF-4324-B4E3-DE41A1ED49A9@xbt.hk> +References: <CAPg+sBhuPG-2GXc+Bp0yv5ywry2fk56LPLT4AY0Kcs+YEoz4FA@mail.gmail.com> + <CAMZUoK==Bdn73Lc=swgf2F5_mqE84TR1GRBFhrFkn7kab4jBaw@mail.gmail.com> + <64A86A3A-4633-4BE2-AE09-30BD136BCC2D@xbt.hk> + <CAMZUoKkhrLKOaquP1_M9GwuKT1u7d+GoyW6tcK-t2uv+5VRfyA@mail.gmail.com> +To: Russell O'Connor <roconnor@blockstream.io> +X-Mailer: Apple Mail (2.3445.100.39) +X-ZohoMailClient: External +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,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 +Cc: bitcoin-dev <bitcoin-dev@lists.linuxfoundation.org> +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 20:53:12 -0000 + +Assuming a script size of 128 bytes (including SHA256 padding), 2^20 = +scripts is 134MB. Double it to 268MB for the merkle branch hashes. With = +roughly 100MB/s, this should take 2.5s (or 42min for 30 levels). = +However, memory use is not considered. + +>each call to this operation effectively takes O(script-size) time +I=E2=80=99m not sure if this is correct. Actually, = +CTransactionSignatureSerializer() scans every script for = +OP_CODESEPARATOR. Scripts with and without OP_CODESEPARATOR should take = +exactly the same O(script-size) time (see = +https://github.com/bitcoin/bitcoin/pull/14786) +Also, this is no longer a concern under segwit (BIP143), which = +CTransactionSignatureSerializer() is not used. Actually, = +OP_CODESEPARATOR under segwit is way simpler than the proposed OP_MASK. = +If one finds OP_MASK acceptable, there should be no reason to reject = +OP_CODESEPARATOR. + +>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,=E2=80=A6=E2=80=A6... +If I have to choose among OP_CODESEPARATOR and =E2=80=9Cflow operator = +counting=E2=80=9D, I=E2=80=99d rather choose OP_CODESEPARATOR. At least = +we don=E2=80=99t need to add more lines to the consensus code, just for = +something that is mostly archivable with MAST. + + +> On 23 Nov 2018, at 12:23 AM, Russell O'Connor = +<roconnor@blockstream.io> wrote: +>=20 +> I see, so your suggestion is that a sequence of OP_IF ... OP_ENDIF can = +be replaced by a Merklized Script tree of that depth in practice. +>=20 +> I'm concerned that at script creation time it takes exponential time = +to complete a Merkle root of depth 'n'. Can anyone provide benchmarks = +or estimates of how long it takes to compute a Merkle root of a full = +tree of various depths on typical consumer hardware? I would guess = +things stop becoming practical at a depth of 20-30. +>=20 +> On Thu, Nov 22, 2018 at 9:28 AM Johnson Lau <jl2012@xbt.hk> wrote: +> 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. +>=20 +>=20 +>> 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> 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 +>=20 + + + |