Necroposting, yeah!!!! … cause it's cool to resurrect 2 years old threads!!!!
How difficult would to associate one address with your other addresses? What precautions should be taken to protect against this?
It's not totally easy, but it's possible. For example, a node could listen on the network and see that you are using the same IP when sending from two of your different addresses, and thus associate those addresses. To prevent this, you should mask your IP using Tor or similar.
There's also a more fundamental risk in that the chain of ownership of each bitcoin is public knowledge. So, if you, say, purchased the bitcoin from an exchange and gave your name during that, then the exchange can associate your name with that bitcoin. There's a really really nice post by Theymos on that here, and the following thread proposes some great solutions (mainly, a "scrambler"):
https://bitcointalksearch.org/topic/anonymity-241Even besides these two things, there are some other things that need to be handled. For example, you should find a way to encrypt your traffic so your ISP can't read your addresses. Also, you should send out identical traffic regularly, so that your ISP cant associate your addresses using timing alone.
If all of these things are accounted for, I believe you are very close to 100% safe from technical address association.
Wallet boundaries are normally not identified by spying on the IP used (which might help but is not necessary) but by the fact that almost always the input of transactions does not fit exactly with the output which is why more than one input is used. Each time more than one input is used, these inputs are guaranteed to belong to the same wallet.
How fast does wallet.dat size grow with creating new addresses? It would be nice feature to physically remove entries from it if I'm pretty sure no one will send coins to that particular address. For example, if would be useful for shops which create one-time addresses to recieve payments. If it's used once it's not needed anymore so the shop engine sends coins from that address to a certain fixed address and removes keys for that temporary one. It will prevent wallet.dat from growing indefinitely. Also note that invisible address is created each time one sends the sum which isn't equal to the sum of a particular address or sum of several addresses so it's divided by two parts: one goes to the recipient and the other goes to your just transparently generated invisible address (you don't see it in your address book but it's in your wallet.dat). If you often send money you'd already have lots of such addresses and some empty ones. AFAIK no automatic garbage collection is done for now and it's right — there is no way to know which address is temporary and which is constant. Another proposal is to make a special «temporary address» flag which may be set on any of your addresses either on its creation or anytime later. Bitcoin checks this flag on transaction and if this (these) address(es) become empty AND the transaction was confirmed by the network (6 confirmations) then it's removed from the wallet. Hence this flag should be set for all «change» (invisible) addresses because they can't be used to receive payments (they aren't displayed anywhere).
In bitcoin, 2 things that take disk space do grow. Wallet and blockchain. Deterministic wallets can avoid the former and pruning can avoid the latter.
I hope that miners some day will reward transactions that allow significant pruning aka merge many addresses. Why should I pay for a transaction of 50kB if after this transaction the blockchain shrinks by 49kB?