1月9日(火)1、2コマ目

今日、やったこと

パスワードのハッシュ化

今日のホワイトボード

ユーザー認証

ユーザー認証はパスワードが使われるケースが多いが、パスワード以外にもユーザー認証に使えるモノがある。

図 認証に使えるモノ

ポイントは「本人しか」。


パスワードの取り扱い

今までは便宜上DBにパスワードを平文で保存していた。が、これは一般的にはありえない話。本来はDB上のデータが漏洩しても即セキュリティインシデントにつながらないようにしなければならない。

図 パスワードの取り扱い

一般的にはパスワードをハッシュ化してDBに保存する。


ハッシュ化

ハッシュ化と暗号化は同じように元の平文が推測しずらい点では一緒。暗号化は元の平文に複合できるが、ハッシュ化された文字列を元の平文に戻すことはできない。

厳密に言えば、できないわけではないが、総当たり攻撃や辞書攻撃になるため、かなり長い時間がかかる。 

図 ハッシュ化

ハッシュ化ソースコード

PasswordUtil.java

文字列+ソルトをアルゴリズムSHA256で10,000回ハッシュ化してハッシュ値を生成する。



Main.java

PasswordUtilクラスを使ってパスワード+ソルトのハッシュ値を生成させる。
ソルトは実行時の現在時刻のナノ秒部を利用。

ハッシュ化されたパスワードで認証するには

DBにハッシュ化されたパスワードを保存する場合、認証は入力されたパスワードのハッシュ値とDBのハッシュ値を比較することになる。

図 ハッシュ化されたパスワードで認証

くどいがハッシュ値を元の平文に戻すには総当たり攻撃や辞書攻撃をすることになる。


ソルト

ハッシュ化の際、文字列長が長いほど元の文字列の推測は困難になる。

よって、パスワードにソルトと呼ばれる文字列を追加してハッシュ化する。

図 よりセキュアなハッシュ値

サンプルアプリケーション作成

DBにはハッシュ化されたパスワードを保存する。
このデータを使って認証を行うアプリケーションを作成する。
図 ハッシュ化されたパスワードを使って認証を行うサンプルアプリ

サンプルアプリソースコード


UserDAO.java

ユーザーマスタテーブルにアクセスするクラス。


Service.java

機能提供クラス。認証はこのクラスで行う。


PasswordUtil.java

平文パスワード+ソルトをハッシュ化。


IndexSrv.java

サーブレット。


index.jsp

ログイン画面。


次回は

入力チェック。



このブログの人気の投稿

1月12日(金)1、2コマ目

1月29日(月)3、4コマ目