薬剤師のプログラミング備忘録

変人薬剤師の独り言

暫く更新していませんでした。

今回はパスワードの再設定についてです。

元々、パスワードはハッシュ化(暗号化)されてdatabaseに保存されますので、管理者側からもその内容はわからないようになっています。

つまり、パスワードは管理者がdatabase経由で直接書き換えても意味が無いということです。

例えば、

id:test_san

PASS:test_pass

だった場合には、databaseへの登録内容は、

 

id:test_san

PASS:$5y$50$gagfglN4VHmuUDify/q/PjOoeUJBsNS2bKpAPOkeiuaIOkoi(適当)

 

として登録されます。AさんとBさんが同一のパスワードだったとしても、この暗号化された内容は異なるようになっています。

一部のハッシュアルゴリズムは解析可能(と言っても、高性能パソコンで長い時間をかけて)です。

 

パスワードに使える文字種 = 26 + 26 + 10 = 62
すべてのパスワードの総数 628 = 約218兆
試行に掛かる秒数 = 218兆÷20億 = 約11万秒 = 約30時間

 

上記の時間ぐらいで解析できるようですね。

実際には、ハッシュに加えてソルトやストレッチングなども考慮するようですが、php7.0からは非推奨なようです。cryptやMD5のようなものもありますが、一般的に現在ではphpからはpassword_hashが多く用いられているようです。cryptは互換性があるようですけれども。

と、このようにハッシュ化によるパスワード保護は比較的安全ではありますが、パスワードリマインダが使用できないというデメリットもあります。管理者側(もしくは自動)でパスワードを確認する作業ですね。なので、新パッケージは利用者側から上書きするしかありません。

結局は総当りで攻撃されると突破される可能性もありますので、あまりに回数の多い入力はIPblockなどの方法が必要となると思います。

 

f:id:MC753:20170807170240g:plain

f:id:MC753:20170807170243g:plain

f:id:MC753:20170807170247g:plain

f:id:MC753:20170807170251g:plain