salt
暗号化
HMAC

Salt と HMAC の違い

More than 1 year has passed since last update.

タイトルの内容について、どちらもハッシュの計算時に使用するアレな値という意味では2つは全く一緒なので、違いを整理しました。

備忘として残しておきたかったので投稿します。


Salt (ソルト)

パスワードを暗号化する際に付与されるデータのことを言います。

例えばメールアドレスとパスワードでアカウント登録を要求されるようなサービスにおいて、メールアドレスをSaltに含め、パスワードをハッシュ化して保存するといった使い方をします。

パスワードを捨ててパスワードハッシュを保存し、さらに保存されたハッシュは非可逆でパスワードを復元できないことが重要となります。

もしサーバーのrootに第三者が侵入したとしてもパスワードの漏洩を防げるからです。

また、この方法は総当り攻撃を阻止することを意図していて、攻撃が意図的に遅くなるように設計されているのが特徴で、ストレッチング(1000回ハッシュ計算を繰り返して計算に時間がかかるようにする)という方法と併せてよく使用されます。

そのため、Saltは秘密であることを重要視していないですが、いくつかの条件があります。


  • ユーザーごとに異なるSaltであること (漏洩時のリスクを最小限にする為)

  • ある程度の長さを確保すること (推測されにくくする為)


HMAC

メッセージ認証符号の一つであり、鍵(メッセージ認証符号のことです)とデータとハッシュ関数を元に計算されたハッシュ値を持ちます。

認証と改竄検出のために使われるアルゴリズムで、HMACにより算出された値をMAC (Message Authentication Code) 値と呼びます。

HMACは基本的に暗号チェックサムであり、攻撃者がメッセージを改竄したことを検出するために使用されます。

なので鍵は秘密である必要があり、可能な限り高速となるように設計されている特徴があります。