Comments (6)
The DER encoding on that signature is wrong, its 1 byte longer than it says it is (expected 71
, got 73
).
from elliptic.
@dcousens, yep, just noticed this. Elliptic looks like it does strict length checking on the elements in the signatures and the signature itself. I wrote a function to attempt to shorten overly long DER signatures before passing them into elliptic (in case anyone else runs into this): https://gist.github.com/chjj/1d26c818f2e20afcc33d
Closing now.
from elliptic.
@chjj this is very important to reject such signatures. If you allow multiplicity in signature encoding - there are potential attacks on hash collisions. I really advise you against using it for new signatures, it can be used to verify old ones (up to some minimal point in the past).
from elliptic.
@indutny, eventually the bitcoin DERSIG flag will be activated by bcoin once the blocks reach a certain version threshold, requiring signatures to follow the standard encoding, so this shouldn't be an issue. All transactions accepted to the mempool already get checked for strict DER signature encoding before being verified.
I'm technically only validating historical data here which isn't usually done due to bitcoin's checkpoint system.
See: https://github.com/indutny/bcoin/blob/fullnode/lib/bcoin/script.js#L2187
So, yes, disclaimer to anyone who needs to use my example above: make sure you verify the standard DER encoding yourself for non-historical data.
from elliptic.
@chjj Fantastic! I just wanted to be sure that there is no security risk for you guys!
from elliptic.
@indutny, thank you. :)
I added an extra note in the comments and a failsafe to make sure this is never done for non-historical data.
from elliptic.
Related Issues (20)
- ec.Signature is not fully available in Typescript
- How to format a PHP-OpenSSL signature to be verifiable with elliptic? HOT 1
- Convert signature to base64 HOT 1
- Curve25519 Derivation doesn't work against RFC test Vector
- ⚠️ BN.toString(16) can result in wrong output ([email protected]) HOT 1
- Custom Curves HOT 1
- recoverPubKey accepts invalid signatures for recovery
- How to convert a DER-formatted signature back to a Signature object? HOT 1
- KeyPair.fromPublic: returns a KeyPair?
- How to create an ec.Signature instance from r,s in typescript
- I seem to get a wrong signature when using 'secp256k1' HOT 1
- Why hasn't this software been updated after 2021 years? HOT 1
- Feature request: support ed448 HOT 1
- How does point comparison work for the identity / point at infinity?
- Feature Request: Support for Secp256r1
- [FEATURE] Need equivalent of secp256k1_ec_seckey_tweak_add
- v6.5.2 has a breaking change HOT 1
- Regular expression injection - (ReDos)
- Elliptic's EDDSA missing signature length check HOT 2
- Dependabot alerts being raised for elliptic HOT 9
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from elliptic.