How does MultiBit deal with importing private keys and rescanning? As I understand it, Bitcoin Core doesn't maintain an address index and so has to rescan the whole blockchain when you add a new private key to the wallet, which is time intensive. If MultiBit is talking to regular Core peers, how do they look up the transactions of interest given only the addresses that the MultiBit wallet controls?
SPV wallets are pretty simple, they just download the whole blockchain but throw away transactions they don't "care" about. But because they throw away transactions they don't care about, they're unable to tell if the block is valid or not (e.g. a transaction could be fabricating bitcoins). But because they know a lot of work went into creating the block (you can check the hash), they know that it's sort-of-maybe-probably is going to be valid. After a lot of other blocks are made on top of this, you have even a much higher confidence it's valid (or at least, people are spending a lot of hash power to make it look so).
But however, if you change your definition of "what you care about" (aka importing addresses), you'll need to re-download the blockchain, from the earliest point you think interesting transactions could be. Although, that doesn't have to be a big deal at all. As an optimization you can push a (bloom) filter up to the bitcoin client you're downloading from and ask them to pre-filter your results. That saves a *lot* of bandwidth, and allows you to power through the blockchain pretty fast. That's a little bit of a hack though, because with the current structure you have no way of knowing if they over-filtered or not)