How are these numbers (rainbow chains) used to recover passwords?
When a hash is requested to be cracked, it uses the HashToIndex() function to convert the hash into a 64 bit integer. It then has to generate a 64 bit index for each position, P, in the chain. This results in L amount of indices, where L is the chainlength of the table. It then performs a search for each of these indices in the table. If any of the endpoints in the tables matches an index number there may be a hit. To find out if it got a hit, it has to regenerate that chain. Using the startingpoint as the seed, it regenerates the chain to the current position P. The resulting index number is converted to a plaintext using IndexToPlain. To verify we got a hit, it uses PlainToHash to compare the 2 hashes. If it matches, we recovered the password and the cracking stops. If it does not match, it was a false alarm and we have to try the next match. When all endpoints has been searched for, the process is complete.