Section 3.1 of MRL-0004 explains how an attacker can use temporal associations in order to considerably increase his chance of tracking Monero transactions.

The problem is basically that output usage is not random on their age. There's a non-random distribution. So any random selection of outputs for the mixin would not be ideal, as the attacker can use the age to guess which input is more likely to be the true one.

So, if that's the problem, why not simply always use outputs which are "time-neighbor" to the real one?

Suppose you want to spend your output K with mixin 4. We sort all outputs in the chain with the same denomination as K by their block height and position in block. Let's suppose we end up with the following list segment:

... A, B, C, D, K, W, X, Y, Z ...

These are K's "time-neighbors". Our actual mixing must be composed exclusively of outputs from that list, and it must be sorted. The only random choice would be to select which of the following equally probable list to use:

[A, B, C, D, K]

[B, C, D, K, W]

[C, D, K, W, X]

[D, K, W, X, Y]

[K, W, X, Y, Z]

This reveals a very good estimate of which is the age of the true input. This problem can be mitigated by implementing the recommendation of sending one's money to self periodically. Plus, I believe this is a more than worthy trade-off when we consider that by implementing this, we'd be fixing the temporal association problem, making the probability of any input in a mixin being the true one equal to each other. By not taking input ages into account, we reveal with a much higher probability which is the true input, which is much worse than just revealing a good age estimate.

What do you guys think?