SHA パスワードハッシュ

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

Secure Hash Algorithms (SHA) はハッシュ関数の一群です。よくパスワードの暗号化に使われます。デフォルトで Arch は SHA-512 を使ってパスワードを暗号化しますが、他の環境では旧式の MD5 アルゴリズムがいまだに使われていることもあります。この記事ではパスワードのセキュリティを堅牢にする方法を説明します。

MD5 に対する SHA-2 の利点

Linux ディストリビューションではパスワードは基本的にハッシュ化されて /etc/shadow ファイルに保存されます。MD5 ハッシュ関数は既に衝突攻撃によって破ることができます。パスワードをハッシュ化する手段として MD5 がセキュアでないということを直ちに意味するわけではありませんが、より堅牢で強固なアルゴリズムを使用することが推奨されます (例: SHA-512)。

以下のチュートリアルでは米国の国家安全保障局 (NSA) によって Red Hat Enterprise Linux 5 での使用が推奨されていた SHA-512 ハッシュ関数を用います。SHA-2 にはダイジェスト長が 224, 256, 384, 512 ビットのハッシュ関数が存在します。

セキュリティを高める

ノート: shadow 4.1.4.3-3 から新しいパスワードを設定するとデフォルトで sha512 が使われます (bug 13591 を参照)。

4.1.4.3-3 (2011年11月26日) 以前のバージョンの shadow でパスワードを設定した場合、パスワードは MD5 でハッシュ化されています。SHA-512 ハッシュを使うには passwd でパスワードを変更してください。

ノート: 以下のファイルを編集するには root 権限が必要です。

rounds=N オプションを使うことでキーストレッチングを設定できます。ラウンド数はハッシュ関数の選択よりもセキュリティに大きな影響を与えます。例えば rounds=65536 と設定した場合、攻撃者は /etc/shadow に書かれたハッシュからパスワードを弾き出すのに65536個のハッシュを計算する必要があります。つまり攻撃するのにかかる時間が65536倍になります。また、コンピュータにログインするたびに65536個のハッシュを計算しなくてはならなくなります。ただし低速なコンピュータでも1秒もかかりません。rounds オプションを使用しなかった場合、glibc は SHA-512 のデフォルトとしてラウンド数を 5000 にします。rounds オプションのデフォルト値は sha512-crypt.c にあります。

テキストエディタで /etc/pam.d/passwd を開いてアンコメントされた最後の行に rounds を追加してください。行を変更すると以下のようになります:

password	required	pam_unix.so sha512 shadow nullok rounds=65536
ノート: /etc/pam.d/passwd のパスワードオプションに関する詳しい解説は PAM の man ページ を読んでください。

パスワードの再ハッシュ化

暗号化設定を変更しても、パスワードは自動的には再ハッシュ化されません。再ハッシュ化するには、全てのユーザーパスワードを再設定する必要があります。

root で以下のコマンドを実行してください:

# passwd username

username はパスワードを変更するユーザーの名前に置き換えてください。現在のパスワードを入力すると、SHA-2 関数で再ハッシュ化されます。

パスワードが再ハッシュ化されたか確認するには、root で /etc/shadow ファイルをチェックしてください。SHA-256 でハッシュ化されたパスワードは $5 から始まり、SHA-512 でハッシュ化されたパスワードは $6 から始まります。