Conversation started Oct 26, 2011 at 21:01.
Oct 26, 2011 21:26
and at some point it will produce x as a hash output, and since you are then in the process of rebuilding the chain, you know the input, which is the password you want.
If "passwords" are, for instance, sequences of 6 bytes, you can define R(x) as "the first six bytes of x"
Oct 26, 2011 21:48
So, if I have found the reconstructed chain end in the table, and I got s (the corresponding starting point), then I can rebuild the whole chain
If x is really an hash output part for the chain, then the rebuilding will yield, at some point, a password p (an output of R) which, when given to H as input, yields x
because a R() invocation in that alternate chain produced the same password than a R() invocation in my stored chain, but with a distinct input
because in order to make the table grow, you have to find a new chain which ends with a hash output that the table does not already has
after having reached a relatively small size, prospective new chains happen to merge with one of the already known chains with high probability
but the corresponding hash outputs will be processed with distinct R() functions (each table has its own)
roughly speaking, to attack a set of N potential passwords, you choose the number of zeros which mark a chain end so that the average chain length is t where t^3 = N
so that's why I often describe that as: a table of precomputed hashes (all the hashes in the chains), with a smart compression scheme (you keep only the chain starts and ends, that's enough to rebuild the chain) at the expense of a higher lookup cost (must rebuild the chain ends and do several lookups)
instead of thinking "I assume that x is an output of H within my chains", we must make a more precise hypothesis: "I assume that x is an output of H within my chains, followed by R_c for a given colour c"
Then Biham, Shamir and a few others came and said: Martin/Rivest and Oechslin tables are two special case of a generic scheme
in which you have "several" tables (but less than t) and each table uses several colours (but not one colour per link)
Shamir & co defined "thick rainbow tables", "thin rainbow tables", "fuzzy rainbow tables"... which are variants depending on how you decide to switch colours within a chain
None is generically better or worse than the other, but it gives a lot of configurable parameters to optimize for a given architecture
- A rainbow table of any sort will successfully find p such that H(p) = x if and only if x was encountered during table construction (in a chain which was ultimately kept, i.e. not a chain which merged with an already known chain).
(1.72 is e-1; the 0.72 are the extra chains which were computed but discarded because they collided with already known chains; the decision to stop at 1.72 comes from the empirical Matrix Stopping Rule. You can go further but it is exponentially expensive.)
Conversation ended Oct 26, 2011 at 22:45.
Thomas Pornin does his crypto thing.
Oct '1126
Participants
- Thomas Pornin 81%
- this.josh 17%
- Jeff Ferland 0%
- Ninefingers 0%
all times are UTC