Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Exploiting ECDSA Failures in the Bitcoin Blockc...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

Exploiting ECDSA Failures in the Bitcoin Blockchain

Avatar for Filippo Valsorda

Filippo Valsorda

October 15, 2014

More Decks by Filippo Valsorda

Other Decks in Research

Transcript

  1. Public key + Private key A wallet The address: hash

    ( public key ) 1DY5YvRxSwomrK7nELDZzAidQQ6ktjRR9A
  2. A signed statement, published to the world and recorded in

    the blockchain A transaction “This money I can spend, can now be spent by Y”
  3. A: This money I can spend, can now be spent

    by X …: This money I can spend, can now be spent by … …: This money I can spend, can now be spent by … …: This money I can spend, can now be spent by … X: This money I can spend, can now be spent by Y …: This money I can spend, can now be spent by … …: This money I can spend, can now be spent by … Y has this money to spend
  4. A: This money I can spend, can now be spent

    by X Signed with A’s private key Hash of X’s public key
  5. A EC based signature scheme As seen in TLS, DNSSEc,

    the PS3… Elliptic Curve Digital Signature Algorithm
  6. Global: point G on a curve Private key: a random

    number d Public key: d X G A summary
  7. e = hash(message) k = a random number (x, y)

    = k X G r = x Signature Sig: [r,(e+r*d)/k]
  8. k1 = k2 (x, y) = k X G r

    = x r1 = r2 If you reuse k Sig1: [r,(e1+r*d)/k] Sig2: [r,(e2+r*d)/k]
  9. If you reuse k Sig1: [ r ,(e1+r*d)/k] Sig2: [

    r ,(e2+r*d)/k] k1 = k2 (x, y) = k X G r = x r1 = r2
  10. If you reuse k Sig1: [r, (e1+r*d)/k ] Sig2: [r,

    (e2+r*d)/k ] k1 = k2 (x, y) = k X G r = x r1 = r2
  11. k = (e1 - e2)/ (e1+r*d)/k - (e2+r*d)/k] If you

    reuse k d = [(e1+r*d)/k]*k-e1 r
  12. Text Text Text Text Text Text Text Text Text Sony’s

    ECDSA code Mittwoch, 29. Dezember 2010
  13. To spend money: the public key of the address; a

    signature w/ that key Reminder when money is moved a signature is published
  14. for block in chain: for tx in block: for input

    in tx: ... An easy search A input is money being spent in the tx
  15. Extract r from the signature; take note of where we

    found it in a lookup table; check if we found it before. An easy search
  16. Well… No. I mean, yes, but there are 100M inputs

    in the blockchain. Done! Out of memory! :(
  17. First pass: filter the possible r. Add to a Bloom

    filter, if present add to a set. ! Second pass: if r present in the set, export sig and pubkey. A smarter search
  18. A smarter search r = 42 r = 42 Bloom

    filter + Blockchain Set
  19. A smarter search ? ✓ Final list Sig, Pubkey, Tx…

    r = 42 r = 42 42 Set 19 36 Blockchain
  20. Text Text Text Text Text Text Text Text Text TEXT

    TEXT TEXT TEXT Accent Accent Accent
  21. Generate k deterministically, as a function of private key and

    message. RFC 6979 k = HMAC_DRBG ( d, H (m) )