To generate the ith address, an HD wallet does something along the lines of hash(seed + i) -- while what I'd like is something along the lines of `seed = hash(seed)` i times.
This would make derivation exponentially hard. Right now if you want to get your i
th key you perform 1 hash: HMACSHA512(data || i) so if you want 100
th key you still do 1 hash. If you change that, in order to get the 100
th key you have to do 100 hashes.
This would have the property of being able to fast-forward the seed a certain amount of slots, in order to forget the previous history. For instance in one of my wallets, I could safely fast foward the seed 130 slots without losing anything of value (and in fact, only losing information I'd rather lose).
I suppose there are two easy ways of implementing this:
1. Giving the user the option to set an integer as the "starting point" of his key derivation and start getting keys from that int and discard everything (keys and tx history) before that. You could always get them back by lowering that int and you can always discard more by increasing it.
2. Going to another "branch". That could also help with "hiding the history" that you are looking for. For instance the starting point of the wallet could be m/1'/0'/0' and after reaching 100 keys the user switches to another path: m/1'/0'/1' so the first 100 keys would be at m/1'/0'/0'/0, m/1'/0'/0'/1,... branch and the second 100 would be at m/1'/0'/1'/0, m/1'/0'/1'/1, ... branch. This way you still use the same seed and start from 0 each time but have a hidden history that could only be accessed if the correct derivation path was given, the range of which is from 0 to 2
32-1 so hiding the "branches" is easy too.