ソルト (暗号)
初期のUnixでは、パスワードファイル /etc/passwd にソルトつきのパスワードが保存されていた(パスワードの前に2文字のランダムなソルトが付いていた)。 この頃の古いバージョンのUnixでは、ソルトつきパスワードのハッシュ値といっしょに、ソルトの値も(平文で)passwdファイルに保存されていた。 またパスワードファイルはシステムのユーザは誰でも読むことができたが、これは、ユーザ権限で動くソフトウェアがユーザ名やその他の情報を読むためにこのような仕様となっていた。そのため、パスワードのセキュリティは一方向関数(暗号化、またはハッシュ化)だけで保護されている状態だった。 初期のUnixの実装では、パスワードの最大長は8文字までで、ソルトは12ビットであった。ソルトの取りうる値は4,096通りとなる。 これは1970年代における計算量とストレージのコストから見れば、妥当なバランスと言えた。
ソルトを使ってパスワードを保存する手順の概要を、例をもとに示す。 次のテーブルは、ユーザー名とパスワードの組み合わせを2つ示している。ここではまだパスワードは保存されていない。
ソルトの値はランダムに生成される。また、ソルトはどんな長さでもよい。この例では、ソルトの長さは8バイト(64ビット)とする。平文のパスワードにソルトを付与して、その結果をハッシュ化する。この結果の値をハッシュ値と呼ぶ。ソルトの値とハッシュ値をストレージへ保存する。
上のテーブルで示したように、ソルトの値が異なると、平文のパスワードが同じであっても、作られるハッシュ値はまったく別になる。 加えて、攻撃者がハッシュ値を事前に計算しておくことも難しくなるため、辞書攻撃の効果も低減できる。ただし、よく使われるパスワードや、簡単に推測できるパスワードに対しては、ソルトは効果がない。