【スポンサーリンク】

「ソルト化ハッシュ」とは?

ソルト化ハッシュ」は、各人のパスワードなどにランダムな文字列を付与してから、ハッシュ値へと変換したものです。

この「それぞれの元データに付与したランダムな文字列」が「ソルト(salt:塩)」です。

\記事が役に立ったらシェアしてね/

この記事では、わかりやすさを重視して説明しています(やや厳密さには欠ける表現もあります)。イメージが掴めたら、より専門的な解説へと進んでください。

【スポンサーリンク】

通常のハッシュ化とレインボーテーブル攻撃

パスワードなど機密データは、通常 ハッシュ値に変換して記録されます。

ユーザー元データMD5 ハッシュ値
Apassword01af88a0ae641589b908fa8b31f0fcf6e1
Bpassword0251d25b4ae8ce20ad29b25cf4f2e23203
Cpassword01af88a0ae641589b908fa8b31f0fcf6e1
ハッシュ変換

ハッシュ変換の計算方法(アルゴリズム)は数多く考案されています。
元の文字列データをいろいろ変換して別の文字列に変える点は共通しています。
元データが違うのに変換後に同じ値になってしまうことがないように工夫されています。

入力されたパスワードからハッシュ値を計算して照合ことは簡単ですが、元データを計算することは困難です。暗号化と違ってサーバ管理者も復号するキーは持っていないことは、最重要のパスワードを管理する仕組みとして好都合です。

ハッシュ変換は、一方通行なのです。

しかし、単にパスワードをハッシュ変換するだけでは、同じパスワードのユーザーのハッシュは同じ値になってしまいます
データベースの中で多く見られるハッシュ値から規則性が見えてしまいます。

さらに、同じハッシュ化アルゴリズムを使えば、大量の元データとハッシュ値の対応表をあらかじめ用意することができます。
その表に同じハッシュ値を見つけることができれば、力技で元データを割り出すことができてしまいます。
これを「レインボーテーブル攻撃」といいます。

レインボーテーブルは「あるハッシュ値に対して総当たり攻撃を行った際の計算結果を、別のハッシュ値を攻撃する際に使用する」というアイデアに端を発する。

レインボーテーブル – Wikipedia

つまり、ハッシュ化アルゴリズムが特定され、大きなデータベースがあると、暗号化して記録したはずのパスワードも解読されてしまうのです。

例えば、ハッシュ化されたパスワードが盗まれた事件で、約61万件のうち「単純なパスワード」が使用されていた約29万件がすぐに解読されてしまったことがあります。

投稿者は窃取したデータの件数は80万1915件で、メールアドレスが約60万9千件、MD5でハッシュ化されたパスワード約60万7千件、電話番号が約65万件、配送先住所や電話番号、氏名が約20万件、銀行口座情報約1千件、およびTwitterIDやTokenが含まれると主張。

2023年8月16日に外部のフォーラムにpictSQUAREより窃取した情報と主張するデータ販売の取引を持ち掛ける投稿が行われた。

パスワードはMD5によるハッシュ化は行われているもののソルト付与は行われていなかったため、単純なパスワードが使用されていた29万4512件は元の文字列が判明していると投稿。

不正アクセスによるpictBLand、pictSQUAREの情報流出の可能性についてまとめてみた – piyolog

ここでの「単純なパスワード」というのは、攻撃者の持つレインボーテーブルに含まれていた、ということになります。

複雑なパスワードにしておいた方がよいのは、このためなんだね。

ソルトによってハッシュ値を複雑化する

ユーザー側がパスワードを複雑にするという自衛措置だけでなく、サーバ管理者側でもハッシュ値を複雑化する工夫があります。
それが「ソルト」です。

サーバ側が一人ひとりにランダムな文字列を用意して、それをパスワードにつないでからハッシュ値を記録します。
このランダムな文字列を「ソルト」と言います。

ユーザー元データソルトソルト化ハッシュ
Apassword01E1F5912d043e6eb95c452418239068fc2bd8
Cpassword013A1274ab0f9fbbfe8f91a857b62fca55ffd2

ユーザーがパスワードを入力したら、ソルトとソルト化ハッシュを使えば正しい入力か照合することができます。

そこで、認証のためには各ユーザーに対応したソルトもデータベースで管理しておく必要があります1

ソルトを付け足すことでハッシュ変換前の元データは、かなり複雑になります。
ソルトの文字数は必要に応じて十分に長く取ることができます。
また、同じパスワードでも、それぞれソルトが異なるので違うハッシュ値が記録されます。

ソルト化ハッシュだと、たとえデータベースのハッシュ値が流出したとしても、レインボーテーブル攻撃でもとのパスワードを推定することが困難です。
元データとソルトを足した文字数の組み合わせに対応するレインボーテーブルを用意するには、天文学的に膨大なデータサイズが必要になるからです。

ソルト自体は知られても危険が少ない

ちなみに、ソルトのリストも攻撃者に知られたとしても そこまで問題ありません。

パスワード解読には、まず、ソルト化ハッシュから「元データ+ソルト」を求める必要があります。

結局、ソルトだけがわかっていても、ソルト化ハッシュから元データを割り出すには巨大なレインボーテーブルや総当たり攻撃が必要なことは変わらないからです。

ハッシュ変換のアルゴリズム

さらに、ハッシュ変換のアルゴリズムの選択もパスワードの解析時間に影響します。

「暗号的ハッシュ関数」は、たくさん考案されています。

ハッシュ変換のアルゴリズム例
  • MD5
  • SHA256
  • bcrypt、scrypt、Argon2など

それぞれで複雑さや処理速度が異なるからです。
実はパスワード用のハッシュ変換では、むしろ低速のアルゴリズムの方が好都合です2

こちらもどうぞ。
同じパスワードを使い回すのはどうして危険?【パスワードリスト攻撃】
「パスワードリスト攻撃」とは、どこかのサイトで流出した ID・パスワードのリストが、攻撃者によって別のサイトの不正アクセスに使われてしまうサイバー攻撃です。「パスワードリスト攻撃」では、多くの人が複数のサイトで同じ ID・パスワードを用いる傾向を悪用します。攻撃者は侵入に必要なパスワードリストを、よりセキュリティの弱いサイトから入手して、ほかのサイトで利用します。

急に「今すぐパスワードを変更することをおすすめします」と表示されたら?【Google パスワードチェックアップ】
スマートフォンを使っていたら、「今すぐパスワードを変更することをおすすめします」という通知が表示されました。 もし、Googleアカウントで「漏洩した可能性のあるパスワード」が検出されたら、なるべく早めにパスワードを変更しましょう。 今回は、サイトで共有のパスワードだけだったので、そのまま保存しているパスワードを削除しました。 通知元はGoogle Play開発者サービス 「パスワードが漏洩した」...

ピクブラの情報流出があったけどピクシブは大丈夫?(パスワードリスト攻撃)
pictBLandとpixivは運営会社・サーバが違うので、今回の問題では無関係です。 ただし、同じパスワードで登録している場合は、すぐにパスワード変更した方がよいです。 pixivのアカウントは大丈夫? こんにちは。今、Xでピクブラで騒動になっていて、質問したいことがあるのでお願いします。 ピクブラは登録したこともなければ、連携もしていません。ですが、pixivの方は登録しています。 この場合、...

(補足)

  1. 主要なライブラリやフレームワークでMCF形式が使われており、アプリケーションはパスワード情報をMCF形式のままデータベースに保存する方式が一般的です。 – ソルト付きハッシュのソルトはどこに保存するのが一般的か – Qiita
  2. パスワードの保存には、MD5やSHA-2のような一般的で高速なハッシュ関数ではなく、bcrypt、scrypt、Argon2などパスワード保護用に開発された「低速の」アルゴリズムが望ましいとされます。 – ソルト付きハッシュのソルトはどこに保存するのが一般的か – Qiita
QRコードを読み込むと、関連記事を確認できます。
「ソルト化ハッシュ」とは?
【スポンサーリンク】
タイトルとURLをコピーしました