パスワードのハッシュ化

パスワードのハッシュ化

ハッシュ化


-ハッシュ化(ハッシング)とは - IT用語辞典 e-Words
--http://e-words.jp/w/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%8C%96.html
-->ハッシュ化ではハッシュ関数と呼ばれる特殊な計算手順により、任意長の長さのデータから固定長の一見ランダムに見えるハッシュ値を得る。同じデータからは常に同じハッシュ値が得られるが、少しでもデータが異なるとまったく類似しない別のハッシュ値が生成される。また、ハッシュ値から元のデータを割り出したり、同じハッシュ値を持つ別のデータを生成することは極めて難しい。
-->このような性質のため、パスワードを保管する際にパスワードそのものではなくパスワードのハッシュ値を保管し、認証の際には入力値のハッシュ値と比較する手法(パスワードのハッシュ化)がよく用いられる。もし第三者がハッシュ化されたパスワードデータベースを不正に取得しても、パスワードそのものを得ることはできないためである。

ソルト


-パスワードはハッシュ化するだけで十分? | NTTデータ
--http://www.nttdata.com/jp/ja/insights/blog/20170914.html
-->レインボーテーブルを使った攻撃に対抗するためには、パスワードをハッシュ化する前に、パスワードにシステム側が決めた文字列(ソルト)を付与してから、ハッシュ化するのが有効です。この「ソルト」は以下の要件を満たしている必要があります。
-->・ユーザーごとに異なる文字列とすること(OWASPでは乱数の使用を推奨)
-->・ある程度の長さを確保すること(OWASPでは32byte or 64byteを推奨)
-->上記の要件を満たすことで、元のパスワードが同じでも異なるハッシュ値となり、さらにハッシュ値の元となる文字列が長くなるため、攻撃にかかる時間を長くできます。

ストレッチング


-パスワードはハッシュ化するだけで十分? | NTTデータ
--http://www.nttdata.com/jp/ja/insights/blog/20170914.html
-->ストレッチングとは、ハッシュ値の計算を数千回〜数万回繰り返し行うことです

実装方法


-PHP: password_hash - Manual
--http://php.net/manual/ja/function.password-hash.php
-->password_hash ( string $password , integer $algo [, array $options ] ) : string
-->password_hash() は、強力な一方向ハッシュアルゴリズムを使って 新しいパスワードハッシュを作ります。 password_hash() は crypt() と互換性があるので、 crypt() が作ったパスワードハッシュは password_hash() でも使えます。

-Ruby on Rails チュートリアル:実例を使って Rails を学ぼう
--https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-adding_a_secure_password
-->セキュアなパスワードの実装は、has_secure_passwordというRailsのメソッドを呼び出すだけでほとんど終わってしまいます。

総務省調査


-総務省|ウェブサービスに関するID・パスワードの管理・運用実態調査結果
--http://www.soumu.go.jp/menu_news/s-news/01ryutsu03_02000099.html
-->(3)パスワードのハッシュ化の実施率が低い
-->管理するパスワードの流出に備えた難読化対策であるハッシュ化※1について、全体で4割以上のサービスがパスワードのハッシュ化を行っておらず、特に無料のサービスでは7割がハッシュ化を行っていない。
-->※1 パスワードのハッシュ化とは、パスワードの文字列の内容を別の文字列に不可逆的に変換することを指します。

-nilog: パスワードは平文で保存(´;ω;`) 「協力を得られた28社からの回答」 「全体で4割以上のサービスがパスワードのハッシュ化を行っておらず、特に無料のサービスでは7割がハッシュ化を行っていない」 総務省|ウェブサービスに関するID・パスワードの管理・運用実態調査結果 (2019-03-01)
--http://www.nilab.info/nilog/?type=twitter&id=1101465727125446662
--