BTC addresses whose private keys are from SHA256 of another public address
twitter.com
twitter.com
After I sent some testnet coins to the address but before I could even send out an email telling people about it, the coins had been stolen (it might have been in the same block that my original transaction appeared in, I don't remember). This was ~3 years ago, and on testnet -- the only thing I could imagine is that someone was testing out a brainwallet-stealing bot on testnet before deploying it to mainnet. I was very impressed.
Uninitialised memory for blockchain.info would have a very high density of bitcoin-related data, and they also generate a large amount of keys.
If they (sometimes?) end up hashing uninitialised memory instead of random data, there's every chance that they'd sometimes generate keys that are hashes of bitcoin-related data. It is admittedly unlikely that they'd be hashing data that is exactly the right length to be a bitcoin address or txid, but there could also be another bug which means they hash data that is nul-terminated rather than a fixed size.
Both fitwear[1] (mentioned in the pastebin) and another user[2] have reported BTC inexplicably being transferred out of their blockchain.info wallets.
The next question is, if this is really what's going on, how has it happened? Is it an honest bug or has it been planted deliberately (by either a hacker or an employee) with the intention of being able to steal funds from some proportion of blockchain.info addresses?
There is also every possibility that fitwear and the person who wrote the pastebin article are the same person, and that it is maliciously designed to spread FUD about blockchain.info. We shouldn't jump to any conclusions without seeing a smoking gun.
[1] https://www.reddit.com/r/Bitcoin/comments/7cw2uw/how_blockch... [2] https://www.reddit.com/r/Bitcoin/comments/7cx2tg/my_blockcha...
EDIT: But wait a minute! Blockchain.info keys are generated client-side in javascript, to the best of my knowledge, so this shouldn't explain it at all...
Many people used to recommend against their wallet for these reasons, but on the other hand they haven't closed up shop and ran off yet, which makes them head and shoulders above the average hosted wallet provider. Bitcoin is a very special space.
So far I've found nothing.
I used gdb to dump the bitcoind memory, I'm using https://github.com/matja/bitcoin-tool to output human-readable addresses, I'm using (a modified version of) https://github.com/tenthirtyone/blocktools to parse the blockchain files, and some custom scripts to extract addresses from the scriptpubkeys and compare them against my list of addresses taken from the bitcoind memory.
I need to setup a bitcore node one of these days...
You could assume malice, yet their hypothesis is somewhat testable: if it is uninitialised memory you should have private keys based on word-size shifts due to alignments. 2^64 hashes is somewhat doable. Truncation should be easier to test (in case it's null-terminated).
> At some point between then and Nov 12, the compromised 15ZwrzrRj9x4XpnocEGbLuPakzsY2S4Mit got into his online wallet as an 'imported' address.
The 15ZwrzrRj9x4XpnocEGbLuPakzsY2S4Mit address is generated by using sha256() of his previously-imported address 1Ca15MELG5DzYpUgeXkkJ2Lt7iMa17SwAo.
The other confusing part is:
> fitwear's 15Z address sat unused until Nov 12 when fitwear transferred his 9 BTC into it using blockchain.info.
Why did he send money to a random address in his "imported" addresses list in the first place? The usual wallet workflow would surely send change to an address derived from the wallet's actual seed, not an "imported" address. And fitwear would presumably have no reason to send money to himself on purpose, and even if he did why would he choose an "imported" address instead of one derived from the wallet seed?
So what exactly was fitwear trying to do here? The more I think about it, the more I think fitwear messed this up, and it's nothing to do with generating keys from uninitialised memory.
Possibly it's a combination of malware importing addresses into his blockchain.info wallet and him doing weird transactions that ended up losing him money, or possibly it's just FUD designed to discredit blockchain.info.
EDIT: https://twitter.com/ryancdotorg/status/936087458223149057
> it sounds like maybe some bit of code decided "hmm, that's not a well formatted WIF private key, it must be a brainwallet" without very clearly explaining what was going on
That sounds plausible. Possibly fitwear tried to import the same private key in 2 different ways and ended up getting burnt.
It is quite easy to create a pseudo-random number generator whose output is statistically indistinguishable from a real random number generator but is easily predictable to an attacker. (It's actually much easier to do this than to build a secure RNG.) This makes random number generators particularly attractive targets for attacks. Access to reliable random number generators is crucial for any kind of security, but is going to become increasingly challenging as time goes by.
OP = person who posted pastebin
E = person who's been stealing and laundering funds
The key observation is that some people "create private keys from just about anything using Sha256 (i.e. Sha256(password/phrase)). This, of course, is NOT a recommended way of obtaining a private key since if YOU can think of the word/phrase, someone else can too"
Maybe E noticed this in 2014 just like OP did. Then she decided to try to make a lookup table. First she hashed everything in a natural language dictionary. Then to try to make her hash lookup table a bit bigger, extended it to any string of a given length like a transaction id, wallet public key, etc that appeared in the blockchain. This is somewhat similar to a standard cryptanalysis technique - where you try using everything in RAM as a key to see if it's the LUKS key - but using these particular inputs is admittedly ad hoc.
However, the next textbook step to attempting a lookup table is to do rainbow tables - which E started to do, but then gave up after a few iterations since the space was too large, and apparently this was enough, to have found the private keys for a significant number of other people's wallets.
Once the E had that, it's trivial to write a script that performs onward transfers to other accounts controlled she controls and steal money. It also makes sense to transfer the funds through several wallets as a laundry. It's strange that the transfers occur precisely along the links in the rainbow table (a rainbow table is really a forest of linked lists) - very strange. It's possible E just got lazy, since this is one of the easiest ways to write the script that decides where to send the money, once she controlled all these sha256-chains (chains in the rainbow table sense) already. Of course, that laundry's not good enough, since OP has now discovered it and made all of us curious to identify E.
PS. There may be records of IP addresses involved in some of these transactions. Does anyone know where to find that kind of info, to see what IPs E was running the scripts from? People using VPSs, VPNs and Tor sometimes leak their home IP.
I'm also fascinated by this. For my next Bitcoin Treasure Hunt [1], I've been coming up with a lot of puzzles that involve private keys. It's so much fun to think about different ways to encode them. My first puzzle wasn't too interesting, but this one should be much more fun.
[1] https://formapi.io/blog/posts/bitcoin-treasure-hunt/#bitcoin...
In [17]: hexlify(base58.b58decode("KyTxSACvHPPDWnuE9cVi86kDgs59UFyVwx2Y3LPpAs88TqEdCKvb")) Out[17]: '804300d94bef2ee84bd9d0781398fd96daf98e419e403adc41957fb679dfa1facd012774e1c4'
Does anyone know what I'm doing wrong?
Most likely the discrepancy is that you're using raw base58 instead of base58check
$ ./bitcoin-tool --input-type private-key --input-format hex --input 4300d94bef2ee84bd9d0781398fd96daf98e419e403adc41957fb679dfa1facd --output-format base58check --output-type private-key-wif --network bitcoin --public-key-compression compressed
KyTxSACvHPPDWnuE9cVi86kDgs59UFyVwx2Y3LPpAs88TqEdCKvbWhile you should be commended for letting users know that they should use e.g. key strengthening (or, preferably, random numbers) for their private keys, you should not leak what are, whether by chance or intention, the private keys of other peoples' (bots'?) accounts.
There's nothing illegal about being an idiot.
It may be illegal to leak others' financial account information.
You just leaked my info!
That would explain how the "bot" knows a transaction is about to occur and why the bitcoins were being transferred within minutes of arriving.
The addresses he finds are temporary addresses a customer is directed to send payment, and then transferred to a more secure wallet shortly after confirmation.
For example, watch either of these talks by Ryan Castellucci: https://www.youtube.com/watch?v=f2s3_UG9IPU https://www.youtube.com/watch?v=foil0hzl4Pg
Are exchanges audited to ensure they aren't artificially inflating the price by using artificial buyers and sellers? It seems like there is every incentive to keep the price high, and it seems like doing so maliciously would be quite straightforward.
2.) Transactions on exchanges never hit the blockchain, so exchange volume and blockchain volume are unrelated. Furthermore, keeping the price high would not be "quite straightforward". What method do you have in mind? The only way to artificially keep the price high long-term is to place infinitely-large buy orders at the minimum price you want. This will obviously cost you unbounded amounts of money and would be financial suicide.
Some of the exchanges have zero fees for high enough volume on some trading pairs... and if an exchange themselves are running wash trades it's not like they'd be paying their own fees anyways.
There's a reason why wash trading is regulated against.
Even for early miners?
Edit: I should have written early buyers, since those wouldn't mind paying extra after their asset appreciating 10000x
You'd be missing out on mining revenue. And given that the marginal cost of mining tends towards the marginal reward for mining, missing out on revenue is almost as bad as making a loss.
There would have to be a substantial incentive to fake transaction volume in order to make it worth it.
Additionally, given that blocks are full these days, there's not very much scope for increasing the apparent transaction volume anyway. The best you could do is replace large "real" transactions with a larger number of smaller "fake" transactions.
I just don't think it's likely to be happening.
What does "early miners" mean? Nobody has any inherent advantage in mining bitcoins. The costs are the same for everyone
Some people may have an advantage by having cheaper electricity costs or better mining hardware, but they would still be missing out on significant amounts of fees by not mining legit transactions