テーブルは次のようになります。
123456 -> asfty18u78t489yh
password -> 89y203rupdifhof
something -> 2r892389n89rfsd
そして、あなたがハッシュ(asfty18u78t489yh
)、それを生成したパスワードを知っています(123456
)。
ここでは「ハッシュテーブル」と呼ばれているのを見たことがありますが、他のソースでは「ハッシュテーブル」を配列にインデックスを付けるための暗号化方法として定義しています。 「事前計算されたハッシュ」または「事前計算されたハッシュテーブル」という用語を見たことはありますが、いくつかの投稿/ウェブサイトでのみ使用されています。他にも奇妙な用語や、用語の混乱(例:「レインボーテーブル」または「辞書攻撃」と呼ぶ)も見ましたが、実際には正しいかもしれませんが、わかりません。
正しい(または、少なくとも一般に受け入れられている)用語は何ですか?
各パスワードのハッシュ全体が存在する場合、それは事前に計算されたハッシュテーブルです。セキュリティコンテキストでは、通常ハッシュテーブルと呼ばれます。
次のような構造がある場合:
_End of hash1 -> Password1, Password2, Password3, ...
End of hash2 -> Password4, Password5, Password6, ...
_
次に、レインボーテーブルと呼ばれます。ここでの主な違いは、末尾が同じハッシュ(たとえば、sha256の最後の32ビット)を生成するすべてのパスワードをグループ化することです。これは、計算時間を犠牲にしてスペースを節約するために行われます。この場合、クラックしようとしているハッシュを取得し、末尾を確認して、そのハッシュの末尾に関連付けたパスワードを試します。
最後に、一般的なコンピュータサイエンスのコンテキストでのハッシュテーブル(別名ハッシュマップ)は、ハッシュ関数(必ずしも暗号化ハッシュ関数とは限りません)を使用して配列にデータを格納、順序付け、またはアクセスするデータ構造です。それはこのように動作します:
_k = Hash(object.id)
Array[k] = object
_
テーブル内のオブジェクトを検索する場合は、Array[Hash(object_id)]
を取得するだけです
同じハッシュに複数の値を許可する特定のハッシュマップもあります(衝突の場合)。この場合、配列の各エントリはリンクリストです。
レインボーテーブルとは何ですか?どのように使用するのですか? で説明されているように、例として指定する特定のテーブルコンテンツは、正しい専門用語をハッシュテーブルにします。これは、各パスワードに「完全な」ハッシュがあるため、特定のハッシュ(ソルトなどを無視する場合)のパスワードを取得するには、ルックアップを実行するためです。
あなたが言うように、レインボーテーブルは技術的に異なり、事前計算ではなく衝突に依存しています。
したがって、専門用語で説明しているのはハッシュテーブルであり、ルックアップで答えを得ることができます。レインボーテーブルがある場合、何かを計算する必要があります。
そうは言っても、あなたが与えたリンクはこの方法をよりよく説明しています( Wikipediaの記事 もそうです)。
私はレインボーテーブルを日常的に使用すると思いますが、技術的に間違っています。そして今、私は頑固によく知っています。