Spectre, I think that there is a misunderstanding here in that you don't realise how specific the circumstances where you can apply rainbow tables are - what Stasik and Denkain seem to be talking about is not a rainbow table but a word list, or dictionary file.
When a password is hashed, using md5, ntlm, etc, that hash is then stored for future reference. Traditionally these hashes were publicly viewable, because only the original user could generate them using their password. The reason that only the original user could generate the hash is because when a hashing algorithm is used the original password is unrecoverable - this is called one way encryption. The only way to emulate that hash was to guess the original users password; two methods of doing this being dictionary attacks (http://en.wikipedia.org/wiki/Dictionary_attack
) and brute force attacks (http://en.wikipedia.org/wiki/Brute_force_attack
Unfortunately, for the nefarious individuals trying to guess the password, though a brute force attack is guaranteed to work - in that if it is given enough time it will always find the password - most people don't have a significant enough amount of time to sit and wait for the brute force algorithm to find the solution. Fortunately, for the nefarious individuals trying to guess the password, some bright spark came up with the idea of calculating all possible hash values and associating them with a password which would generate that hash, these hash/pass combinations would be found specificaly for each hashing algorithm and significantly cut down on the amount of time to figure out a password. These tables are, generally, very large and becoming increasingly more limited in use.
The reason rainbow tables work is because it doesn't matter what character combination you put into a hashing algorithm, it only matters what you take out of it. A rainbow table does not need to contain the exact same password as the original user used because there may be a different set of characters which the hashing algorithm will turn into the same hash, therefore, there can be no guarantee that the password the rainbow table has given you is the original one. This is fine when you are only interested in getting the hashing algorithm to generate a specific hash, such as when you are attempting to log on to a system, but does not work when you aren't interested in that hash but in the information that has actually been encrypted, such as the information travelling accross an encrypted network.
Where a rainbow table would be useful would be in obtaining the original passphrase to connect to the network. Generally it is impossible to use rainbow tables with WPA-PSK because it enforces a password salt (http://en.wikipedia.org/wiki/Salt_(cryptography)
) -password salts are one of the defences against using rainbow tables - which is generally the SSID of the network, however, because the salt is known ahead of time, being the SSID of the network, you can actually create a rainbow table which factors in the salt. An example of this is at http://www.renderlab.net/projects/WPA-tables/
where there is a rainbow table that has been pre-computed using a number of popular SSIDs and a large dictionary.