Rainbow tables (Making a Faster Cryptanalytic Time-Memory Trade-Off) work fairly well, although – because they use different regression functions in the chains – they contain a lot of redundant data.
The example table in the paper (lanmanager hash; 8 char. alpha; 4666×38223872) contains a lot of redundant data, which can be calculated:
>>> CalcRedundancy(4666, 38223872, CalcN(26, 1, 7))
The 300mb table would be stored in a 20mb table if the regression function was to be perfect.
The problem is that to make a regression function perfect, it should be ‘in paralel’ with the cipher function, which isn’t an option for most of these are engineered to prevent this.
Adding variable length chains back into the rainbow chains could allow exploiting existing chains more efficiently.
This probably sounds messy and to be honoust this idea is still a bit messy.
I`ll write something decent along the way.