Bitcoin developer Gregory Maxwell writes the next on Reddit:
There’s a design flaw within the Bitcoin protocol the place its potential for a 3rd social gathering to take a sound transaction of yours and mutate it in a means which leaves it legitimate and functionally equivalent however with a unique transaction ID. This vastly complicates writing appropriate pockets software program, and it may be used abusively to invalidate lengthy chains of unconfirmed transactions that rely on the non-mutant transaction (since transactions refer to one another by txid).
This concern arises from a number of sources, one among them being OpenSSL’s willingness to simply accept and make sense of signatures with invalid encodings. A traditional ECDSA signature encodes two giant integers, the encoding isn’t fixed size— if there are main zeros you’re purported to drop them.
It’s simple to jot down software program that assumes the signature might be a continuing size after which depart additional main zeros in them.
It is a very fascinating cautionary story, and is especially necessary as a result of conditions like these are a part of the explanation why we’ve made sure design selections in our growth philosophy. Particularly, the difficulty is that this: many individuals proceed to convey up the purpose that we’re in lots of locations unnecessarily reinventing the wheel, creating our personal serialization format, RLP, as an alternative of utilizing the present protobuf and we’re constructing an application-specific scripting language as an alternative of “simply utilizing Lua”. It is a very legitimate concern; not-invented-here syndrome is a commonly-used pejorative, so doing such in-house growth does require justification.
And the cautionary story I quoted above gives exactly the proper instance of the justification that I’ll present. Exterior applied sciences, whether or not protobuf, Lua or OpenSSL, are superb, and have years of growth behind them, however in lots of circumstances they had been by no means designed with the proper consensus, determinism and cryptographic integrity in thoughts that cryptocurrencies require. The OpenSSL scenario above is the proper instance; apart from cryptocurrencies, there actually isn’t any different conditions the place the truth that you possibly can take a sound signature and switch it into one other legitimate signature with a unique hash is a major downside, and but right here it’s deadly. Certainly one of our core rules in Ethereum is simplicity; the protocol must be so simple as potential, and the protocol shouldn’t comprise any black packing containers. Each single characteristic of each single sub-protocol must be exactly 100% documented on the whitepaper or wiki, and applied utilizing that as a specification (ie. test-driven growth). Doing this for an present software program package deal is arguably nearly as onerous as constructing a wholly new package deal from scratch; in actual fact, it might even be tougher, since present software program packages usually have extra complexity than they should as a way to be feature-complete, whereas our options don’t – learn the protobuf spec and examine it to the RLP spec to grasp what I imply.
Word that the above precept has its limits. For instance, we’re definitely not silly sufficient to start out inventing our personal hash algorithms, as an alternative utilizing the universally acclaimed and well-vetted SHA3, and for signatures we’re utilizing the identical outdated secp256k1 as Bitcoin, though we’re utilizing RLP to retailer the v,r,s triple (the v is an additional two bits for public key restoration functions) as an alternative of the OpenSSL buffer protocol. These sorts of conditions are those the place “simply utilizing X” is exactly the best factor to do, as a result of X has a clear and well-understood interface and there are not any delicate variations between totally different implementations. The SHA3 of the empty string is c5d2460186…a470 in C++, in Python, and in Javascript; there’s no debate about it. In between these two extremes, it’s principally a matter of discovering the best stability.
