タイトルの内容について、どちらもハッシュの計算時に使用するアレな値という意味では2つは全く一緒なので、違いを整理しました。
備忘として残しておきたかったので投稿します。
Salt (ソルト)
パスワードを暗号化する際に付与されるデータのことを言います。
例えばメールアドレスとパスワードでアカウント登録を要求されるようなサービスにおいて、メールアドレスをSaltに含め、パスワードをハッシュ化して保存するといった使い方をします。
パスワードを捨ててパスワードハッシュを保存し、さらに保存されたハッシュは非可逆でパスワードを復元できないことが重要となります。
もしサーバーのrootに第三者が侵入したとしてもパスワードの漏洩を防げるからです。
また、この方法は総当り攻撃を阻止することを意図していて、攻撃が意図的に遅くなるように設計されているのが特徴で、ストレッチング(1000回ハッシュ計算を繰り返して計算に時間がかかるようにする)という方法と併せてよく使用されます。
そのため、Saltは秘密であることを重要視していないですが、いくつかの条件があります。
- ユーザーごとに異なるSaltであること (漏洩時のリスクを最小限にする為)
- ある程度の長さを確保すること (推測されにくくする為)
HMAC
メッセージ認証符号の一つであり、鍵(メッセージ認証符号のことです)とデータとハッシュ関数を元に計算されたハッシュ値を持ちます。
認証と改竄検出のために使われるアルゴリズムで、HMACにより算出された値をMAC (Message Authentication Code) 値と呼びます。
HMACは基本的に暗号チェックサムであり、攻撃者がメッセージを改竄したことを検出するために使用されます。
なので鍵は秘密である必要があり、可能な限り高速となるように設計されている特徴があります。