perlでパスワードハッシュ

「perl password hash」などとググると2020年現在もちょっとアレな情報が上位に来るので、先に結論を述べた上で、パスワードの取り扱いに関する基本的なことを説明したいと思う。

認証のためのパスワードを安全に保管する方法

Crypt::Password モジュールを利用すると良い。

use strict;
use warnings;
use Crypt::Password;

my $pw = 'plain password';
my $hashed_password = password($pw);

#認証
if( check_password($hashed_password,$pw) ){
    print "OK!\n";
}else{
    print "NG!\n";
}

以降、基本的なことを述べる。

認証をするだけなら不可逆な変換が良い

「パスワードを暗号化」という表現は多い(実際、上記で紹介したモジュール名もまさに Crypt と書いてある)

が、認証を「する側」のシステムとしてであれば、不可逆な変換を通した結果が検証できれば良い。

可逆な変換(本来の意味の暗号化)をする必要は無いし、復号するための情報が漏れた場合に大変危険である。

パスワードをハッシュ値化するための機能を積極的に使うこと

ハッシュ値を計算する機能は数多くあるが、言語やその言語の追加ライブラリで用意されている「パスワードをハッシュ値化したり検証したりする機能」を利用するべきである。

最新のものを使っていれば、ハッシュアルゴリズム、salt、ストレッチング等は安全だと言える。

異様に衝突しやすいアルゴリズム、独自のsalt値生成ロジック、独自のストレッチング方法を実装するのは、特別な場合を除いて避けた方がよい。一般的なアプリケーションを書いている限りは不要だろう。


prev: バルハルマラソン終了条件踏んでしまった
next: 解散した有名バンドの元ギタリストが再犯で逮捕
created at : 2020-09-17 13:33:03
updated at : 2020-09-17 14:37:01
author : Toshiaki Yokoda