I know about Electrum. Thanks for the tip about the reference client or Armory. What I want may be in Armory's "expert" mode and custom change behavior, but I want the client to pick maybe the oldest address that wasn't yet used for the change. So the bitcoins go around in circles within the fixed wallet, not just to originating address.
Bitcoin Spinner is one app, but it uses only 1 key, and it's for Android. Good for the phone but I'm also interested in a computer version.
I do not want a deterministic wallet. I want a randomly generated wallet. Specifically, I do not want a sequence of keys that can come out from a single password or root key as in the case of deterministic wallets.
I understand what they are, they have advantages, but I simply don't want them.
In general, Armory is going to pick the oldest addresses for sending new coins, so you would probably get the behavior you want. It also has coin-control in "Expert" mode, so you could super-customize its behavior if you wanted (though, age of coins is not displayed).
I'm curious why you are so against deterministic wallets -- the number of ways that a deterministic wallet could be compromised that a random-key wallet would avoid, is basically non-existent (in an overwhelming majority of use cases). There's a reason Bitcoin-Qt/bitcoind will be moving to deterministic wallets by default: the advantages are staggering, with very little impact to security.
Thanks for the Armory info, that is close to what I would want, so just a little bit more and it will do what I want. Sort of.
I am against deterministic wallets because I do not want to take the chance that my wallet will be compromised. Yes, I understand it is negligibly small. With a random wallet, if one private key is compromised, I can take steps to secure the rest of my coins knowing that the other private keys are probably not yet compromised.
If my deterministic wallet gets compromised (the root key), then my whole wallet is gone. By the time I find out, all my coins would probably have already been stolen.
This problem is different from a stolen wallet.dat file. In both cases, you might lose all your coins if someone has physical access to your private key file wallet, or you get a trojan or other malware.
I can confidently say that due to my computing practices, the chances of having my wallet remotely stolen or compromised is a lot smaller than someone getting physical access to my machine. I just don't get random malware, despite using Windows. And if my machine is stolen, being encrypted, I have enough time to transfer my coins to a new wallet.
Besides, I want control of my private keys, I also use vanity keys (or private keys generated randomly by another software.)
You might want to implement a deterministic wallet with a fixed number of keys (and no new ones get added) for one wallet, that might make me change my mind.
The way I understand it, deterministic wallets currently implemented allow for unlimited key generation, or 13 billion keys in your example.
But you have the same risk with a fixed number of keys. If your fixed pool of keys is compromised, then it's no different than a deterministic wallet. They get your wallet, and any time in the future, they can empty your account.
Here's why you'll agree with me: In your example of a fixed set of keys, you are simply creating a new pool of keys every now and then, or when you suspect they are compromised. Well, why couldn't you just do the same thing with a deterministic wallet? Use 100 keys in the deterministic wallet (which you can do with Armory by setting "Send change back to first input address" and "Remember my choice"), and then you retire it every now and then and create a new deterministic wallet. With Armory, you can even keep the old wallet around in case you need it, or someone else sends it money.
In both cases, you're creating a pool of keys, and changing them every so often. The difference is that with the deterministic wallet, each pool of keys can be backed up with only a couple lines of easily-typed data, instead of 100 lines of individual private keys.
Even better than messing with change addresses: just use each wallet for 2 months, and then create a new one and switch. Then you can get new addresses for every transaction, which is much simpler, helps maintain your privacy, and your attack surface is identical to using a random set of keys that will be changed in 2 months.
This is especially important, because the days of random-key wallets is going away. There's just too much benefit to them... all the major clients are moving over. Including Bitcoin-Qt and Multibit.