-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

As discussed in the 11 Aug 2016 IRC meeting 
(https://bitcoincore.org/en/meetings/2016/08/11/#softfork-to-make-low-s-required),
 a new BIP with implementation is prepared to make low S value signature as a 
consensus rule:

https://github.com/jl2012/bips/blob/biplows/bip-lows.mediawiki

https://github.com/bitcoin/bitcoin/pull/8514

The softfork is proposed to be deployed with segwit (BIP141), likely in v0.13.1

The text is copied below

  BIP: ?
  Title: Low S values signatures
  Author: Pieter Wuille <pieter.wui...@gmail.com>
          Johnson Lau <jl2...@xbt.hk>
  Status: Draft
  Type: Standards Track
  Created: 2016-08-16

Abstract

This document specifies proposed changes to the Bitcoin transaction validity 
rules to restrict signatures to using low S values.

Motivation

ECDSA signatures are inherently malleable as taking the negative of the number 
S inside (modulo the curve order) does not invalidate it. This is a nuisance 
malleability vector as any relay node on the network may transform the 
signature, with no access to the relevant private keys required. For 
non-segregated witness transactions, this malleability will change the txid and 
invalidate any unconfirmed child transactions. Although the txid of segregated 
witness (BIP141) transactions is not third party malleable, this malleability 
vector will change the wtxid and may reduce the efficiency of compact block 
relay (BIP152).

To fix this malleability, we require that the S value inside ECDSA signatures 
is at most the curve order divided by 2 (essentially restricting this value to 
its lower half range). The value S in signatures must be between 0x1 and 
0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0 
(inclusive). If S is too high, simply replace it by S' = 0xFFFFFFFF FFFFFFFF 
FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 - S.

Specification

Every signature passed to OP_CHECKSIG, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG, or 
OP_CHECKMULTISIGVERIFY, to which ECDSA verification is applied, MUST use a S 
value between 0x1 and 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D 
DFE92F46 681B20A0 (inclusive) with strict DER encoding (see BIP66).

These operators all perform ECDSA verifications on pubkey/signature pairs, 
iterating from the top of the stack backwards. For each such verification, if 
the signature does not pass the IsLowDERSignature check, the entire script 
evaluates to false immediately. If the signature is valid DER with low S value, 
but does not pass ECDSA verification, opcode execution continues as it used to, 
causing opcode execution to stop and push false on the stack (but not 
immediately fail the script) in some cases, which potentially skips further 
signatures (and thus does not subject them to IsLowDERSignature).

Deployment

This BIP will be deployed by "version bits" BIP9 using the same parameters for 
BIP141 and BIP143, with the name "segwit" and using bit 1.

For Bitcoin mainnet, the BIP9 starttime will be midnight TBD UTC (Epoch 
timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD).

For Bitcoin testnet, the BIP9 starttime will be midnight 1 May 2016 UTC (Epoch 
timestamp 1462060800) and BIP9 timeout will be midnight 1 May 2017 UTC (Epoch 
timestamp 1493596800).

Compatibility

The reference client has produced compatible signatures since v0.9.0, and the 
requirement to have low S value signatures has been enforced as a relay policy 
by the reference client since v0.11.1. As of August 2016, very few transactions 
violating the requirement are being added to the chain. In addition, every 
non-compliant signature can trivially be converted into a compliant one, so 
there is no loss of functionality by this requirement. This proposal has the 
added benefit of reducing transaction malleability.

Implementation

An implementation for the reference client is available at 
https://github.com/bitcoin/bitcoin/pull/8514

Acknowledgements

This document is extracted from the previous BIP62 proposal which had input 
from various people.

Copyright

This document is placed in the public domain.

-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - https://gpgtools.org

iQGcBAEBCgAGBQJXsuZLAAoJEO6eVSA0viTSBkIL/RxdKYhfQUcXhWf3wPzJ2rSo
bhxoGOoswf5Npx1ybKvvTRf51IirgO9JkEl8hYfzLr9KSbfTxCKlr2Z/S+snFGDi
Q0bvVPcg8uoK1iBMrFmIqCi/0pW3/lnnpgqt+O5Jup+DfK4S1QbSVNff8uP7ZK9x
NcgXekAbad57JfZ7gki9aERRj4THliTFBlaKkWo4CP+AwCgtKP6BwWvJxnfGpCc5
Esb/7aFvB0OwTWC7bPdS/XSCChxEdK9n5U3LaUH5o1oMQQhaGVHqeR76Wuf2oDvY
YsXX0b1gttpSJhz00ifOhMf7PhFzQuNyI6gM6ee7kMXwHMlrmyvROQh009cUzKeZ
5m7QKiondMsCoyz0zYXncF/MlwoyI7y1M5pQEqF/CHI5yZGu2K3EeDQebEHDzIrd
RyI6j5BbjLQ4w+geswaxzRSJfkoaKTHdh8g49HL7Q7FUj551jExKA8ZM50SbfeRi
T4fAN8BTXWVpfHkeDYdM2fesaqmFuN9wg18/xwTWJA==
=GgxI
-----END PGP SIGNATURE-----
_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev

Reply via email to