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

Stealing Bitcoin With Math - HOPE XI

Stealing Bitcoin With Math - HOPE XI

Explaining Bitcoin and attacks old and new.

WARNING: contains more than 15 math formulas.

Recording: https://vimeo.com/177318833

Live brainwallet theft demo: https://blockchain.info/address/1JEnL6xYG9iHPWFV4Zz1xYUq1kQTKmnJwM

https://twitter.com/FiloSottile
https://twitter.com/ryancdotorg

Filippo Valsorda

July 23, 2016
Tweet

More Decks by Filippo Valsorda

Other Decks in Programming

Transcript

  1. Ryan Castellucci DEF CON 23 - “Cracking Cryptocurrency Brainwallets” “The

    Bitcoin Brain Drain: A Short Paper on the Use and Abuse of Bitcoin Brain Wallets” - Marie Vasek, Joseph Bonneau, Ryan Castellucci, Cameron Keith, and Tyler Moore “Speed Optimizations in Bitcoin Key Recovery Attacks” - Nicolas Courtois, Guangyan Song, and Ryan Castellucci
  2. Filippo Valsorda HITB2014KUL - “Exploiting ECDSA Failures in the Bitcoin

    Blockchain” “Private Key Recovery Combination Attacks: On Extreme Fragility of Popular Bitcoin Key Management, Wallet and Cold Storage Solutions in Presence of Poor RNG Events” - Nicolas T. Courtois, Pinar Emirdag, and Filippo Valsorda
  3. $ ./brainflayer -v -I 0000...0001 -b bloom.blf -f addr.bin -o

    cracked rate: 110268.38 p/s found: 112/6815744 elapsed: 60.751 s $ tail cracked 7ff45303774ef7a52fffd8011981034b258cb86b:c:(hex)priv/btc: 00000000000000000000000000000000000000000000000000000000002de40f a91bc8e0cc56b5951cc54b14d4aa1f713cfee41c:c:(hex)priv/btc: 00000000000000000000000000000000000000000000000000000000003b01f1 d0a79df189fe1ad5c306cc70497b358415da579e:c:(hex)priv/btc: 0000000000000000000000000000000000000000000000000000000000556e52 5baa200a8ec459e1d9e8488be9bc69e97b40fcb5:u:(hex)priv/btc: 000000000000000000000000000000000000000000000000000000000056cd81 bb45374137f6cb0630443f45bb1f208275c9e8ff:u:(hex)priv/btc: 000000000000000000000000000000000000000000000000000000000056cd82 5b32135cd104e01e5454d41ddcf8ae3f786f01bc:u:(hex)priv/btc: 000000000000000000000000000000000000000000000000000000000056cd83 9e8cf1917702c6dd9251537bcaf35582ee6eb9e1:c:(hex)priv/btc: 00000000000000000000000000000000000000000000000000000000005d2100
  4. Private key Public key Address Crypto magic Hash Memorable string

    correct horse battery staple Stupidly fast hash
  5. correct horse battery staple 1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T 4097 Tx - 15.41512035 BTC

    bitcoin is awesome 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE 19 Tx - 501.06500863 BTC
  6. "" (an empty string) 1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN 273 Tx - 58.89151975 BTC

    thequickbrownfoxjumpedoverthelazydog 1MjGyKiRLzq4WeuJKyFZMmkjAv7rH1TABm 147 Tx - 106.071 BTC
  7. /** * BitcoinJS-lib v0.1.3-default * Copyright (c) 2011 BitcoinJS Project

    * * This program is free software; you can redistribute it and/or modify * it under the terms of the MIT license. */ [...] randomBytes: function(e) { for (var t = []; e > 0; e--) t.push(Math.floor(Math.random() * 256)); return t },
  8. /** * BitcoinJS-lib v0.1.3-default * Copyright (c) 2011 BitcoinJS Project

    * * This program is free software; you can redistribute it and/or modify * it under the terms of the MIT license. */ [...] randomBytes: function(e) { for (var t = []; e > 0; e--) t.push(Math.floor(Math.random() * 256)); return t },
  9. /** * BitcoinJS-lib v0.1.3-default * Copyright (c) 2011 BitcoinJS Project

    * * This program is free software; you can redistribute it and/or modify * it under the terms of the MIT license. */ [...] randomBytes: function(e) { for (var t = []; e > 0; e--) t.push(Math.floor( Math.random() * 256)); return t },
  10. Transaction • A public statement • Signed with the address

    private key • Recorded on the blockchain “This money I can spend, can now be spent by this other address”
  11. Transaction • Source public key • Signature by corresponding private

    key • Target address(es) (hash of public keys)
  12. Transaction • Source public key • Signature by corresponding private

    key • Target address(es) (hash of public keys)
  13. ECDSA signature • G is the global curve base point

    • d is the private key • k is a random number (the nonce) • z is the hash of the signed message
  14. ECDSA signature • G is the global curve base point

    • d is the private key • k is a random number (the nonce) • z is the hash of the signed message
  15. $ ./brainflayer -v -I 0000...0001 -b bloom_r.blf -f r.bin -o

    cracked rate: 113965.05 p/s found: 3/9170845696 elapsed: 81116.841 s $ tail cracked 79be667ef9dcbbac55a06295ce870b07029bfcdb:r:(hex)priv/btc: 0000000000000000000000000000000000000000000000000000000000000001 cabc3692f1f7ba75a8572dc5d270b35bcc006505:r:(hex)priv/btc: 0000000000000000000000000000000000000000000000000000000000bc614e 6a5df9fae6ef2925cd2db1b7c404b148714994f2:r:(hex)priv/btc: 0000000000000000000000000000000000000000000000000000000080001fff
  16. TX 1: r: 5c16a3f7bafc1ef0, public key: 956fb654bcb2e061 TX 2: r:

    5c16a3f7bafc1ef0, public key: 956fb654bcb2e061
  17. TX 1: r: 5c16a3f7bafc1ef0, public key: 956fb654bcb2e061 TX 2: r:

    5c16a3f7bafc1ef0, public key: 956fb654bcb2e061 TX 3: r: 5c16a3f7bafc1ef0, public key: 4b20eabe93918281
  18. TX 1: r: 5c16a3f7bafc1ef0, public key: 956fb654bcb2e061 TX 2: r:

    5c16a3f7bafc1ef0, public key: 956fb654bcb2e061 TX 3: r: 5c16a3f7bafc1ef0, public key: 4b20eabe93918281 TX 4: r: 94ce2b1e34d3fddc, public key: 4b20eabe93918281
  19. TX 1: r: 5c16a3f7bafc1ef0, public key: 956fb654bcb2e061 TX 2: r:

    5c16a3f7bafc1ef0, public key: 956fb654bcb2e061 TX 3: r: 5c16a3f7bafc1ef0, public key: 4b20eabe93918281 TX 4: r: 94ce2b1e34d3fddc, public key: 4b20eabe93918281 TX 5: r: 94ce2b1e34d3fddc, public key: 56b28d8ac3bcc4f5
  20. Thank you! Questions? @ryancdotorg - Ryan Castellucci @FiloSottile - Filippo

    Valsorda https://github.com/StealingBitcoinWithMath/ No innocent Bitcoins were harmed in the making of this talk
 (Just to spell it out: we didn’t steal anyone’s Bitcoin)