Again on this "true randomization" issue. In general, what amount of randomization is desirable, i.e., how often should it happen? If not very often (e.g., several times a day), then the real world will take care of this (because nodes go online and offline, money are transferred, etc.).
I agree. I wrote the following to CfB:
I do not think that is possible anymore. Preparing means you need to know 1440 blocks in advance which accounts you need. So, you need to build up the a whole forging graph of size
http://www.wolframalpha.com/input/?i=28000%5E1440 (28000 accounts, 1440 blocks for effectiveBalance) [to get sure you cover all cases]. The leaves of that graph represent the entry points for the attacker's accounts. Then the attacker needs to create accounts at the right time to forge the next N blocks. That is like calculating the private key out of your public key.
If this is not enough, then the following procedure is possible. First X accounts (w.r.t. the inverse weights) choose some "random" numbers locally, and publish their hashes. X is supposed to be large enough so that the bad guy would never control exactly all of them. Then, they publish numbers themselves; if the published number does not correspond to the hash or is not published at all, then the corresponding account is heavily penalized. If that happens for at least one account, the whole procedure is invalidated (and we wait for the next try)..
The problem here still is: who belongs to X
if one of X is offline and who decides that? It is the very same consensus finding problem that block generation tries to solve.
Well, with our forging procedure we obtain a consensus about who are the best X account w.r.t. the inverse weights, right (and the network then delegates to the best of the best the right to create the next block)? Then we just ask those best accounts to provide a random number for us. The idea is that if there is at least one "honest" guy among them, then this random number will be "truly random", even if all the others try to cheat.