From 89a9829ec4703f7d7d69db60d6cd99e66eb2a3de Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Fri, 2 Sep 2016 12:28:34 +0800 Subject: [PATCH 1/2] Add NULLDUMMY softfork BIP --- bip-nulldummy.mediawiki | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 bip-nulldummy.mediawiki diff --git a/bip-nulldummy.mediawiki b/bip-nulldummy.mediawiki new file mode 100644 index 00000000..802fb21d --- /dev/null +++ b/bip-nulldummy.mediawiki @@ -0,0 +1,55 @@ +
+  BIP: ?
+  Title: Dealing with dummy stack element malleability
+  Author: Johnson Lau 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-09-02
+
+ +==Abstract== + +This document specifies proposed changes to the Bitcoin transaction validity rules to fix the malleability of extra stack element for OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY. + + +==Motivation== + +Signature malleability refers to the ability of any relay node on the network to transform the signature in transactions, with no access to the relevant private keys required. For non-segregated witness transactions, signature malleability will change the txid and invalidate any unconfirmed child transactions. Although the txid of segregated witness ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) transactions is not third party malleable, this malleability vector will change the wtxid and may reduce the efficiency of compact block relay ([https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP152]). + +A design flaw in OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY makes them consuming an extra stack element ("dummy element") after signature validation. The dummy element is not inspected in any manner, and could be replaced by any value without invalidating the script. This document specifies a new rule to fix this signature malleability. + + +==Specification== + +To fix the dummy element malleability, a new consensus rule ("NULLDUMMY") is deployed to require that the dummy element MUST be the empty byte array. Anything else makes the script evaluate to false immediately. The NULLDUMMY rule applies to OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY in pre-segregated scripts, and also pay-to-witness-script-hash scripts described in BIP141. + + +==Deployment== + +This BIP will be deployed by "version bits" [https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP9] using the same parameters for BIP141 and BIP143, with the name "segwit" and using bit 1. + +For Bitcoin mainnet, the BIP9 starttime is midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout is midnight TBD UTC (Epoch timestamp TBD). + +For Bitcoin testnet, the BIP9 starttime is midnight 1 May 2016 UTC (Epoch timestamp 1462060800) and BIP9 timeout is midnight 1 May 2017 UTC (Epoch timestamp 1493596800). + + +==Compatibility== + +The reference client has produced compatible signatures from the beginning, and the NULLDUMMY rule has been enforced as relay policy by the reference client since v0.10.0. There has been no transactions violating the requirement being added to the chain since at least August 2015. + +For all scriptPubKey types in actual use, non-compliant signatures can trivially be converted into compliant ones, so there is no loss of functionality by this requirement. Users MUST pay extra attention to this new rule when designing exotic scripts. + + +==Implementation== + +An implementation for the reference client is available at https://github.com/bitcoin/bitcoin/pull/8636 + + +==Acknowledgements== + +Peter Todd is the original author of NULLDUMMY. This document is extracted from the previous [https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki BIP62] proposal, which was composed by Pieter Wuille and had input from various people. + + +==Copyright== + +This document is placed in the public domain. From 36496946860d71d4460437572e6c4c780b125cad Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 2 Sep 2016 22:09:46 +0000 Subject: [PATCH 2/2] Assign BIP 147: Dealing with dummy stack element malleability --- README.mediawiki | 6 ++++++ bip-nulldummy.mediawiki => bip-0147.mediawiki | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) rename bip-nulldummy.mediawiki => bip-0147.mediawiki (99%) diff --git a/README.mediawiki b/README.mediawiki index 8b48af15..813d6b3b 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -518,6 +518,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0147.mediawiki|147]] +| Dealing with dummy stack element malleability +| Johnson Lau +| Standard +| Draft +|- | [[bip-0150.mediawiki|150]] | Peer Authentication | Jonas Schnelli diff --git a/bip-nulldummy.mediawiki b/bip-0147.mediawiki similarity index 99% rename from bip-nulldummy.mediawiki rename to bip-0147.mediawiki index 802fb21d..8b6fe1ab 100644 --- a/bip-nulldummy.mediawiki +++ b/bip-0147.mediawiki @@ -1,5 +1,5 @@
-  BIP: ?
+  BIP: 147
   Title: Dealing with dummy stack element malleability
   Author: Johnson Lau 
   Status: Draft