QA@IT

ソルトとは何ですか?

21067 PV

パスワードの漏洩事件のあったLinkedInのブログで、今後パスワードをソルトつきのハッシュで保存するという記事を読みました。ソルトとはなんでしょうか?

回答

ソルト(salt)とは、パスワードのハッシュ値を計算する際に、パスワードの前後に付加する文字列のことです。
たとえば、ソルト長が10文字、パスワードが最短8文字とすると、ソルトつきパスワードは最短18文字になります。このように長いパスワードに対応するレインボーテーブルを作ることは現在のコンピューターパワーでは不可能なので、ソルトはレインボーテーブルに対する効果的な対策です。

一方、ソルトは総当たり攻撃に対しては、あまり効果はありません。パスワードのハッシュ値が漏洩している状況ではソルトやハッシュアルゴリズムも漏洩していると想定すべきです。すなわち、ハッシュ値を計算する方法は攻撃者に既知であるため、総当たり攻撃の難易度は、ソルトがない場合と比べてほとんど変わりません。

これに対して、元々のパスワードを長くすると、総当たりの回数を大幅に増加することができ、総当たり攻撃に対しても有効な対策となります。

ソルトの要件は以下の通りです。

  • ある程度の長さがあること(20文字以上あればよい)
  • ユーザ毎に異なる文字列であること

過去の実装では、ソルトとして乱数を用いる場合が多かったのですが、実際にはソルトに「予測困難性」は要求されないため、乱数が必須ではありません。ソルトとして、メールアドレスやユーザIDを用いることもできます。これらでソルトとしての長さが足りない場合は、固定の文字列を追加するとよいでしょう。

# 運営からの依頼によりQ&Aの形式で初期コンテンツを提供しておりました。このQ&Aはその流れで書いておりますが自由意思によるものです

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。