3
EDIT: This question is not specific to Bitcoin. It's applicable to any other crypto currency that is interested in using a different signature scheme than Bitcoin or the QT reference client. One reason for this is to reduce complexity (and bugs) in the protocol.
My understanding of malleable transactions in Bitcoin is that two different values are supported for "S" when a signature is validated.
The solution for this is to ensure that S is less than the following
X9ECParameters ecParams = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp256k1");
HALF_CURVE_ORDER = ecParams.N.ShiftRight(1);
Given the plethora of signature mechanisms available to crypto-currency, what algorithms or signature approaches are not vulnerable to Malleable Transactions?
e.g. What if...
- A different curve was selected instead of secp256k1?
- A different signature mechanism was chosen?
- A different approach entirely, such as a blind HMAC was used to sign transactions?
I'm interested in answers that describe both solutions that are broken, and those that would prevent malleable transactions from ever occurring.
My goal is to flush out an algorithm that produces consistent results with minimal complexity for implementors. (in other words, even Mt Gox would get it right)
possible duplicate of Is this "transaction malleability" really an issue?
– John T – 2014-02-11T23:56:37.970@JacobTorba Not a duplicate, I'm asking if a signature format exists that doesn't have this issue. I'm aware of all the answers of that question, and none relate. Perhaps you can help me clarify? – goodguys_activate – 2014-02-12T00:32:51.887
you're right! This is a legitimate question with a tricky title, my bad. – John T – 2014-02-12T00:35:39.513
I think you are having trouble with the way hashing works, it's not so that sha256 hashing causes the multiple values, it's all about what is fed into the hash function. Could you be talking about avoiding collisions?) Theres an extremely small chance for those.
– John T – 2014-02-12T00:38:02.020My focus is specifically on two public keys that can generate the same signature. The change in signature results in a different sha256 hash (of course). I'm focused primarily on the S value of the signature being less than half of the curve order as defined by this e.g.
HALF_CURVE_ORDER = ecParams.N.ShiftRight(1);– goodguys_activate – 2014-02-12T00:57:19.653