暗号学的ハッシュ関数
また、sha1sum を使うと様々な種類のコンテンツ(ファイル、ディレクトリツリーなど)が一意に識別できる。
関連する用途としてパスワードハッシュ(鍵導出関数#パスワードハッシュ)がある。パスワードは秘匿する必要があるので、通常はそのままクリアテキストでは格納されておらず、何らかのダイジェストの形式で格納されている。利用者を認証する際、利用者が入力したパスワードにハッシュ関数を適用し、出力のハッシュ値と格納されているハッシュ値とを比較する。
セキュリティ上の理由と性能上の理由から、デジタル署名アルゴリズムの多くはメッセージのダイジェストについてだけ「署名」し、メッセージそのものには署名しない。ハッシュ関数は擬似乱数ビット列の生成にも使われる。
ハッシュは Peer to Peer のファイル共有ネットワークでのファイルの識別にも使われている。例えばed2kリンクでは、MD4から派生したハッシュとファイルサイズを組み合わせ、ファイルの識別に十分な情報を提供している。他にもMagnetリンクがある。このようなファイルのハッシュは、ハッシュリストやハッシュ木のトップハッシュであることが多く、それによって別の利点も生じる。
ブロック暗号を使って暗号学的ハッシュ関数を構築する手法はいくつかある。
その手法は、暗号化に通常使われるブロック暗号の暗号利用モードに似ている。よく知られているハッシュ関数(MD4、MD5、SHA-1、SHA-2など)はブロック暗号的なコンポーネントを使った設計になっていて、関数が全単射にならないようフィードバックをかけている。
AESのような標準的ブロック暗号を暗号学的ハッシュ関数のブロック暗号部分に利用することも可能だが、一般に性能低下が問題となる。しかし、ハッシュと同時にブロック暗号を使った暗号化のような暗号機能も必要とするシステムで、しかもICカードのような組み込みシステムでは、コードの大きさやハードウェアの規模が制限されているので、共通化が有利となるかもしれない。
暗号学的ハッシュ関数は、任意長のメッセージを固定長の出力に変換しなければならない。したがって、入力を一連の固定長のブロックに分割し、それらに順次一方向性圧縮関数を作用させる。この圧縮関数はハッシュのために特に設計したものでもよいし、ブロック暗号を使って構築したものでもよい。Merkle-Damgård construction で構築されたハッシュ関数は、その圧縮関数と同程度の衝突困難性がある。ハッシュ関数全体で発生する衝突は、圧縮関数での衝突に起因する。最後のブロックには明らかにパディングが必要で、この部分はセキュリティ上重要である。
このような構築法を Merkle-Damgård construction と呼ぶ。SHA-1やMD5などのよく使われているハッシュ関数は、この形式である。
この構築法の本質的欠点として、length-extension 攻撃や generate-and-paste 攻撃に弱く、並列処理できないという点が挙げられる。より新しいハッシュ関数であるSHA-3は全く異なる構築法を採用している。