PR

パスワードのハッシュ化とは? ソルト・ペッパー・レインボーテーブル攻撃 等の用語を一挙解説

セキュリティ
記事内に広告が含まれています。
スポンサーリンク


Webサービスでは,ユーザのパスワードを安全に保存する必要があります.
しかし,単純にデータベースへパスワードを保存するだけでは,情報漏えい時に重大な被害へつながります.
そこで重要になるのが「パスワードのハッシュ化」であり,情報処理安全確保支援士試験においても頻出のキーワードとなっています.

この記事では,情報処理安全確保支援士(SC)試験対策として,

  • なぜパスワードをハッシュ化するのか
  • レインボーテーブル攻撃とは何か
  • ソルト(Salt)とペッパー(Pepper)の違い
  • SHA-256が危険と言われる理由
  • bcrypt・scrypt・Argon2の違い
  • ストレッチングとは何か

を一気通貫で分かりやすく解説します.

記事の都合(セキュリティ対策の啓発)上,攻撃手法に関する記述が一部含まれますが,あくまでセキュリティ教育を目的としたものであり,悪用は禁止です.

スポンサーリンク
スポンサーリンク

なぜパスワードをハッシュ化するのか

 本題に入る前に,ハッシュ化・ハッシュ値について軽く復習しておきましょう.

ハッシュ化:平文(元の文字)をハッシュ値に変換すること
ハッシュ値:特定のハッシュアルゴリズムにより得られる固定長のランダムな文字列
ハッシュ値から元のデータを復元することは極めて困難(一方向性),同じ平文からは同じハッシュ値が得られる(同一性)を持つ.

では,本題に入ってハッシュ化の必要性について確認しましょう.

もしパスワードをそのまま(平文)保存していた場合,データベースが漏えいすると全ユーザのパスワードが即座に知られてしまいます.

usernamelogin_idpassword
情報 一郎johopass123
暗号 花子h-cryptqwerty
認証 二郎jiro-authpass123

この状態で漏えいすると,攻撃者はそのまま本人になりすましてログインできてしまいます.

さらに,情報 一郎さんや暗号 花子さんがログインIDとパスワードを他のサービスでも使い回していた場合,他のサービスにも不正ログインされてしまいます.

そもそも,データベース(特にUsersテーブル)の中身が不正に引き抜かれるようなことはあってはならないのですが,万が一,このような事態が起こったとしても被害を最小限に抑えるためにパスワードのハッシュ化が必要なのです.

スポンサーリンク

レインボーテーブル攻撃とは

 前章では,平文パスワード保存の危険性についてご紹介しました.そこで,ユーザが入力したパスワードをSHA-256によりハッシュ化したテーブルを以下に用意しました.
注)表示の関係上,パスワードハッシュ値の一部は省略して掲載しています.

usernamelogin_idpassword
情報 一郎joho9b8769a4a74 …
暗号 花子h-crypt65e84be3353 …
認証 二郎jiro-auth9b8769a4a74 …

 一見問題無さそうに見えますが... 実は重大な落とし穴があります.
その落とし穴とは,一体何でしょうか?

・攻撃者は,事前に作成された膨大な量のパスワード平文とパスワードハッシュ値の対照表(これを「レインボーテーブル」と呼びます)を持っている.

・情報 一郎 さん と 認証 二郎 さんのパスワードハッシュ値が等しい(2人は同じパスワードを登録している)ことが分かる

 事前に作成(計算)された膨大な量のパスワード平文とパスワードハッシュ値の対照表を用いて,データベーステーブル中のパスワードハッシュ値から元のパスワード平文を割り出す攻撃のことを,レインボーテーブル攻撃と呼びます.

複数のユーザが同じパスワードを設定していることが分かる

 仮に情報 一郎さんが設定しているパスワード「pass123」がレインボーテーブルに無かったとしましょう.(実際は,このような安直なパスワードはほぼ確実にレインボーテーブルに存在します.)
その場合,攻撃者は総当たりまたは辞書攻撃,パスワードリスト攻撃等の別手段で元のパスワード「pass123」を割り出すことになります.
そうすると,芋づる式にパスワードハッシュ値が等しい 認証 二郎 さんのパスワードも「pass123」であることが攻撃者にバレてしまいます

他の攻撃手法との違い

 ここで,パスワードを割り出す際に用いられることが多い代表的な攻撃手法を表で整理してみましょう.

攻撃特徴
ブルートフォース攻撃全てのあらゆる文字列を総当たりで試す
辞書攻撃汎用単語やよく用いられるパスワードのリストを試行する
レインボーテーブル攻撃事前に計算された平文とハッシュ値の対照表を用いて元のパスワードを割り出す
パスワードリスト攻撃既に流出したIDとパスワードの組み合わせを用いて不正ログインを試行する
スポンサーリンク

ソルト(Salt)とは

 前章で言及した課題(弱点)を克服するために生み出されたのがソルト(Salt)です.
ユーザ(パスワード)ごとにランダムな文字列を付加した上で元のパスワードとセットでハッシュ化を行うことから,ランダムソルトとも呼ばれます.

ランダムソルトを導入すると,先ほどのUsersテーブルは以下のようになります.

usernamelogin_idpassword
情報 一郎johoc790f40e873be84ebe86517b178d3ec1:08312ece73f4d66e1bc7019c028e2ed699dfa836336879422f59079c99c42f3f
暗号 花子h-crypt9e5097fd3a71f92a18d99f2ed20d3ebf:e5096d7e82c28ba68813a8b9025ee9a874abaa27b50190a744dae70e0ffdba8b
認証 二郎jiro-autha083a92b3f3971106db7918a6e3a2932:9435c3ef08b6855d3758e279ce90894b9f2ccf7891fe4a418a15ee1c941459b7

passwordフィールドには,ランダムソルトと(ランダムソルト+平文パスワード)のハッシュ値が:(コロン)で連結されて格納されています.

ランダムソルトを入れることで,異なるユーザ間で同一のパスワードが設定されていたとしても,一見しただけではその事実が分かりづらくなっています.

 しかし,このランダムソルトにもまだ課題は残ります.それは,ハッシュ値の中にランダムソルトが同梱されている点です.つまり,辞書攻撃に対しては脆弱で,特に平易なパスワードを設定している場合は,ハッシュ値の総当たり突合により,元のパスワードを割り出されるリスクが残ります

この問題を解決するために考えられたのが次章で説明するペッパー(Pepper)です.

スポンサーリンク

ペッパー(Pepper)とは

 Pepperは,ハッシュ化処理の際に用いる秘密の文字列です.ランダムソルトは,ハッシュ値と同梱(あるいは同じデータベース)に保存していましたが,Pepperはサーバの秘密領域やKMS(Key Management Service)等に保存します.

$$hash(\text{pepper }+ \text{salt} + \text{password})$$ のように処理します.

上記の数式で処理されたハッシュ値の場合,攻撃者はPepperの値を知らないとハッシュ値からの総当たり突合で元のパスワードを割り出すことができません.
従って,Pepperはランダムかつ十分に長い文字列を設定し,データベースとは別のサーバ秘密領域(KMS保管が望ましい)等で厳重に管理する必要があります.

ソルトとペッパーの違い まとめ

 ソルトとペッパーの違いを表でまとめてみました.

項目ソルトペッパー
目的重複防止漏えい耐性向上
公開可?不可
保存場所DBサーバ秘密領域
ユーザごと?通常Yes共通が多い
スポンサーリンク

bcrypt・Argon2

 ここまで,SHA-256というハッシュ化アルゴリズムに対して,安全性を高める手法(ランダムソルト・ペッパー)をご紹介してきました.
続いて,ハッシュ化アルゴリズム自体の改良についてご紹介します.

SHA-256アルゴリズムは,ハッシュ化処理(計算)が高速である反面,攻撃者にとっても総当たり攻撃がしやすいという課題があります.
そこで,現在はbcryptArgon2のような敢えて計算に時間(負荷)がかかるアルゴリズムが採用されるようになっています.ハッシュ化処理を複数回繰り返すストレッチング処理やメモリ負荷制御,GPU耐性といった戦略です.

スポンサーリンク

まとめ

 最後に,実際の情報処理技術者試験・情報処理安全確保支援士試験の過去問で知識を再確認しましょう.

パスワードクラック手法の一種である,レインボー攻撃に該当するものはどれか。

ア)何らかの方法で事前に利用者IDと平文のパスワードのリストを入手しておき,複数のシステム間で使い回されている利用者IDとパスワードの組みを狙って,ログインを試行する。

イ)パスワードに成り得る文字列の全てを用いて,総当たりでログインを試行する。

ウ)平文のパスワードとハッシュ値をチェーンによって管理するテーブルを準備しておき,それを用いて,不正に入手したハッシュ値からパスワードを解読する。

エ)利用者の誕生日や電話番号などの個人情報を言葉巧みに聞き出して,パスワードを類推する。

平成31年度 春期 応用技術者試験 午前 問38

パスワードクラックの対策のうち,ストレッチングに該当するものはどれか。

ア)あらかじめ利用者だけが知っている質問と答えをシステムに登録しておき,普段と異なるログイン方法の場合に追加で質問を行う。

イ)一定時間内にパスワードを一定回数誤ったとき,それ以降のログインを試行できないようにする。

ウ)パスワードの照合のためのハッシュ値を,パスワードに対してハッシュ化を繰り返して,求める。

エ)パスワードの照合のためのハッシュ値を,パスワードに利用者IDごとに異なる文字列を付加してからハッシュ化して,求める。

令和7年度 春期 応用技術者試験 午前 問44

実践・応用的な問題としては,応用情報技術者試験 令和6年秋期 午後問1が参考になります.

スポンサーリンク
スポンサーリンク
セキュリティ
シェアする
しばをフォローする
タイトルとURLをコピーしました