レインボーテーブル

https://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%A4%E3%83%B3%E3%83%9C%E3%83%BC%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
元パスワードとハッシュ変換値の対応表を少ない容量で保存するための技術。
基本的なアイディアは、対応表を一定範囲ごとに区切って、その境目の元パスワードとハッシュ変換値のみを保存するというもの。
元パスワードを求めたいハッシュ値から、次の元パスワードとハッシュ値をどんどん確認していけばそのうち「境目」にたどり着く。「境目」が分かれば、そのパスワードがどのエリアに含まれるものかが判明する。エリアが判明したらそのエリアの1番めの元パスワードから順にハッシュを計算することでエリア内の対応表をその場で再構成して、元パスワードを得る。



実際には『次』を求めるために任意の「ハッシュ値から『次』の元パスワードを得る関数」を使う。
ただこれだけだと、元パスワードが違ってもハッシュ値がたまたま重複してしまうと以降の『次』が全て重複してしまうという問題がある。
それを防ぐために「ハッシュ値から『次』の元パスワードを得る関数」を何十種類も用意して、何番目のパスワードにはこれを使うというのを決めておく。
このn番目のパスワードにはn種類目の関数を使うという仕掛けを視覚的に表すと虹のようであることから「レインボー」という呼び名が付いている。(……のだと思う)