Code Monkey home page Code Monkey logo

Comments (6)

dcousens avatar dcousens commented on August 20, 2024

The DER encoding on that signature is wrong, its 1 byte longer than it says it is (expected 71, got 73).

from elliptic.

chjj avatar chjj commented on August 20, 2024

@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.

indutny avatar indutny commented on August 20, 2024

@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.

chjj avatar chjj commented on August 20, 2024

@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.

indutny avatar indutny commented on August 20, 2024

@chjj Fantastic! I just wanted to be sure that there is no security risk for you guys!

from elliptic.

chjj avatar chjj commented on August 20, 2024

@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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.