SHA パスワードハッシュ
関連記事
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 ビットのハッシュ関数が存在します。
セキュリティを高める
4.1.4.3-3 (2011年11月26日) 以前のバージョンの shadow でパスワードを設定した場合、パスワードは MD5 でハッシュ化されています。SHA-512 ハッシュを使うには passwd でパスワードを変更してください。
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
パスワードの再ハッシュ化
暗号化設定を変更しても、パスワードは自動的には再ハッシュ化されません。再ハッシュ化するには、全てのユーザーパスワードを再設定する必要があります。
root で以下のコマンドを実行してください:
# passwd username
username
はパスワードを変更するユーザーの名前に置き換えてください。現在のパスワードを入力すると、SHA-2 関数で再ハッシュ化されます。
パスワードが再ハッシュ化されたか確認するには、root で /etc/shadow
ファイルをチェックしてください。SHA-256 でハッシュ化されたパスワードは $5
から始まり、SHA-512 でハッシュ化されたパスワードは $6
から始まります。
既知の問題
fgetty
Arch Linux はデフォルトで SHA-512 によってパスワードをハッシュ化します (2011年11月26日以降)。ミニマルなターミナルマネージャである fgetty はデフォルトでは SHA-512 パスワードに対応していません。デフォルトの fgetty で SHA-512 を有効にすると締め出されてしまいます。fgetty にパッチを当てて SHA-512 のサポートを追加したバージョンが AUR の fgetty-pamAUR[リンク切れ: アーカイブ: aur-mirror] パッケージでインストールできます。